Skip to content

Commit 2e8a708

Browse files
claude[bot]claude
andauthored
chore(devx): migrate the scripts/** line citations that name no tracked file to file-level anchors (#15809) (#16301)
* feat(devx): the scripts/** corpus enumerates the citations it declines, not just their count `judgeUntrackedLineAnchors: false` waives a citation that names no tracked file, and until now the only trace was a number on the green line. A number says a residual exists without saying where: it cannot be worked down, and a residual that MOVED reads exactly like one that shrank. `sweepCorpus` now returns `declined` beside `findings` and `counts` — one row per waived citation, carrying the file, the line, the citation text and a shape (`bare-filename` / `directory-qualified` / `continuation` / `tilde`). `declinedShape` classifies by how the citation was WRITTEN, never by the path it borrowed: a continuation and a tilde form inherit whatever path preceded them on the line, so classifying by path first would file them under a file their author never wrote. `check-scripts-symbol-anchors.mjs --list-unresolvable` prints those rows and a tally by shape. It is a listing, never a verdict — it exits 0 whatever it prints, exactly as `--list` does, and `runCheck()` remains the only failing arm. Pinned: three cases hold the enumeration equal to the counter, to the file/line/text a residual list needs, and to the shape classification (floor 26 → 29); four more hold each arm of `declinedShape` (floor 63 → 67). Part of #15809. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8 * chore(devx): migrate the scripts/** line citations in the four heaviest carriers `check-durability-degradation-log-level` (23), `symbol-anchors` (15), `doc-line-anchors` (11) and `pr-labels` (8) carried more than half the citations that name no tracked file, and each shape gets the repair its own kind admits: - DATED CENSUS ROWS name the file as a file-level anchor and keep the number beside it as data, losing no digit — the `#15806` method. The durability gate's two seam tables gain a `try line` column of their own, and `objectql engine.ts` / `metadata-protocol protocol.ts` become the full tracked paths the gate's own output actually prints. One of them binds tighter still: `packages/objectql/src/engine.ts#cascadeDeleteRelations` is now a resolved symbol anchor. - ILLUSTRATIONS take the angle-bracket placeholder spelling `ANCHOR_GRAMMAR` already uses. `symbol-anchors.mjs` and `doc-line-anchors.mjs` are the two files that DEFINE what a line citation looks like, so every example in them was a citation of its own; they now exhibit the shape without writing one, and say why in a ⚠️ line so a later author does not "fix" it back. - THIRD-PARTY SOURCES (`codelytv/pr-size-labeler`, `actions/labeler`) name the repo, the file and the pinned line as prose. No in-repo resolver could ever check them, and a pinned upstream line is provenance rather than a pointer. ⛔ No number is repaired or repointed anywhere in this commit: every digit that was in an anchor is still on the page, as data. Corpus reading: 96 → 39 unresolvable citations. Part of #15809. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8 * chore(devx): migrate the remaining free line citations and record the residual The rest of the population #15809 measured, one repair per shape: - TRACKED TARGETS the surrounding prose already names become file-level anchors, and where the prose names the symbol too they become symbol anchors the gate now resolves — `packages/objectql/src/plugin.ts#runGovernanceInventory`, `packages/plugins/plugin-audit/src/audit-writers.ts#resolveWriteLocale`, `scripts/check-system-context-census.mjs#UNENFORCED_TEXT_COUNTS`. A bare `engine.ts` was never ambiguous where the prose said which package. - THIRD-PARTY AND DEPENDENCY SOURCES (`@oclif/core`, `@changesets/pre`) name the package, the file and the pinned line as prose. Nothing in this tree can resolve them, and a pinned upstream line is provenance, not a pointer. - ILLUSTRATIONS take the angle-bracket placeholder spelling. ⛔ Again, no number is repaired or repointed: every digit is still on its page. The residual is 15 citations across six files, and every one of them is a file another lane holds OPEN — three by PR #16215, one by PR #16202, three by the in-flight #15776, one by #12511. NOT ONE is a genuinely ambiguous abbreviation. ⚠️ `judgeUntrackedLineAnchors` therefore stays `false`. The fence this work was dispatched under flips it only when the residual is ZERO and a self-test pins the flip; flipping it over 15 citations in files this PR may not touch would make the gate permanently red for the length of somebody else's pull request — the exact shape the card argued against. `--list-unresolvable` now prints that residual, so the next author inherits a worklist rather than a count. Part of #15809. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8 * docs(devx): the corpus header states its residual as a dated reading `--list-unresolvable` is the live instrument; a count written in prose is a dated record, and this file is the one arguing that a number in prose outlives the measurement it quoted. Part of #15809. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8 --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6c546ab commit 2e8a708

22 files changed

Lines changed: 275 additions & 124 deletions

scripts/audits/14096-tenancy-ledger-namespace-regexp-census.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ const REPO_ROOT = resolve(HERE, '../..');
9494
// ---------------------------------------------------------------------------
9595
// §1. Discover every registered platform-namespace object by AST-lite census
9696
// of `ObjectSchema.create(` calls — the same method the ledger's own
97-
// header (`platform-object-tenancy.ts:32-37`) documents using.
97+
// header (`packages/objectql/src/tenancy/platform-object-tenancy.ts`, its
98+
// opening comment — lines 32-37 as measured) documents using.
9899
// ---------------------------------------------------------------------------
99100

100101
/** Blank out `//` and `/* *\/` comments and string contents (chars only,

scripts/audits/14423-unbound-declarations-before-count.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ const loadStandaloneActions = async () => [...namelessStandaloneOrphans, namedSt
5959

6060
const { warnings, logger } = silentLogger();
6161

62-
// Exactly as ObjectQLPlugin.runGovernanceInventory calls it (plugin.ts:2516),
62+
// Exactly as ObjectQLPlugin.runGovernanceInventory calls it
63+
// (`packages/objectql/src/plugin.ts#runGovernanceInventory`),
6364
// with an empty registered-handler set and no object-embedded actions/registry
6465
// rung, so the ENTIRE declaration set comes from `loadStandaloneActions`.
6566
await runActionGovernanceInventory({

scripts/check-adr-links.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
// checked by nothing, and records link each other heavily: most carry a
1212
// `**Builds on**:` line with 3-10 relative links in it.
1313
//
14-
// That is not a theoretical hole. `0057-erp-authorization-core-business-units-
15-
// and-scope-depth.md:5` pointed at `./0010-metadata-protection.md`, a file that
14+
// That is not a theoretical hole.
15+
// `docs/adr/0057-erp-authorization-core-business-units-and-scope-depth.md`
16+
// (line 5 as measured) pointed at `./0010-metadata-protection.md`, a file that
1617
// has never existed (the record is `0010-metadata-protection-model.md`). It sat
1718
// there long enough that a triage comment inherited the wrong attribution and
1819
// repeated it. PD #13 sends the next author to "go read that decision"; a dead

scripts/check-changeset-no-major.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,8 @@ export function render(result) {
687687
// nothing final ships until `changeset pre exit`. Surface the introduced
688688
// majors for the RC curator, but do not fail. The guard re-arms once
689689
// pre-mode exits: `changeset pre exit` rewrites pre.json's mode to `"exit"`
690-
// (@changesets/pre@2.0.2, changesets-pre.cjs.js:117), which is not `pre`.
690+
// (@changesets/pre@2.0.2, its `changesets-pre.cjs.js` bundle, line 117 as
691+
// pinned — a dependency file, outside this tree), which is not `pre`.
691692
case 'exempt':
692693
stdout.push(
693694
`✓ Changesets is in pre-release mode (tag: ${result.tag}) — ` +

scripts/check-cli-test-child-env.mjs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,8 @@
185185
* suite stays green, and the comment claiming the built entry stays plausible.
186186
*
187187
* `@oclif/core@4.13.3` skips its TypeScript path lookup only when `isProd()`,
188-
* which `lib/util/util.js:66` defines as a NEGATED membership test -- a leading
188+
* which its `lib/util/util.js` (line 66 as pinned -- a dependency file, outside
189+
* this tree) defines as a NEGATED membership test -- a leading
189190
* logical-NOT over `['development', 'test'].includes(process.env.NODE_ENV ?? '')`.
190191
* Measured directly against `Config.load()` on `packages/cli`, with
191192
* `packages/cli/dist` present, reading back the root plugin's `commandsDir`:
@@ -1056,7 +1057,8 @@ const BUILT_ENTRYPOINT = 'bin/run.js';
10561057
* The `NODE_ENV` values that send `@oclif/core`'s command lookup to `src/`.
10571058
*
10581059
* `@oclif/core@4.13.3` skips its TypeScript path lookup only when `isProd()`,
1059-
* which `lib/util/util.js:66` defines as a NEGATED membership test:
1060+
* which its `lib/util/util.js` (line 66 as pinned -- a dependency file, outside
1061+
* this tree) defines as a NEGATED membership test:
10601062
* `!['development', 'test'].includes(process.env.NODE_ENV ?? '')`. So these two
10611063
* values -- and only these two -- turn the reroute ON. `production` and unset
10621064
* both leave it off, which is why the rule below refuses a SET of values rather

scripts/check-console-injection.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@
9999
* esbuild re-emits `"…definition's…"`. Same characters, different bytes, so a
100100
* literal substring search over source text misses it.
101101
* - 19/44 constant-folded concatenation. Source splits a long description as
102-
* `'… declares ' + '`_packageId`.'` (api/protocol.zod.ts:341-342 is one);
102+
* `'… declares ' + '`_packageId`.'` (`packages/spec/src/api/protocol.zod.ts`
103+
* is one, lines 341-342 as measured);
103104
* the bundler folds it to one literal that exists in no source file.
104105
*
105106
* A missed probe here reads as "not expired" — a SILENT PASS, the same failure

scripts/check-dispatcher-error-vocabulary.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,7 @@ export const OBJECT_LITERAL_CODE_HELPER_BLINDNESS = Object.freeze({
925925
* for the D6 field-addressed validation catalog in `domains/automation.ts`, and
926926
* [#14626]'s two newly reached positions in that same file owe NO further rows:
927927
* they are the identical catalog ternary with the identical values, so they
928-
* derive the site keys the `:1125` instance already derives.
928+
* derive the site keys the instance at line 1125 of that file already derives.
929929
*
930930
* ## [#14742] What moved this census, separated from what merely drifted
931931
*
@@ -1196,7 +1196,8 @@ export const INLINE_LITERAL_EXPRESSION_CENSUS = Object.freeze({
11961196
}),
11971197
// [#14626] The two the card predicted, recovered by the template-literal
11981198
// mode. Same file, same genre, same two values — so they derive the site
1199-
// keys `:1125` already derives and owe NO further verdict rows. That is the
1199+
// keys the instance at line 1125 of that file already derives, and owe NO
1200+
// further verdict rows. That is the
12001201
// measurement, not a convenience: `rowsOwed: 0` here is what says the
12011202
// recovered positions surfaced nothing unregistered.
12021203
Object.freeze({

scripts/check-doc-anchors.mjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
// heading lives in one file, the link in another, and until this script nothing
1717
// in CI related them: a rename that updates the heading and not the inbound
1818
// `#anchor` shipped green. #7465 exists because exactly that pairing had already
19-
// drifted once — `cli.mdx:458` pointed at a heading whose text had been correct
19+
// drifted once — `content/docs/deployment/cli.mdx` (line 458 as measured then)
20+
// pointed at a heading whose text had been correct
2021
// in 2024 — and PR #7483 could only catch its own rename by hand, with a slug
2122
// computed in a REPL and a repo-wide grep. Neither runs on anyone else's PR.
2223
//

scripts/check-durability-degradation-log-level.mjs

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -768,8 +768,10 @@ const FAILURE_PROPAGATION_SITES = new Map([
768768
// that fix — `67 read seam(s) … (7 … discriminated) (1 pass … through) (1
769769
// baselined)` on both trees, measured by ablating the fix back to its
770770
// pre-#8895 `catch { continue }` and re-running. And the seam is not merely
771-
// unseen: plant a `return []` in that same catch and the gate names it
772-
// (`engine.ts:10084 (in cascadeDeleteRelations())`, red). So it sits IN the
771+
// unseen: plant a `return []` in that same catch and the gate names it — red,
772+
// at `packages/objectql/src/engine.ts#cascadeDeleteRelations` (that catch was
773+
// on line 10084 when this was measured, a dated reading and not a pointer).
774+
// So it sits IN the
773775
// census throughout, reported clean while it was broken and reported clean now
774776
// that it is fixed — what decides visibility is the SHAPE of the exit, never
775777
// whether the seam is correct. A real fail-open on an integrity guard was
@@ -1176,24 +1178,28 @@ const FAILURE_PROPAGATION_SITES = new Map([
11761178
// THE DISCRIMINATING RUN. Raising `MAX_READ_WRAPPER_DEPTH` from 2 to 6 while
11771179
// leaving `walkSameTickInclusive` in place admits 5 of the same 8 (70 seams: +8
11781180
// / -2, where the 2 are the SAME try lines re-attributed to a different
1179-
// first-matching callee, engine.ts:9407 and :10572). Saturation checked at
1181+
// first-matching callee, both in `packages/objectql/src/engine.ts`, on lines
1182+
// 9407 and 10572 as measured). Saturation checked at
11801183
// depth 50: 70 and 75, i.e. unchanged. So for those 5 the miss is the DEPTH
11811184
// BOUND, not the callback boundary — `walkAll` merely masks the bound by
11821185
// descending lexically through nested DECLARATIONS instead of counting call
11831186
// hops, which reaches the read at depth 1 no matter how many awaits are between.
11841187
//
1185-
// THE 8 DELTA SEAMS, each read at its call site:
1186-
//
1187-
// | # | seam (try line → wrapper) | why today misses it | invoked now? |
1188-
// |--:|----------------------------------------------------------------|---------------------|--------------|
1189-
// | 1 | metadata-protocol protocol.ts:10243 getMetaItemCached→getMetaItem | depth bound | yes — real |
1190-
// | 2 | metadata-protocol protocol.ts:13559 saveMetaItem→getMetaItem | depth bound | yes — real |
1191-
// | 3 | metadata-protocol protocol.ts:14535 migrateStoredMetadata→saveMetaItem | depth bound | yes — real |
1192-
// | 4 | metadata-protocol protocol.ts:17213 duplicatePackage→saveMetaItem | depth bound | yes — real |
1193-
// | 5 | metadata-protocol sys-metadata-repository.ts:883 promoteDraft→dropPromotedDraftRow | CALLBACK | yes — real |
1194-
// | 6 | metadata-protocol sys-metadata-repository.ts:1353 close→terminate | CALLBACK | NO — FAKE |
1195-
// | 7 | objectql engine.ts:9237 insert→applyAutonumbers | CALLBACK | yes — real |
1196-
// | 8 | objectql lifecycle-service.ts:625 sweep→reapObject | depth bound | yes — real |
1188+
// THE 8 DELTA SEAMS, each read at its call site. ⚠️ The FILE is named as an
1189+
// anchor and the try line sits beside it as DATA: each number is a reading
1190+
// taken on the date above, not a pointer, and a `file:NNN` pointer written
1191+
// here rots silently — the whole finding of #15765.
1192+
//
1193+
// | # | file | try line | seam (wrapper) | why today misses it | invoked now? |
1194+
// |--:|-------------------------------------------------------|---------:|------------------------------------|---------------------|--------------|
1195+
// | 1 | `packages/metadata-protocol/src/protocol.ts` | 10243 | getMetaItemCached→getMetaItem | depth bound | yes — real |
1196+
// | 2 | `packages/metadata-protocol/src/protocol.ts` | 13559 | saveMetaItem→getMetaItem | depth bound | yes — real |
1197+
// | 3 | `packages/metadata-protocol/src/protocol.ts` | 14535 | migrateStoredMetadata→saveMetaItem | depth bound | yes — real |
1198+
// | 4 | `packages/metadata-protocol/src/protocol.ts` | 17213 | duplicatePackage→saveMetaItem | depth bound | yes — real |
1199+
// | 5 | `packages/metadata-protocol/src/sys-metadata-repository.ts` | 883 | promoteDraft→dropPromotedDraftRow | CALLBACK | yes — real |
1200+
// | 6 | `packages/metadata-protocol/src/sys-metadata-repository.ts` | 1353 | close→terminate | CALLBACK | NO — FAKE |
1201+
// | 7 | `packages/objectql/src/engine.ts` | 9237 | insert→applyAutonumbers | CALLBACK | yes — real |
1202+
// | 8 | `packages/objectql/src/lifecycle/lifecycle-service.ts` | 625 | sweep→reapObject | depth bound | yes — real |
11971203
//
11981204
// All 8 were decidable from the call site; none needed provenance. Seams 1-5,
11991205
// 7 and 8 are genuine members the census does not count: every hop is an
@@ -1205,7 +1211,8 @@ const FAILURE_PROPAGATION_SITES = new Map([
12051211
//
12061212
// ⚠️ SEAM 6 IS A FAKE SEAM, AND IT IS THE REASON `walkAll` IS NOT THE FIX.
12071213
// `close()`'s try calls `w.terminate()`. `terminate` resolves BY NAME to the
1208-
// local const arrow at sys-metadata-repository.ts:1246 — a synchronous, void,
1214+
// local const arrow in `packages/metadata-protocol/src/sys-metadata-repository.ts`
1215+
// (line 1246 as measured) — a synchronous, void,
12091216
// in-memory routine whose only call is `self.watchers.delete(subscription)` on
12101217
// `private readonly watchers = new Set<...>()`. `calleeName` reads that as
12111218
// `delete`, and the wrapper recursion resolves `delete` to THIS FILE'S
@@ -1254,8 +1261,10 @@ const FAILURE_PROPAGATION_SITES = new Map([
12541261
// | probe, with the `delete` wrapper hop refused | 72 |
12551262
//
12561263
// ⚠️ THE ABLATION IS THE CONTROL, NOT THE FIX. Refusing the `delete` hop
1257-
// outright drops TWO seams — sys-metadata-repository.ts:1353 `close`->
1258-
// `terminate` (the FAKE) and :883 `promoteDraft`->`dropPromotedDraftRow` (a
1264+
// outright drops TWO seams, both in
1265+
// `packages/metadata-protocol/src/sys-metadata-repository.ts` — `close`->
1266+
// `terminate` (the FAKE, line 1353 as measured) and
1267+
// `promoteDraft`->`dropPromotedDraftRow` (line 883, a
12591268
// REAL `await this.delete(ref, …)`). In a summary that is indistinguishable
12601269
// from the correct outcome, which is why the pair is pinned in the self-test.
12611270
//
@@ -1338,7 +1347,8 @@ const FAILURE_PROPAGATION_SITES = new Map([
13381347
// - THE ADMITTING STEP IS +6 / -0, not "+8 / -2". The 2 in the filing were
13391348
// two `try` lines re-attributed to a different first-matching callee, never
13401349
// seams leaving the population. That re-attribution still happens here —
1341-
// `engine.ts:9741` and `:10906` move from `resolveMasterDetailParent(s)` to
1350+
// two try lines in `packages/objectql/src/engine.ts` (9741 and 10906 as
1351+
// measured) move from `resolveMasterDetailParent(s)` to
13421352
// `mediaValueShapeStrictFor` — but at depth 4, one level ABOVE the level
13431353
// that admits anything, and it moves no count. The admitting step is clean.
13441354
//
@@ -1347,14 +1357,16 @@ const FAILURE_PROPAGATION_SITES = new Map([
13471357
// rule's vocabulary names. Chains as the recognizer actually resolves them —
13481358
// two of them are NOT the tails the filing predicted:
13491359
//
1350-
// | # | seam (try line -> first wrapper) | chain to the read |
1351-
// |--:|-----------------------------------------------------|-------------------|
1352-
// | 1 | metadata-protocol protocol.ts:10497 getMetaItemCached | getMetaItem -> findDraft -> lookup -> engine.findOne |
1353-
// | 2 | metadata-protocol protocol.ts:13874 saveMetaItem | getMetaItem -> findDraft -> lookup -> engine.findOne |
1354-
// | 3 | metadata-protocol protocol.ts:14850 migrateStoredMetadata | saveMetaItem -> refuseUnmintableMetaType -> metaTypeNamespaceExists -> engine.findOne |
1355-
// | 4 | metadata-protocol protocol.ts:16502 publishPackageDrafts | promoteDraftForPublish -> lockWriteRefusal -> getEffectiveLock -> engine.findOne |
1356-
// | 5 | metadata-protocol protocol.ts:17565 duplicatePackage | saveMetaItem -> refuseUnmintableMetaType -> metaTypeNamespaceExists -> engine.findOne |
1357-
// | 6 | objectql lifecycle-service.ts:664 sweep | reapObject -> archiveObject -> archivePass -> hot.find |
1360+
// (the FILE is the anchor, the try line beside it is a dated reading)
1361+
//
1362+
// | # | file | try line | first wrapper | chain to the read |
1363+
// |--:|-------------------------------------------------------|---------:|-----------------------|-------------------|
1364+
// | 1 | `packages/metadata-protocol/src/protocol.ts` | 10497 | getMetaItemCached | getMetaItem -> findDraft -> lookup -> engine.findOne |
1365+
// | 2 | `packages/metadata-protocol/src/protocol.ts` | 13874 | saveMetaItem | getMetaItem -> findDraft -> lookup -> engine.findOne |
1366+
// | 3 | `packages/metadata-protocol/src/protocol.ts` | 14850 | migrateStoredMetadata | saveMetaItem -> refuseUnmintableMetaType -> metaTypeNamespaceExists -> engine.findOne |
1367+
// | 4 | `packages/metadata-protocol/src/protocol.ts` | 16502 | publishPackageDrafts | promoteDraftForPublish -> lockWriteRefusal -> getEffectiveLock -> engine.findOne |
1368+
// | 5 | `packages/metadata-protocol/src/protocol.ts` | 17565 | duplicatePackage | saveMetaItem -> refuseUnmintableMetaType -> metaTypeNamespaceExists -> engine.findOne |
1369+
// | 6 | `packages/objectql/src/lifecycle/lifecycle-service.ts` | 664 | sweep | reapObject -> archiveObject -> archivePass -> hot.find |
13581370
//
13591371
// (3 and 5 reach a read through `saveMetaItem`'s OWN precondition check, not
13601372
// through the `getMetaItem` tail the filing assigned them. Same verdict, and
@@ -1378,8 +1390,9 @@ const FAILURE_PROPAGATION_SITES = new Map([
13781390
// walkAll @ depth 2 admits 7 (was 8 — #12358's guard deleted the fake seam)
13791391
// depth 3 admits 6
13801392
// BOTH 5 <- the claim, reproduced exactly
1381-
// depth only 1 protocol.ts:16502 publishPackageDrafts
1382-
// walkAll only 2 sys-metadata-repository.ts:883, engine.ts:9571
1393+
// depth only 1 `packages/metadata-protocol/src/protocol.ts`, line 16502
1394+
// walkAll only 2 `packages/metadata-protocol/src/sys-metadata-repository.ts`, line 883
1395+
// and `packages/objectql/src/engine.ts`, line 9571
13831396
//
13841397
// So the NUMBER 5 survives and its DENOMINATOR does not: read it as "5 of 7",
13851398
// the eighth having been the fake seam #12358 removed. And one correction the

scripts/check-engine-double-contract.mjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,9 @@
101101
// NO on #7620 for these doubles specifically. So it asks each independent
102102
// double a behavioural question instead of handing it an implementation.
103103
// - a scoped repository that declares NO repository-only member. Measured on
104-
// the corpus this landed against: `packages/runtime/src/action-body-identity
105-
// .test.ts:71` is a real scoped facade (`createContext().object(name)`)
104+
// the corpus this landed against:
105+
// `packages/runtime/src/action-body-identity.test.ts` (line 71 as measured)
106+
// is a real scoped facade (`createContext().object(name)`)
106107
// spelling only `find`/`count`/`insert`/`update`/`delete`, and it stays in
107108
// the ledger. Seeing it would mean reading its parameter NAMES, and `o` is
108109
// ambiguous in exactly this repo: `o: string` is the object name in twelve

0 commit comments

Comments
 (0)