Context
The template writesSettingScope.Tenant, which @stackra/settings does not export, so services fell back to
SettingScope.Node. A settings write records its author, a principal’s public id, and a seeder has none. The
stackra settings:apply runner refused every group with a legal floor because it could not see the holder’s market.
Decision
- No
SettingScope.Tenant. ADR 0323 decision 4 keeps the tenant level in tenancy: a settings class writesTenancyScopes.Tenantfrom@stackra/tenancynext toSettingScope.Platform. The template and its generated files change to that name; settings exports no tenant case. - A system author.
settingSystemAuthor(name)answerssys_<name>for a lower snake_case job name (seed,market_pack_seed), the form the workflow runner and the access log use for a system actor. Seeders and seed packs write with it. A request never chooses it, and four-eyes still applies: a person approves a pending system write. - The runner takes the market.
settingsApply({ ..., market })takes the holder’s resolved market pack; with it,MarketPackSettingFloorSourceDriverchecks the group’s floors in force today, and without it the fail-closedRegisteredFloorGuardDriverstill refuses a floor-bearing group. Both refuse a group not registered in the process.
Consequences
- A tenant-level setting resolves at the tenant node with no settings-owned tenant word.
- Seed revisions name who wrote them.
- The CLI applies a floor-bearing group once it resolves the holder’s pack and passes it (
--market); the flag itself is the CLI’s change.
Enforcement
planned —packages/state/settings/src/core/functions/__tests__/setting-system-author.function.test.ts and
packages/state/settings/src/core/drivers/__tests__/market-pack-setting-floor-source.driver.test.ts.
Supersedes and sources
Supersedes: none. Sources: OSservices/audit/SPEC.md gap 6; OS services/notifications/SPEC.md gap 7; STA-825;
STA-779.