Skip to content

Commit a23be74

Browse files
fix(dogfood, downstream-contract, plugin-dev): the qa fixtures, conformance ledgers and harness refusals state each decision in words instead of a tracker number (stage 5a) (#21250)
Part of #20752 Clause-②: no **Stage 5a of the `domain:cli` lane under the maintainer's A / A ruling (5902360492): every ledgered tracker number in the `packages/qa` strings outside the authz conformance matrix, plus the `plugin-dev` test title folded in from the dead-citation sweep.** The matrix file (76 occurrences) is stage 5b, which carries the closing keyword, so this PR has none. Text only: no expected status, error `code`, verdict, route, field, export or control flow moves. ## What this does The dogfood harness refusals (`assertArmed`, the build stand-in, the showcase security helper, the multi-org remedy), the expression and search conformance ledgers' summary and enforcement cells, nine fixture manifests and one permission-set label, and the downstream-contract manifest sent the reader to a tracker number for the reason behind them. In form D, as stages 1 to 4 applied it (PR #21172, PR #21188, PR #21219, PR #21231), the number goes. Where the sentence already said what was decided, only the citation goes. Where it leaned on the number, it now says the decision in words. All 26 ledgered occurrences in the claim's 16 files (claim `5940325318`), at 25 string sites, plus the one `plugin-dev` `describe` title the claim adds (not on the ledger). Every cited card was read first. Three answer 404 or cannot be read here and were read through their landing commits instead (below). ### Rewritten in words | Where (head line) | Cited | The text now says | Decision read from | |---|---|---|---| | `dogfood/test/armed.ts:136-138` empty-declaration refusal | 8074 | "...the exact defect class this helper exists to close, a fixture that passes while the control it measures is not engaged." | card 8074 (an org-less fixture cannot observe the gated write floor, so a real 403 records as a passing cell; direction 2: a helper that refuses) | | `dogfood/test/armed.ts:162` DISARMED refusal | 8074 | the bracketed tracker tag becomes `assertArmed():`, the same lead the empty-declaration refusal already uses; the rest of the sentence already said the assertions would pass without testing anything | card 8074 | | `expression-conformance.ledger.ts:144` `sharing-condition` summary | 1887 | "(ADR-0058 D3: compiled from the authored CEL, a faithful lowering rather than a divergent hand-written filter)" | card 1887 (the spec condition was never compiled; enforce or remove) and ADR-0058 D3 (the CEL condition compiles to `criteria_json`, a faithful lowering of the authored CEL) | | `expression-conformance.ledger.ts:293` `settings-visibility` enforcement | 7327 | "The spec DECLARES that same grammar (`SettingsVisibilityInputSchema`) rather than CEL, so it is refused at publish/parse too" | card 7327 (narrow the declaration to the grammar the save-time evaluator implements, measured 1 against 93) | | `expression-conformance.ledger.ts:303` `cel-action-param-option-visible` summary | 5016 | "(params[].options[].visibleWhen, the same per-option key a field's option list declares)" | card 5016, maintainer ruling B (reuse the field option vocabulary), landed as commit `f6609e6ae2`; `ui/action.zod.ts` records the per-key outcome (`visibleWhen` opened) | | `fixtures/attachments-fixture.ts:140` manifest | 2755 | "...exercising the non-admin attachment permission matrix: ..." | card 2755 item 2 (dogfood the non-admin attachment permission matrix) | | `fixtures/comments-fixture.ts:139` manifest | 4630 | "...exercising the record-level comment permission matrix: ..." | card 4630 (`sys_comment` gains record-level authorization, mirroring attachments) | | `fixtures/label-scope-fixture.ts:55` manifest | 3602 | "Deal → vendor lookup exercising the dimension-label read scope: a vendor the reader cannot read is shown by raw id, never by name." | card 3602's first residual (the per-record label read behind a grouped lookup carried no read scope); the fixture's own header | | `fixtures/rls-owner-fixture.ts:57` manifest | 1994 | "...exercising the cross-owner by-id-write invariant: a caller that cannot read a record must not be able to write it." | PR 1994 (a by-id write must pass the row-level write filter); stage 4's wording of the same invariant in `verify --rls` | | `fixtures/rls-owner-fixture.ts:105` permission-set label | 1994 | `RLS Fixture Member — owner-scoped reads only (no write policy: the by-id-write hole shape)` | PR 1994; the fixture header (owner policy on SELECT only, the hole class's authoring shape) | | `dogfood/test/showcase-security.ts:66` refusal | 5491 | "...the CLI wiring these fixtures model cannot be reproduced, and the platform baseline alone grants a member no object access" | card 5491, maintainer ruling of 2026-08-07 (the wildcard grant leaves `member_default`; the baseline is explicit-allow) | | `downstream-contract/src/stack.ts:19` manifest | 2035 | "Frozen third-party consumer gating spec backward compatibility: a spec change that needs this fixture edited to stay green is breaking." | landing commit `92647c13aa` (the downstream-consumer contract, frozen: a spec change that requires editing it is breaking), the work done under card 2035; the package README states the same contract | ### Citation only (the sentence already stated the decision) - `dogfood/test/build-shaped-artifact.ts:192`, `:225`, `:265` (6293, answers 404): the three refusals already say what a stand-in must do instead of `JSON.stringify` (fix the walk, never the assertion; a headless husk is what a plain stringify leaves; a function left in the artifact would be dropped without a sound). Read from landing commit `c39a911ae6` (fixtures get the real lowering, and the stand-in throws naming what went missing). - `dogfood/test/enterprise-organizations.ts:184` multi-org remedy (4719): the twin of the `verify` harness remedy that stage 4 rewrote citation-only. It already says the app's own declaration is what counts and a transitive reach is not enough. Card 4719 (option 2: the host declaration decides). - `expression-conformance.ledger.ts:293` (7310): "Fail-closed since" plus the card becomes "Fail-closed:"; the sentence goes on to say a predicate outside the grammar refuses the save. PR 7310. - `expression-conformance.ledger.ts:319` (objectui card 3067): "selection-bar bulk action per-record eligibility (bulkActionDefs[].visible)". This session has no read access to `objectstack-ai/objectui` (403) and the dispatch forbids attaching it, so the decision was read from this repository's record: `ui/bulk-action.zod.ts`'s `visible` describe (evaluated once per selected record; the button is offered when at least one passes) and the row's own enforcement cell, both unchanged. - `expression-conformance.ledger.ts:343`, `:350` (objectui card 2614): the two summaries already say "per-record visibility" and "per-record disabling" of the built-in row Edit/Delete. Read from this repository's landing commit `627f225f2c` (`userActions.edit/delete` accept per-record CEL predicates). - `fixtures/email-template-materialization-fixture.ts:59` (4509) and `fixtures/webhook-materialization-fixture.ts:55` (3461): each already says the stack entries materialize into the rows the runtime reads; `ADR-0054` stays. - `fixtures/flow-durable-suspend-fixture.ts:101` (4470): already says the flow suspends, persists and resumes after a cold boot. - `fixtures/flow-function-effect-fixture.ts:69` (4396): already says the declared effect reaches the run summary. - `fixtures/flow-runas-fixture.ts:125` (1888): already says `flow.runAs` identity is enforced. - `dogfood/test/search-conformance.ledger.ts:49` (4254): already says a name outside the set is a 400 at the REST ingress, not silently dropped. - `plugin-dev/src/dev-plugin-security-enforcement-warning.test.ts:121` `describe` title (10036, answers 404; the fold site from the dead-citation sweep, ACCEPT `5939681859`): the bracketed tag goes; the title already says the warning must fire when `SecurityPlugin.start()` bailed. Read from landing commit `7552e03375` (the warning probes the published `security` service in `start()`). ## Text only, proven on the AST A scratch script (not committed) parses each changed TypeScript file at BASE `a7d9768ecd` and at `75e33f4c45` (the stage commit; the later merge of `origin/main` touches none of these files), blanks every string value and template span, and compares the remaining node sequence (kinds, identifiers, numerals). Result: identical skeleton in all 17 files, equal node and string-value counts per file, and 28 changed string values, all prose: the 26 sites above plus two neighbouring literals of the `armed.ts:136-138` refusal, re-wrapped so the message keeps its four literals. ## The ledger `node scripts/check-doc-authoring.mjs --census-ledger`, written to a scratch file first so its no-growth check reads the committed baseline, then installed: | | occurrences | (file, id) pairs | files | |---|--:|--:|--:| | the 16 stage rows before | 26 | 21 | 16 | | the 16 stage rows after | 0 | 0 | 0 | | `authz-conformance.matrix.ts` (stage 5b) | 76 | 46 | 1 | | whole ledger before (`a7d9768ecd`) | 385 | 272 | 103 | | whole ledger after | 359 | 251 | 87 | 53 lines deleted, 0 added; every other row is byte-identical, the matrix row included. After merging `origin/main` (`ef96c9ede7`) the recomputed ledger is byte-identical to the committed one. `pnpm check:doc-authoring`: before "325 pinned site(s) across 103 file(s) ... no growth, no burn-down unrecorded", after "300 pinned site(s) across 87 file(s) ... no growth, no burn-down unrecorded". ## Pins No test asserts any of the old strings: every rewritten fragment and every cited number inside an assertion was searched across the repository, with no hit outside the sites themselves. The two existing pins that read rewritten messages, `armed.dogfood.test.ts` matching `this fixture is DISARMED` and `arming declaration is EMPTY`, still match, and pass. With nothing re-pointed there was no pin to ablate. The `merge-queue-triage` job-log fixtures under `scripts/fixtures/` quote the old `describe` title as recorded CI output; they are history and stay as they are. The run itself shows one rewritten string live: the multi-org skip line in the dogfood run now prints "...being reachable as somebody else's transitive dependency is not enough. Set OS_TEST_MULTI_ORG_ENABLED=1...". ## What ships Nothing. `@objectstack/dogfood` and `@objectstack/downstream-contract` are `private: true`. `@objectstack/plugin-dev` publishes `dist`, and its built `dist/` holds the new `describe` title 0 times; the control, the warning's own `NOT enforced` text, is found in `dist/index.js`. So no changeset, and the PR takes `skip-changeset`. The downstream-contract fixture is frozen against spec-driven edits (its README). This edit is prose in the manifest description, made for this ruling and not to make a spec change pass. ## Verification (head `3efe6499b8`, after merging `origin/main` `ef96c9ede7`) Heavy runs went through `scripts/pm/os-verify-lock.sh` (slot `issue-20752-s5a`); each verdict line reads `VERDICT command-exit 0`. - Build: `pnpm turbo run build` over the dependency closures of `@objectstack/dogfood`, `@objectstack/downstream-contract` and `@objectstack/plugin-dev`, 63/63 tasks, before and after the merge. - Tests, before and after the merge: `@objectstack/plugin-dev` 9 files / 86 tests passed (the renamed `describe` ran under the verbose reporter with its 4 tests green); `@objectstack/downstream-contract` 3 / 31 passed; `@objectstack/dogfood`, every test file that imports a changed module directly (46 files, run in two batches): 45 passed, 1 skipped (`rls-multitenant`, which needs the enterprise organizations package this repository does not ship), 388 tests passed, 3 skipped. The full dogfood suite is CI's `Dogfood Regression Gate`. - Typecheck: `@objectstack/dogfood` (`tsc --noEmit`; `--listFiles` shows all 15 changed dogfood files in its program), `@objectstack/downstream-contract`, and `@objectstack/plugin-dev` (`tsc --noEmit` plus `check:test-typecheck`, which compiles the test layer: OK). - Gates: `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` derived 67 commands; all 67 run with exit codes recorded; `--ran` reconciliation: "67 derived famil(ies) accounted for — 67 run, 0 NOT-MEASURED". `check:dual-build-cjs-loads` first answered PREREQUISITE NOT MET (exit 3, no dist for unrelated packages); after a full workspace build (72/72 tasks, 71 cached) it passed, and that rerun is the recorded result. - Lint: the full `pnpm lint` (`eslint . --no-inline-config`) at `3efe6499b8`: exit 0, no findings. ## Acceptance notes - `expression-conformance.ledger.ts:322` is a comment that says the bulk row "reached the ledger in" one card "not" another, both spelled bare. The second is objectui's card, and a bare number reads as this repository's. It is a comment, not on the ledger, so it is untouched here. Carrier: the dead-citation sweep. - `packages/qa/downstream-contract/package.json`'s `description` and its README still cite card 2035, and dogfood test titles and `it` names still carry tracker numbers. None of these is on the ledger or the claim. Carrier: the seat, when it stages what remains after 5b. - Code comments in the 17 files still cite these cards. They are not on the ledger, and the claim keeps them out of scope. --- _Generated by [Claude Code](https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4727fcb commit a23be74

18 files changed

Lines changed: 28 additions & 81 deletions

‎packages/plugins/plugin-dev/src/dev-plugin-security-enforcement-warning.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ async function boot(ctx: any, options: Record<string, unknown> = {}) {
118118
return plugin;
119119
}
120120

121-
describe('[#10036] the "nothing is enforced" warning must fire when SecurityPlugin.start() bailed', () => {
121+
describe('the "nothing is enforced" warning must fire when SecurityPlugin.start() bailed', () => {
122122
// ── The state the warning describes, constructed for real ───────────────
123123
//
124124
// SecurityPlugin registers `security.permissions` / `security.rls` /

‎packages/qa/dogfood/test/armed.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ export async function assertArmed(probes: readonly ArmingProbe[]): Promise<void>
133133
if (!Array.isArray(probes) || probes.length === 0) {
134134
throw new Error(
135135
'assertArmed(): the arming declaration is EMPTY, which asserts nothing. An empty ' +
136-
'declaration would certify every fixture that forgot to write one — the exact defect ' +
137-
'class this helper exists to close (#8074). Name at least one control, or do not call ' +
138-
'assertArmed at all and say in the fixture header why no precondition applies.',
136+
'declaration would certify every fixture that forgot to write one — the exact defect class this ' +
137+
'helper exists to close, a fixture that passes while the control it measures is not engaged. Name ' +
138+
'at least one control, or do not call assertArmed at all and say in the fixture header why no precondition applies.',
139139
);
140140
}
141141

@@ -159,7 +159,7 @@ export async function assertArmed(probes: readonly ArmingProbe[]): Promise<void>
159159

160160
if (disarmed.length > 0) {
161161
throw new Error(
162-
`[#8074] this fixture is DISARMED: ${disarmed.length} of ${probes.length} control(s) it ` +
162+
`assertArmed(): this fixture is DISARMED: ${disarmed.length} of ${probes.length} control(s) it ` +
163163
'measures are not engaged on the booted stack, so its assertions would pass without ' +
164164
'testing anything.\n\n' +
165165
`${disarmed.join('\n\n')}\n\n` +

‎packages/qa/dogfood/test/build-shaped-artifact.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ export function buildShapedArtifact(stack: Record<string, unknown>): BuildShaped
189189
`declares ${expected.length} (${expected.join(', ') || 'none'}). Either a callable was ` +
190190
`dropped, or \`lowerCallables\` grew a slot \`callableSlots\` in ` +
191191
`packages/qa/dogfood/test/build-shaped-artifact.ts does not know about — fix the walk, ` +
192-
`never the assertion (#6293).`,
192+
`never the assertion.`,
193193
);
194194
}
195195

@@ -222,7 +222,7 @@ export function buildShapedArtifact(stack: Record<string, unknown>): BuildShaped
222222
`without a sound — ${dropped.join(', ')}. An entry it does not recognise is deleted ` +
223223
`rather than handed to the schema, so the artifact would parse green carrying nothing ` +
224224
`where these were. Most likely the entry is a headless husk (an object with an effect ` +
225-
`and no handler), which is what a plain \`JSON.stringify\` of the stack leaves (#6293).`,
225+
`and no handler), which is what a plain \`JSON.stringify\` of the stack leaves.`,
226226
);
227227
}
228228
}
@@ -262,7 +262,7 @@ export function buildShapedArtifact(stack: Record<string, unknown>): BuildShaped
262262
if (leftover.length > 0) {
263263
throw new Error(
264264
`build-shaped artifact: ${leftover.length} value(s) are still functions after lowering and ` +
265-
`would be dropped by JSON.stringify without a sound: ${leftover.join(', ')} (#6293).`,
265+
`would be dropped by JSON.stringify without a sound: ${leftover.join(', ')}.`,
266266
);
267267
}
268268

‎packages/qa/dogfood/test/enterprise-organizations.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ export async function probeOrganizations(
181181
'problem — the package publishes no entry Node can load, and the importer\'s ' +
182182
'message below is the authority on what it has to publish'
183183
: `declare ${pkg} in ${root}'s own package.json and install it — being ` +
184-
'reachable as somebody else\'s transitive dependency is not enough (#4719)';
184+
'reachable as somebody else\'s transitive dependency is not enough';
185185
if (declared) {
186186
throw new Error(
187187
`${MULTI_ORG_ENV}=1 declares that ${pkg} (enterprise, ADR-0105 D12) is ` +

‎packages/qa/dogfood/test/expression-conformance.ledger.ts‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export const EXPRESSION_SURFACE: ExprSurface[] = [
141141
},
142142
{
143143
id: 'sharing-condition',
144-
summary: 'sharing-rule `condition` → criteria_json (ADR-0058 D3, closes #1887)',
144+
summary: 'sharing-rule `condition` → criteria_json (ADR-0058 D3: compiled from the authored CEL, a faithful lowering rather than a divergent hand-written filter)',
145145
dialect: 'cel', mode: 'compile', state: 'enforced', failPolicy: 'fail-closed',
146146
enforcement: 'plugin-sharing/bootstrap-declared-sharing-rules.ts celToFilter → compileCelToFilter; matched by sharing-rule-service findMatchingRecords',
147147
covers: ['security/sharing.zod.ts:CriteriaSharingRuleSchema.condition'],
@@ -290,7 +290,7 @@ export const EXPRESSION_SURFACE: ExprSurface[] = [
290290
// from the schema.
291291
dialect: 'settings-visibility', mode: 'interpret', state: 'enforced', failPolicy: 'fail-closed',
292292
enforcement:
293-
'service-settings `evaluateVisibility` (visibility-eval.ts), called from `SettingsService.validatePatch` — a closed grammar: single root `data`, one-level member access, `|| && !`, `=== !== == != >= <= > <`, parens, and string/number/bool/null literals, optionally `${…}`-wrapped, as a bare string or a `{dialect, source}` envelope. Fail-closed since #7310: a predicate outside the grammar REFUSES the save (SettingsValidationError, HTTP 400) instead of skipping the specifier — `visible` gates every other check on the key (`required`, `options`, `pattern`, `valueDomain`, the value window), so skipping it switched all of them off at once. The console evaluates the same string client-side through `new Function(...)`. Since #7327 the spec DECLARES that same grammar (`SettingsVisibilityInputSchema`), so it is refused at publish/parse too',
293+
'service-settings `evaluateVisibility` (visibility-eval.ts), called from `SettingsService.validatePatch` — a closed grammar: single root `data`, one-level member access, `|| && !`, `=== !== == != >= <= > <`, parens, and string/number/bool/null literals, optionally `${…}`-wrapped, as a bare string or a `{dialect, source}` envelope. Fail-closed: a predicate outside the grammar REFUSES the save (SettingsValidationError, HTTP 400) instead of skipping the specifier — `visible` gates every other check on the key (`required`, `options`, `pattern`, `valueDomain`, the value window), so skipping it switched all of them off at once. The console evaluates the same string client-side through `new Function(...)`. The spec DECLARES that same grammar (`SettingsVisibilityInputSchema`) rather than CEL, so it is refused at publish/parse too',
294294
covers: ['system/settings-manifest.zod.ts:SpecifierSchema.visible', 'system/settings-manifest.zod.ts:SettingsManifestSchema.visible'],
295295
// Proof is the producer/consumer pin rather than a runtime fixture: the
296296
// failure mode this surface actually has is the two sides disagreeing about
@@ -300,7 +300,7 @@ export const EXPRESSION_SURFACE: ExprSurface[] = [
300300
},
301301
{
302302
id: 'cel-action-param-option-visible',
303-
summary: "action param option-list per-option gating (params[].options[].visibleWhen, #5016)",
303+
summary: "action param option-list per-option gating (params[].options[].visibleWhen, the same per-option key a field's option list declares)",
304304
// Same key, same evaluator and same binding environment as the per-option
305305
// `visibleWhen` on a FIELD's option list — which is why it is `cel`,
306306
// `interpret` and `fail-soft-log` like `cel-field-rule` rather than
@@ -316,7 +316,7 @@ export const EXPRESSION_SURFACE: ExprSurface[] = [
316316
},
317317
{
318318
id: 'cel-bulk-action-visible',
319-
summary: "selection-bar bulk action per-record eligibility (bulkActionDefs[].visible, objectui#3067)",
319+
summary: "selection-bar bulk action per-record eligibility (bulkActionDefs[].visible)",
320320
dialect: 'cel', mode: 'interpret', state: 'enforced', failPolicy: 'fail-closed',
321321
enforcement: 'console (objectui) partitionBulkRows (plugin-grid/bulkEligibility.ts) → evalRowPredicate → @objectstack/formula celEngine (interpret), evaluated ONCE PER SELECTED RECORD with that record bound: the button is offered when at least one selected record passes, and the run covers only those — the rest are reported as skipped in the dialog. Faults hide the record (fallback:false, warnOnError) rather than acting on one the predicate was written to exclude; UI gating only, write enforcement stays with permissions/hooks',
322322
// Reached the ledger in #4457, not #3067: the key existed and was evaluated
@@ -340,14 +340,14 @@ export const EXPRESSION_SURFACE: ExprSurface[] = [
340340
},
341341
{
342342
id: 'cel-row-crud-visible',
343-
summary: 'built-in row Edit/Delete per-record visibility (RowCrudActionOverride.visibleWhen, objectui#2614)',
343+
summary: 'built-in row Edit/Delete per-record visibility (RowCrudActionOverride.visibleWhen)',
344344
dialect: 'cel', mode: 'interpret', state: 'enforced', failPolicy: 'fail-closed',
345345
enforcement: 'console (objectui) RowActionMenu BuiltinRowActionItem + data-table DataTableBuiltinRowActionItem → useRowPredicate → @objectstack/formula celEngine (interpret); FALSE/fault hides the row button (UI gating only — write enforcement stays with permissions/hooks)',
346346
covers: ['data/object.zod.ts:RowCrudActionOverrideSchema.visibleWhen'],
347347
},
348348
{
349349
id: 'cel-row-crud-disabled',
350-
summary: 'built-in row Edit/Delete per-record disabling (userActions.{edit,delete}.disabledWhen, objectui#2614)',
350+
summary: 'built-in row Edit/Delete per-record disabling (userActions.{edit,delete}.disabledWhen)',
351351
dialect: 'cel', mode: 'interpret', state: 'enforced', failPolicy: 'fail-soft-log',
352352
enforcement: 'console (objectui) RowActionMenu BuiltinRowActionItem + data-table DataTableBuiltinRowActionItem → useRowPredicate → @objectstack/formula celEngine (interpret); TRUE renders the button disabled, a fault leaves it enabled (server hooks are the real boundary)',
353353
covers: ['data/object.zod.ts:RowCrudActionOverrideSchema.disabledWhen'],

‎packages/qa/dogfood/test/fixtures/attachments-fixture.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export const attachmentsFixtureStack = defineStack({
137137
type: 'app',
138138
name: 'Attachments Permission Matrix Fixture',
139139
description:
140-
'Three-object app exercising the #2755 attachment permission matrix: parent visibility, uploader/editor delete, enable.files gate.',
140+
'Three-object app exercising the non-admin attachment permission matrix: parent visibility, uploader/editor delete, enable.files gate.',
141141
},
142142
objects: [AttCase, AttSecret, AttNoFiles, AttReadonly],
143143
});

‎packages/qa/dogfood/test/fixtures/comments-fixture.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export const commentsFixtureStack = defineStack({
136136
type: 'app',
137137
name: 'Comments Permission Matrix Fixture',
138138
description:
139-
'Four-object app exercising the #4630 comment permission matrix: thread visibility, author/parent-editor writes, the enable.feeds gate.',
139+
'Four-object app exercising the record-level comment permission matrix: thread visibility, author/parent-editor writes, the enable.feeds gate.',
140140
},
141141
objects: [CmtOpen, CmtPrivate, CmtReadonly, CmtNoFeeds],
142142
});

‎packages/qa/dogfood/test/fixtures/email-template-materialization-fixture.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export const emailTemplateFixtureStack = defineStack({
5656
version: '0.0.0',
5757
type: 'app',
5858
name: 'Email Template Materialization Fixture',
59-
description: 'Single-object app that authors one email template to prove stack `emailTemplates:` entries materialize into the sys_email_template rows sendTemplate reads (ADR-0054, #4509).',
59+
description: 'Single-object app that authors one email template to prove stack `emailTemplates:` entries materialize into the sys_email_template rows sendTemplate reads (ADR-0054).',
6060
},
6161
objects: [EtNote],
6262
emailTemplates: [etPasswordReset],

‎packages/qa/dogfood/test/fixtures/flow-durable-suspend-fixture.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export const durableSuspendStack = defineStack({
9898
version: '0.0.0',
9999
type: 'app',
100100
name: 'Durable Suspend Fixture',
101-
description: 'Single-object app whose screen flow suspends, persists, and resumes after a cold boot (#4470).',
101+
description: 'Single-object app whose screen flow suspends, persists, and resumes after a cold boot.',
102102
},
103103
objects: [SuspendNote],
104104
flows: [flowDurableSuspend],

‎packages/qa/dogfood/test/fixtures/flow-function-effect-fixture.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export const flowFunctionEffectStack = defineStack({
6666
version: '0.0.0',
6767
type: 'app',
6868
name: 'Flow Function Effect Fixture',
69-
description: "Proves a flow function's declared effect reaches the run summary (#4396).",
69+
description: "Proves a flow function's declared effect reaches the run summary.",
7070
},
7171
objects: [FxInvoice],
7272
flows: [sweepFlow('fxn_pure_sweep', 'scoreInvoices'), sweepFlow('fxn_writing_sweep', 'syncBilling')],

0 commit comments

Comments
 (0)