From fda07022461ad742e5b8814bd81dbbc92972bc15 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 30 Sep 2026 13:35:48 +0000 Subject: [PATCH] docs(cli): re-anchor the dead tracker citations in packages/cli's files outside src to the commits that decided them Stage 14 of the domain:cli lane's dead-citation sweep: comment prose in packages/cli's test/**, vitest.config.ts and tsconfig.test.json. Every comment site that cited a tracker number answering 404 now cites, in ruling C+D's form C, the commit in this repository's history that decided what the line describes. 154 sites on 149 lines in 56 files, 51 numbers, 50 distinct commits; one companion line moves a stale present tense into the past (generate-skill.e2e.test.ts:35). Five sites have no deciding commit and are left as they were (#10149, #11048, #14874 x3). Comments only: 150 lines out, 150 in, every file keeps its line count. Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB Co-authored-by: Claude --- .../cli/test/artifact-pinned-boot.e2e.test.ts | 2 +- .../build-json-advisory-parity.e2e.test.ts | 4 +-- ...build-json-failure-conversions.e2e.test.ts | 4 +-- .../build-warning-truncation-notice.test.ts | 2 +- packages/cli/test/commands.test.ts | 4 +-- .../test/create-plugin-docs-parity.test.ts | 4 +-- packages/cli/test/create.test.ts | 8 +++--- .../test/docs-cli-enumeration-parity.test.ts | 4 +-- packages/cli/test/extract-hook-body.test.ts | 4 +-- .../test/fixtures/option-b-reader-probe.ts | 2 +- .../published-entry-stderr-error-probe.mjs | 2 +- .../test/fixtures/unbuilt-spec-dist.hook.mjs | 2 +- .../test/generate-agent-retired.e2e.test.ts | 4 +-- ...generate-file-name-registry-parity.test.ts | 2 +- .../test/generate-scaffold-validates.test.ts | 4 +-- .../test/generate-schema-retired.e2e.test.ts | 2 +- packages/cli/test/generate-skill.e2e.test.ts | 18 ++++++------ packages/cli/test/helpers/serve-process.ts | 6 ++-- .../test/hook-body-build-reach.e2e.test.ts | 10 +++---- .../test/i18n-extract-source-hashes.test.ts | 2 +- .../i18n-inline-locale-map-coverage.test.ts | 2 +- .../init-created-files-summary.e2e.test.ts | 6 ++-- ...scaffold-file-name-registry-parity.test.ts | 6 ++-- ...t-template-comments-self-contained.test.ts | 20 ++++++------- packages/cli/test/init.test.ts | 2 +- .../cli/test/json-stdout-purity.e2e.test.ts | 2 +- .../test/lint-conversion-notices.e2e.test.ts | 10 +++---- .../cli/test/migrate-exit-code.e2e.test.ts | 6 ++-- .../package-publish-error-envelope.test.ts | 2 +- .../test/platform-page-i18n-parity.test.ts | 10 +++---- .../print-metadata-stats-zero-row.test.ts | 18 ++++++------ ...lished-entry-stderr-error-listener.test.ts | 6 ++-- .../published-subpath-hook-body.pin.test.ts | 2 +- .../run-dev-unbuilt-workspace.e2e.test.ts | 6 ++-- .../test/scaffold-ci-script-parity.test.ts | 4 +-- .../scaffold-workspace-consistency.test.ts | 8 +++--- ...e-app-anchored-optional-import.e2e.test.ts | 4 +-- .../serve-bound-port-publish-order.test.ts | 2 +- .../test/serve-host-fallback-base.e2e.test.ts | 8 +++--- ...serve-mcp-capability-collision.e2e.test.ts | 4 +-- .../test/serve-mcp-stdio-answers.e2e.test.ts | 4 +-- ...ve-node-env-production-default.e2e.test.ts | 8 +++--- ...rve-package-registry-always-on.e2e.test.ts | 2 +- .../test/serve-port-drift-notice.e2e.test.ts | 2 +- .../test/serve-process-child-env.e2e.test.ts | 8 +++--- .../serve-ready-degraded-boot.e2e.test.ts | 2 +- .../serve-stdio-stdout-purity.e2e.test.ts | 4 +-- .../start-port-banner-agreement.e2e.test.ts | 2 +- .../cli/test/unbuilt-workspace-lead.test.ts | 4 +-- .../test/validate-build-gate-parity.test.ts | 6 ++-- ...idate-json-failure-conversions.e2e.test.ts | 4 +-- .../validate-json-warning-parity.e2e.test.ts | 2 +- ...itest-resolution-base-collapse.e2e.test.ts | 2 +- .../cli/test/vitest-tiers-partition.test.ts | 2 +- packages/cli/tsconfig.test.json | 2 +- packages/cli/vitest.config.ts | 28 +++++++++---------- 56 files changed, 150 insertions(+), 150 deletions(-) diff --git a/packages/cli/test/artifact-pinned-boot.e2e.test.ts b/packages/cli/test/artifact-pinned-boot.e2e.test.ts index 561b32f9d59..ae58bc0b171 100644 --- a/packages/cli/test/artifact-pinned-boot.e2e.test.ts +++ b/packages/cli/test/artifact-pinned-boot.e2e.test.ts @@ -126,7 +126,7 @@ function runServe(env: Record, opts: { migrateAndExit?: boolean // `childEnv`, not a bare `...process.env`: the vitest worker // exports `TEST=true`, and better-auth 1.7.1 reads it directly // to switch its own origin/CSRF validation OFF in the child — - // see `helpers/serve-process.ts` for the measurement (#11267). + // see `helpers/serve-process.ts` for the measurement (commit 1ddda1d00). // This boot exits at `kernel:ready` (`OS_MIGRATE_AND_EXIT`) and // never answers a request, so nothing here CHANGES; it is the // hygiene half, so the next assertion added to this file starts diff --git a/packages/cli/test/build-json-advisory-parity.e2e.test.ts b/packages/cli/test/build-json-advisory-parity.e2e.test.ts index 8d44e2db726..65d66047de5 100644 --- a/packages/cli/test/build-json-advisory-parity.e2e.test.ts +++ b/packages/cli/test/build-json-advisory-parity.e2e.test.ts @@ -4,8 +4,8 @@ * #11727 — `os build --json` dropped the #3366 capability-provider hints and * the ADR-0046 package-docs advisories that `os validate --json` carries. * - * The fourth measured instance of one class in these two files (#10953, - * #11174, #11643, this): an advisory computed and then formatted *inside* an + * The fourth measured instance of one class in these two files (commit be7262e72, + * commit ab23c67ab, #11643, this): an advisory computed and then formatted *inside* an * `if (... && !flags.json)` print block, which puts it structurally out of * reach of the payload — computed, then discarded, for the one audience * `--json` exists to serve. Measured at `origin/main` 589758d22 over the diff --git a/packages/cli/test/build-json-failure-conversions.e2e.test.ts b/packages/cli/test/build-json-failure-conversions.e2e.test.ts index f834b940209..7ac62ee3e4d 100644 --- a/packages/cli/test/build-json-failure-conversions.e2e.test.ts +++ b/packages/cli/test/build-json-failure-conversions.e2e.test.ts @@ -15,7 +15,7 @@ * to appear exactly ONCE — the payload now carries the notice, and the terminal * gains no second stderr line for it. * - * #12125 — `os build --json`'s FAILURE payloads dropped the `conversions` field + * The defect commit 79cf692b0 fixed — `os build --json`'s FAILURE payloads dropped the `conversions` field * the run had ALREADY COMPUTED, on all nine of its failure exits. * * The same "computed, then dropped on a failure exit" shape as the `warnings` @@ -523,7 +523,7 @@ describe('#12125 — the contract is exhaustive over `compile.ts`, not just over // The one integer left, and it rots only in the direction that has to be // reviewed anyway: exits being REMOVED. Ten is the population the ruling in // this file's header was made over — nine failure exits plus the terminal - // success payload, the count `#12285` pinned on the day it landed — not a + // success payload, the count commit 79cf692b0 pinned on the day it landed — not a // count of today. (Today is eleven: the tenth FAILURE exit is ADR-0130 D4's // per-package author-time rule leg, #14439, a multi-package artifact // running the same rule table once per package. It arrived after the ruling diff --git a/packages/cli/test/build-warning-truncation-notice.test.ts b/packages/cli/test/build-warning-truncation-notice.test.ts index 862f424ea8d..f068e1e9121 100644 --- a/packages/cli/test/build-warning-truncation-notice.test.ts +++ b/packages/cli/test/build-warning-truncation-notice.test.ts @@ -15,7 +15,7 @@ * notice is indistinguishable from a complete one, so an author who reads it * and sees their file is clean has read a list that stopped early. Same shape * as the dropped summary rows pinned in `print-metadata-stats-zero-row.test.ts` - * (#10504, #10952): output that cannot distinguish "none" from "not shown". + * (commits ff5733e03, 0d4bd93e7): output that cannot distinguish "none" from "not shown". * * WHAT THESE PINS ASSERT — the pair, not the cap. A test that only checked * "50 entries printed" passes on the silent tree and pins nothing. So the diff --git a/packages/cli/test/commands.test.ts b/packages/cli/test/commands.test.ts index 905fc332e87..f2b5cd09953 100644 --- a/packages/cli/test/commands.test.ts +++ b/packages/cli/test/commands.test.ts @@ -132,7 +132,7 @@ describe('os explain — schema catalog accuracy', () => { // The catalog's element shape, stated locally: `SchemaInfo` is not exported, // and these tests must stay honest even where `SCHEMAS` widens to `any`. // ⚠️ The reason recorded here has CHANGED and the discipline has not. This - // file no longer sits outside every tsc program: #14710 landed + // file no longer sits outside every tsc program: commit 95fdf627b landed // `packages/cli/tsconfig.test.json`, whose `include: ["test/**/*"]` puts this // file in the program (`tsc --noEmit --listFiles -p tsconfig.test.json` // resolves it), and it carries NO row in `test-typecheck-debt.json` — so any @@ -178,7 +178,7 @@ describe('os explain — schema catalog accuracy', () => { }); }); -// ── `os explain` — the WHOLE catalog, swept against the spec (#14811) ────── +// ── `os explain` — the WHOLE catalog, swept against the spec (commit 8ad872ba3) ── // // #14782 pinned one entry (`flow`) by parsing its `example` against the real // schema. This generalises that technique to every entry, and derives the entry diff --git a/packages/cli/test/create-plugin-docs-parity.test.ts b/packages/cli/test/create-plugin-docs-parity.test.ts index f75e33305d3..ef5ecb00d10 100644 --- a/packages/cli/test/create-plugin-docs-parity.test.ts +++ b/packages/cli/test/create-plugin-docs-parity.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * The `plugin` template's SHAPE against what the docs promise (#14824). + * The `plugin` template's SHAPE against what the docs promise (commit cf6b67164). * * ## Why this pin exists * @@ -14,7 +14,7 @@ * govern at all (it emits no `objectstack.config.ts`). So the docs were the * only statement of its shape, and nothing held them to it. * - * The maintainer's ruling on #14824 is that a documented developer-facing + * The maintainer's ruling that commit cf6b67164 landed is that a documented developer-facing * command must work for the developer who follows the docs. This file is the * half of that which no install can check: that the listing the developer READS * is the listing they GET. diff --git a/packages/cli/test/create.test.ts b/packages/cli/test/create.test.ts index a6b9a57ee0b..bea9532ee64 100644 --- a/packages/cli/test/create.test.ts +++ b/packages/cli/test/create.test.ts @@ -1,11 +1,11 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * `os create`'s emitted contract — the pin for #14824. + * `os create`'s emitted contract — the pin for commit cf6b67164. * * ## The defect this file used to certify * - * Until #14824 the only assertion here was + * Until commit cf6b67164 the only assertion here was * `expect(packageJson.dependencies['@objectstack/cli']).toBe('workspace:*')` — * a test that PASSED on the defect, and would have gone red on the fix. Every * project `os create` emitted declared its `@objectstack/*` dependencies with @@ -89,7 +89,7 @@ describe('os create: the sweep covers every shipped template', () => { it('derives its population from the template map', () => { expect(TEMPLATE_KEYS.length).toBeGreaterThan(0); // Named so a rename is loud rather than silent. `plugin` is the survivor of - // the two #14824 reported; `example` was retired in #16483. + // the two templates commit cf6b67164 repaired; `example` was retired in #16483. expect(TEMPLATE_KEYS).toEqual(expect.arrayContaining(['plugin'])); }); @@ -214,7 +214,7 @@ describe.each(TEMPLATE_KEYS)('os create %s --in-repo — the platform-work emiss * * ## The defect * - * #14824 pointed the default emission at a developer outside this monorepo and + * Commit cf6b67164 pointed the default emission at a developer outside this monorepo and * the name did not move with the audience: `os create plugin my-thing` kept * writing `"name": "@objectstack/plugin-my-thing"` — a scope its new owner * cannot publish to — and no `private` flag. ⚠️ Nothing here could see it. The diff --git a/packages/cli/test/docs-cli-enumeration-parity.test.ts b/packages/cli/test/docs-cli-enumeration-parity.test.ts index ab7da50ef47..ada170425bf 100644 --- a/packages/cli/test/docs-cli-enumeration-parity.test.ts +++ b/packages/cli/test/docs-cli-enumeration-parity.test.ts @@ -13,8 +13,8 @@ * * #8965 an earlier under-inclusive drift on this page. * #16892 ① the scaffolded-scripts sentence said "these" of THREE commands - * and named TWO npm scripts. Under-inclusive from #16330, and - * for all four scaffolders from #16350 / PR #16888. + * and named TWO npm scripts. Under-inclusive from commit 4998efa71, and + * for all four scaffolders from commit 68aee4c99 (PR #16888). * #16892 ② `os lint` declares ELEVEN flags; the page documented FOUR. * One of the seven missing was `--include-platform`, which the * command NAMES IN ITS OWN HINT — so a reader following that diff --git a/packages/cli/test/extract-hook-body.test.ts b/packages/cli/test/extract-hook-body.test.ts index 989e0558d1a..8feebdd42a5 100644 --- a/packages/cli/test/extract-hook-body.test.ts +++ b/packages/cli/test/extract-hook-body.test.ts @@ -113,7 +113,7 @@ describe('extractHookBody', () => { expect(() => extractHookBody(fn, 'hook bad')).toThrow(/eval/); }); - // ── the `@capabilities` directive, RETIRED (#10917) ───────────────────── + // ── the `@capabilities` directive, RETIRED (commit 7940de5e0) ─────────── // // Ruled under ADR-0049 enforce-or-remove: the comment-borne override was read // off `String(fn)`, and every ordinary authoring path (`.ts`, `.js`, `.mjs`, @@ -171,7 +171,7 @@ describe('extractHookBody', () => { }); // The #4391 sibling that pinned `crypto.hash` being filtered OUT of an - // explicit `@capabilities` override went with the directive (#10917): with no + // explicit `@capabilities` override went with the directive (commit 7940de5e0): with no // override branch there is no token list to filter, so the guarantee is now // structural rather than a case. The inference half of #4391 is still pinned // by the test above, which is the route `crypto.hash` could still arrive on. diff --git a/packages/cli/test/fixtures/option-b-reader-probe.ts b/packages/cli/test/fixtures/option-b-reader-probe.ts index c380406c282..930fa6bacf5 100644 --- a/packages/cli/test/fixtures/option-b-reader-probe.ts +++ b/packages/cli/test/fixtures/option-b-reader-probe.ts @@ -201,7 +201,7 @@ function makeRecorder(rec: Recording) { name: 'com.objectstack.probe.option-b-recorder', // No `type`: `PluginSchema` defaults an absent `type` to `standard`, and // `'service'` is not a member of the declared closed set — `ObjectKernel` - // refused this object already, and since #16721 `LiteKernel.use()` (the + // refused this object already, and since commit 51ae73123 `LiteKernel.use()` (the // kernel `bootAndRecord` boots) runs the same contract. Nothing here reads // `.type`; the recorder IS the subsystems, not a typed plugin. version: '1.0.0', diff --git a/packages/cli/test/fixtures/published-entry-stderr-error-probe.mjs b/packages/cli/test/fixtures/published-entry-stderr-error-probe.mjs index 4ab3042d4e9..5d0cbe2cd4c 100644 --- a/packages/cli/test/fixtures/published-entry-stderr-error-probe.mjs +++ b/packages/cli/test/fixtures/published-entry-stderr-error-probe.mjs @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * The #14858 crash class, manufactured INSIDE the published entry point's own + * The crash class commit 0c5e97368 fixed, manufactured INSIDE the published entry point's own * process — driven by `published-entry-stderr-error-listener.test.ts`. * * Loaded with `node --import bin/run.js …` against a read end the parent diff --git a/packages/cli/test/fixtures/unbuilt-spec-dist.hook.mjs b/packages/cli/test/fixtures/unbuilt-spec-dist.hook.mjs index 3572f674239..95bb34ac130 100644 --- a/packages/cli/test/fixtures/unbuilt-spec-dist.hook.mjs +++ b/packages/cli/test/fixtures/unbuilt-spec-dist.hook.mjs @@ -3,7 +3,7 @@ /** * A BUILT checkout, made to answer like an unbuilt one for `@objectstack/spec` * and nothing else — the environment `run-dev-unbuilt-workspace.e2e.test.ts` - * needs and CI cannot otherwise have (#12964). + * needs and CI cannot otherwise have (commit e6fd1caf7). * * Loaded with `node --import`, so it is in place before `@oclif/core` walks the * command directory. It is a `resolve` hook and NOT a file operation on purpose: diff --git a/packages/cli/test/generate-agent-retired.e2e.test.ts b/packages/cli/test/generate-agent-retired.e2e.test.ts index a6d6558e3d6..90a209aa91d 100644 --- a/packages/cli/test/generate-agent-retired.e2e.test.ts +++ b/packages/cli/test/generate-agent-retired.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * PIN (#10359) — `os g agent` is gone, and its refusal names the replacement. + * PIN (commit 15b63e85a) — `os g agent` is gone, and its refusal names the replacement. * * The generator scaffolded into `src/agents`, a surface ADR-0063 §2 withdrew: * the kernel ships exactly two agents (`ask`, `build`) and the runtime catalog @@ -27,7 +27,7 @@ * * The refusal's pointer at skills is asserted here only as TEXT. That the * command it now names actually exists and writes a loadable file is pinned - * next door, in `generate-skill.e2e.test.ts` (#11025) — when this message was + * next door, in `generate-skill.e2e.test.ts` (commit 1c3a46f87) — when this message was * first written there was no `os g skill` to point at, and it said so. */ diff --git a/packages/cli/test/generate-file-name-registry-parity.test.ts b/packages/cli/test/generate-file-name-registry-parity.test.ts index 3e027795fb6..a194035d658 100644 --- a/packages/cli/test/generate-file-name-registry-parity.test.ts +++ b/packages/cli/test/generate-file-name-registry-parity.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * PIN (#11071) — a generated file's NAME matches the pattern the registry + * PIN (commit 50fb191dc) — a generated file's NAME matches the pattern the registry * declares for its type. * * ## Why the property and not six string comparisons diff --git a/packages/cli/test/generate-scaffold-validates.test.ts b/packages/cli/test/generate-scaffold-validates.test.ts index 0feac039304..be3b2d50967 100644 --- a/packages/cli/test/generate-scaffold-validates.test.ts +++ b/packages/cli/test/generate-scaffold-validates.test.ts @@ -63,7 +63,7 @@ * Those four were a separate card by triage's own fence — a census of the * other artifacts was explicitly NOT folded into #14087 — so this file first * RECORDED them, in the shrink-only shape this repo uses elsewhere - * (`KNOWN_UNALIASED_TEST_IMPORTS`, the type-check debt ledger). #14336 then + * (`KNOWN_UNALIASED_TEST_IMPORTS`, the type-check debt ledger). Commit 79c71d29d then * repaired all four templates and deleted all four entries, which is the whole * lifecycle the ledger was built to have. Two properties held throughout, and * both are still asserted below: @@ -105,7 +105,7 @@ import { BUNDLE_REQUIRE_EXTERNALS } from '../src/utils/config.js'; * — see the header. Adding an entry to silence a failure is the one edit this * table must never receive; the assertions below make a stale entry fail too. * - * EMPTY since #14336 repaired the last four (`object` / `view` / `action` / + * EMPTY since commit 79c71d29d repaired the last four (`object` / `view` / `action` / * `app`), which means every generator on the roster is held to the clean pin. * Keep it that way: a red here is a template to fix, never a line to add. */ diff --git a/packages/cli/test/generate-schema-retired.e2e.test.ts b/packages/cli/test/generate-schema-retired.e2e.test.ts index c12ab575538..8722e58da34 100644 --- a/packages/cli/test/generate-schema-retired.e2e.test.ts +++ b/packages/cli/test/generate-schema-retired.e2e.test.ts @@ -17,7 +17,7 @@ * (#17873), which pinned the document the command wrote — the very file the * ruling withdrew. * - * The shape follows `generate-agent-retired.e2e.test.ts` (#10359): the + * The shape follows `generate-agent-retired.e2e.test.ts` (commit 15b63e85a): the * assertions are about the CONTENT of the refusal, not only about a non-zero * exit, because a bare "unknown type" or "missing argument" also exits 1 and * leaves the author hunting for a spelling of something that no longer diff --git a/packages/cli/test/generate-skill.e2e.test.ts b/packages/cli/test/generate-skill.e2e.test.ts index d7425f3bf8f..c7469292823 100644 --- a/packages/cli/test/generate-skill.e2e.test.ts +++ b/packages/cli/test/generate-skill.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * PIN (#11025) — `os g skill` writes a file the loader actually FINDS, and + * PIN (commit 1c3a46f87) — `os g skill` writes a file the loader actually FINDS, and * that file parses. * * ## Why "it writes a file" is the wrong assertion @@ -17,7 +17,7 @@ * `NAME.ts`, so a naive skill scaffold lands as `lead_qualification.ts`, * matches neither pattern, and then type-checks, validates and publishes with * nothing anywhere saying it was skipped. That is the silent-strip shape - * ADR-0063's retirement of `os g agent` closed (#10359), re-entering through + * ADR-0063's retirement of `os g agent` closed (commit 15b63e85a), re-entering through * the scaffolder that replaced it. * * So the two pins below are: @@ -32,20 +32,20 @@ * process: the template calls `defineSkill(…)` at module scope, so the * import IS `SkillSchema.parse`. This is the pin that fails if anyone * ever copies the template from `SkillSchema`'s or `defineSkill`'s - * `@example` blocks — both pass `triggerPhrases`, a `retiredKey()` - * tombstone that rejects on parse (#11026). + * `@example` blocks — both passed `triggerPhrases`, a `retiredKey()` + * tombstone that rejects on parse, until commit 3c418c498 rewrote them. * * `matchesGlob` comes from `node:path` on purpose. Hand-rolling a glob * matcher here would re-introduce the restatement the first pin exists to * avoid, one layer down: the whole point is that nothing in this file decides * what `**` + `*.skill.ts` mean. * - * ## The control this file also holds (#11071) + * ## The control this file also holds (commit 50fb191dc) * * `os g object` is exercised here as a CONTROL, and what it controls for - * changed. #11025 scoped the filename fix to `skill` and fenced the repo-wide + * changed. Commit 1c3a46f87 scoped the filename fix to `skill` and fenced the repo-wide * route, so the control pinned `customer.ts` and a `'./customer'` barrel line. - * #11071 measured the loader rather than assuming — the mechanism, and the + * Commit 50fb191dc measured the loader rather than assuming — the mechanism, and the * precondition that keeps it from firing in this repo today, are stated once * in `metadata-file-name.ts` (#12075), not restated here — and the * per-generator override was replaced by a default derived from the @@ -102,7 +102,7 @@ const RUN_TIMEOUT_MS = 180_000; /** The contract under test, read from the registry — never restated. */ const SKILL_ENTRY = DEFAULT_METADATA_TYPE_REGISTRY.find(entry => entry.type === 'skill'); -/** Same, for the generator this file exercises end-to-end as a control (#11071). */ +/** Same, for the generator this file exercises end-to-end as a control (commit 50fb191dc). */ const OBJECT_ENTRY = DEFAULT_METADATA_TYPE_REGISTRY.find(entry => entry.type === 'object'); interface Run { @@ -268,7 +268,7 @@ describe('[#11025] the generated skill parses', () => { it('carries no `triggerPhrases` — the retired key both spec `@example` blocks still pass', () => { // Textual, deliberately: the parse above already refuses the tombstone, so - // this assertion exists to name the specific copy-source hazard (#11026) + // this assertion exists to name the specific copy-source hazard (commit 3c418c498 removed it at its source) // for whoever edits the template next. expect(writtenSource).not.toContain('triggerPhrases'); }); diff --git a/packages/cli/test/helpers/serve-process.ts b/packages/cli/test/helpers/serve-process.ts index 37deedfd2df..d18e1be7e67 100644 --- a/packages/cli/test/helpers/serve-process.ts +++ b/packages/cli/test/helpers/serve-process.ts @@ -596,7 +596,7 @@ export function portDriftError( /** * The variables vitest sets on its own WORKER process, which must never reach a - * spawned `os serve` child (#11267). + * spawned `os serve` child (commit 1ddda1d00). * * ## Why this exists — measured, not defensive * @@ -628,7 +628,7 @@ export function portDriftError( * * | child env | answer | * |---|---| - * | `{ ...process.env }` (this helper, before #11267) | `401 INVALID_EMAIL_OR_PASSWORD` — origin ACCEPTED, validation never ran | + * | `{ ...process.env }` (this helper, before commit 1ddda1d00) | `401 INVALID_EMAIL_OR_PASSWORD` — origin ACCEPTED, validation never ran | * | family below stripped | `403 INVALID_ORIGIN` — validation ran and rejected | * | only `TEST` stripped | `403 INVALID_ORIGIN` | * @@ -853,7 +853,7 @@ export function runServe( const child = spawn(TSX, [CLI, 'serve', opts.config ?? 'objectstack.config.ts', ...args], { cwd, // `childEnv`, never a bare `...process.env` — see its header for the - // measured reason (#11267). + // measured reason (commit 1ddda1d00). env: childEnv({ NO_COLOR: '1', // Keep the fixture self-contained: no file written, no port conflict diff --git a/packages/cli/test/hook-body-build-reach.e2e.test.ts b/packages/cli/test/hook-body-build-reach.e2e.test.ts index 7458c427cd5..f57be754efa 100644 --- a/packages/cli/test/hook-body-build-reach.e2e.test.ts +++ b/packages/cli/test/hook-body-build-reach.e2e.test.ts @@ -22,7 +22,7 @@ * `validate-top-level-strict.e2e.test.ts` pattern) and reads the artifact the * shell was left holding. * - * ⛔ THE CALL LANDED (#10917). The maintainer ruled the directive RETIRED under + * ⛔ THE CALL LANDED (commit 7940de5e0). The maintainer ruled the directive RETIRED under * ADR-0049 enforce-or-remove: the override branch, its docs block and the two * unit tests that masked it are gone, and `body.capabilities` — measured here to * survive — is the covered route for the same need. Per this header's own @@ -32,7 +32,7 @@ * What the first describe pins is now the RETIREMENT'S BLAST RADIUS, and the * expected reading is that there isn't one: the directive contributed nothing * before the removal (esbuild had already stripped it) and contributes nothing - * after, so every artifact-side number here is unchanged by #10917. That is the + * after, so every artifact-side number here is unchanged by commit 7940de5e0. That is the * claim worth pinning over a real build — a retirement of an inert surface must * be observationally identical for authors, and if any of these flips, the * removal took something live with it. @@ -93,7 +93,7 @@ const OBJECT = `{ }`; /** - * The retired-directive fixture (#10678 defect 1, kept as the #10917 regression + * The retired-directive fixture (#10678 defect 1, kept as the commit 7940de5e0 regression * probe). The handler asks for `api.write log` via the directive AND contains a * `.find(...)` call that inference reads as `api.read`. Both halves matter: the * inferred token proves the extractor really ran on this body (an assertion of @@ -125,7 +125,7 @@ export default defineStack({ `; /** - * The route the docs point at, and after #10917 the ONLY way to declare + * The route the docs point at, and after commit 7940de5e0 the ONLY way to declare * capabilities a body's code does not reveal: `body.capabilities` is DATA, not a * comment, so nothing in the pipeline strips it. This fixture is what makes the * retirement safe to have shipped — the need did not go away with the directive, @@ -224,7 +224,7 @@ describe('#10917 — the retired `@capabilities` directive changes nothing on th // Inference won; the directive contributed nothing. `api.read` comes from // `.object(...).find(...)`; `api.write` and `log` are what the directive - // asked for and — before and after #10917 alike — did not get. + // asked for and — before and after commit 7940de5e0 alike — did not get. expect(hook.body.capabilities).toEqual(['api.read']); expect(hook.body.capabilities).not.toContain('api.write'); expect(hook.body.capabilities).not.toContain('log'); diff --git a/packages/cli/test/i18n-extract-source-hashes.test.ts b/packages/cli/test/i18n-extract-source-hashes.test.ts index 2538848cfce..06b63744a81 100644 --- a/packages/cli/test/i18n-extract-source-hashes.test.ts +++ b/packages/cli/test/i18n-extract-source-hashes.test.ts @@ -1,6 +1,6 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. // -// `os i18n extract --source-hashes` — the provenance companion (#11671, +// `os i18n extract --source-hashes` — the provenance companion (commit 09b4f4e4e, // maintainer ruling #12069 Option A). // // The RULE itself lives in `@objectstack/platform-objects/apps` diff --git a/packages/cli/test/i18n-inline-locale-map-coverage.test.ts b/packages/cli/test/i18n-inline-locale-map-coverage.test.ts index 749e31cb276..9438b61ea7f 100644 --- a/packages/cli/test/i18n-inline-locale-map-coverage.test.ts +++ b/packages/cli/test/i18n-inline-locale-map-coverage.test.ts @@ -55,7 +55,7 @@ function walkedKeys(config: any): string[] { /** * A page whose ONLY localisation is inline locale maps — the shape #14412 / - * #5728 / #10926 ruled is a legitimate, delivered localisation route. No + * #5728 ruled, and the ruling commit d173125fb landed, is a legitimate, delivered localisation route. No * bundle, no `translations` block: nothing but the maps the author wrote. */ const pageLocalisedInlineOnly = (): any => ({ diff --git a/packages/cli/test/init-created-files-summary.e2e.test.ts b/packages/cli/test/init-created-files-summary.e2e.test.ts index e9de4c8884b..ca31019d16a 100644 --- a/packages/cli/test/init-created-files-summary.e2e.test.ts +++ b/packages/cli/test/init-created-files-summary.e2e.test.ts @@ -2,7 +2,7 @@ /** * `objectstack init`'s closing "Created files" summary — over the REAL - * command, not a copy of its printing logic (#10557). + * command, not a copy of its printing logic (commit 818e02700). * * ## The defect * @@ -25,7 +25,7 @@ * open question was what prints when the install FAILS. * * `create-objectstack`'s sibling scaffolder (`packages/create-objectstack/ - * src/index.ts`, the #10323 fix) had already measured and answered exactly + * src/index.ts`, the commit 5a616d558 fix) had already measured and answered exactly * this for the other scaffold path: print UNCONDITIONALLY once the install * attempt — succeeded or failed — has run its course, from a WALK of the * finished directory (`created-summary.ts`'s `summarizeTree`), never from a @@ -33,7 +33,7 @@ * (imported as `create-objectstack/created-summary`, a published subpath — * see that package's `exports`) instead of carrying a second copy of the * same renderer, which is how the two scaffold paths drifted once already - * (#10499). + * (closed by commit 6d441e41f). * * ## Why a fake `pnpm` on PATH rather than a real install * diff --git a/packages/cli/test/init-scaffold-file-name-registry-parity.test.ts b/packages/cli/test/init-scaffold-file-name-registry-parity.test.ts index 4faf9d22a93..37a9eab8e07 100644 --- a/packages/cli/test/init-scaffold-file-name-registry-parity.test.ts +++ b/packages/cli/test/init-scaffold-file-name-registry-parity.test.ts @@ -14,7 +14,7 @@ * * ## What is and is NOT claimed here — the measured load path * - * This is deliberately NOT the silent-strip shape (#10359, and #11071's case + * This is deliberately NOT the silent-strip shape (commit 15b63e85a, and commit 50fb191dc's case * for `os generate`). A scaffolded project declares its objects in CODE: * * import * as objects from './src/objects'; @@ -31,7 +31,7 @@ * * So the scaffold WORKED under the old name and nothing was invisible. What * it was, is one CLI teaching two spellings for one metadata type: `os init` - * wrote `_item.ts`, `os g object customer` (after #11071) writes + * wrote `_item.ts`, `os g object customer` (after commit 50fb191dc) writes * `customer.object.ts`, `create-objectstack`'s own blank starter already * shipped `note.object.ts`, and the examples (`app-crm/src/objects/ * account.object.ts`) plus the registry's own glob keys speak the same shape. @@ -134,7 +134,7 @@ describe('[#11598] the init scaffold writes object files the registry declares', it.each(TEMPLATES_WITH_OBJECTS)( 'template "%s" writes the same filename `os g object` would, for the same stem', (templateKey) => { - // The convergence half (#11071 direction, inherited): one CLI, one + // The convergence half (commit 50fb191dc's direction, inherited): one CLI, one // spelling. `metadataFileName` is the derivation `os generate` uses — // reading the infix out of the pattern rather than interpolating the // type key — so this compares the two commands' OUTPUTS, not two diff --git a/packages/cli/test/init-template-comments-self-contained.test.ts b/packages/cli/test/init-template-comments-self-contained.test.ts index 5e723ad0e7b..a7194a658c7 100644 --- a/packages/cli/test/init-template-comments-self-contained.test.ts +++ b/packages/cli/test/init-template-comments-self-contained.test.ts @@ -13,7 +13,7 @@ // identifiers — `ADR-0087` and `ADR-0090 D1` — addressed to a reader with // this monorepo open. A project scaffolded by `os init` ships no // `docs/adr/`, so the identifier named something the reader could not look -// up. This is the same defect class #10324 fixed in `create-objectstack`'s +// up. This is the same defect class commit ecd06f613 fixed in `create-objectstack`'s // bundled template *files*; this is the OTHER scaffolder, which renders its // templates as in-source string literals instead. // @@ -45,7 +45,7 @@ // // `init.ts` also carries its own ordinary source comments that legitimately // cite ADRs and issue numbers (e.g. the `printCreatedFilesSummary` doc -// comment cites #10499) — those never ship, because they live outside the +// comment cites commit 6d441e41f) — those never ship, because they live outside the // `configContent` / `srcFiles` functions the command actually writes to // disk. `create.ts` is the same: its `run()` body cites `packages/plugins` // as a destination directory, which ships nowhere. A pin that grepped @@ -78,7 +78,7 @@ // canonical-origin docs URL in the rendered output against the docs content // tree the way Fumadocs routes it. The candidate-route logic is restated // here rather than imported from check-published-readme-links' own module -// (which owns the canonical-origin constant), for the same reason #10324's +// (which owns the canonical-origin constant), for the same reason commit ecd06f613's // version does: an import would widen this suite's declared cross-package // read radius to buy six lines. // @@ -88,9 +88,9 @@ // `starter-comments-self-contained.test.ts` vocabulary, restated rather than // imported — same reason as the candidate-route logic above. Restating buys // the narrow read radius and costs the guarantee that the two stay equal, and -// they did NOT: #11022 added a fifth pattern to that file and this one kept +// they did NOT: commit 21756b325 added a fifth pattern to that file and this one kept // four, so the same defect class had two different answers depending on which -// scaffolder shipped it. #15150 backfills that fifth pattern here and adds a +// scaffolder shipped it. Commit cc986c913 backfills that fifth pattern here and adds a // sixth to BOTH files in one change. // // Both additions are pure regression guardrails: measured on the rendered @@ -215,7 +215,7 @@ function renderAll(): Rendered[] { /** * References a reader who has only their own scaffolded project cannot - * follow. Reused verbatim from #10324's + * follow. Reused verbatim from commit ecd06f613's * `starter-comments-self-contained.test.ts` — same defect class, same * vocabulary — spelled to match the identifier, not any particular * sentence, so the prose around it stays free to change. @@ -223,14 +223,14 @@ function renderAll(): Rendered[] { * "Verbatim" is an obligation, not a description of how it got here: a * pattern added to either file belongs in both, or this package's scaffolders * and that one's answer the same question differently. See the file header - * for the drift #15150 repaired. + * for the drift commit cc986c913 repaired. */ const MONOREPO_ONLY = [ { label: 'an ADR identifier', re: /\bADR-\d{3,4}\b/ }, { label: 'a bare issue number', re: /(^|[^\w/])#\d{3,6}\b/ }, { label: 'a repo build-script path', re: /\bscripts\/[\w.-]+\.(?:mjs|mts|cjs|ts|js)\b/ }, { label: 'a monorepo package path', re: /\bpackages\/[a-z0-9][\w-]*\//i }, - // #11022, backfilled here by #15150: `create-objectstack`'s + // Commit 21756b325, backfilled here by commit cc986c913: `create-objectstack`'s // `blank/README.md` named "the ObjectStack framework repo" as the home of // `skills/`, unlinked — a reader with only their own scaffolded project has // no way to reach it. The four patterns above are syntactic identifiers (an @@ -249,7 +249,7 @@ const MONOREPO_ONLY = [ // the emitters write to disk, so it does not see it and must not be // "fixed" to. { label: 'a reference to the ObjectStack repo as an unlinked location', re: /\bObjectStack (?:framework )?(?:mono)?repo\b/i }, - // #15150: the five patterns above are all spelled ABSOLUTELY — a repo-rooted + // Commit cc986c913: the five patterns above are all spelled ABSOLUTELY — a repo-rooted // path, an identifier, or a name. This one is the same class of unfollowable // reference written RELATIVELY, as a path that climbs out of the project the // reader actually has. `os create` shipped exactly that, @@ -259,7 +259,7 @@ const MONOREPO_ONLY = [ // reported it as a PASSING row. // // Anchored on `../`, deliberately NOT on `./`, and deliberately not on the - // depth judgement #15150 proposed (`check:cross-package-test-inputs`-style + // depth judgement commit cc986c913's card proposed (`check:cross-package-test-inputs`-style // "the shallowest point a path reaches"). What makes the bare anchor sound // is a property of THIS population rather than of `../`: the population is // the DEFAULT placement only. `create.ts` renders per `ScaffoldPlacement`, diff --git a/packages/cli/test/init.test.ts b/packages/cli/test/init.test.ts index 398755e8e25..ea9a8c8218c 100644 --- a/packages/cli/test/init.test.ts +++ b/packages/cli/test/init.test.ts @@ -313,7 +313,7 @@ describe('pnpm 11 build approvals in the rendered workspace file', () => { // A brand-new scaffold's first `pnpm install` reported two unmet peers, on the // one screen where a newcomer decides whether this project is solid, with -// nothing they did to cause it (#10326). Both ranges belong to third-party +// nothing they did to cause it (commit 675ab574e). Both ranges belong to third-party // packages we cannot edit, so the remedy is pnpm's scoped `allowedVersions` — // and it must travel INSIDE the scaffold, because a `peerDependencyRules` block // in this repo's own pnpm-workspace.yaml does not ship with published packages. diff --git a/packages/cli/test/json-stdout-purity.e2e.test.ts b/packages/cli/test/json-stdout-purity.e2e.test.ts index 7f339e88620..f205fc7d839 100644 --- a/packages/cli/test/json-stdout-purity.e2e.test.ts +++ b/packages/cli/test/json-stdout-purity.e2e.test.ts @@ -2,7 +2,7 @@ /** * `--json` ⇒ stdout is EXACTLY ONE JSON DOCUMENT, for the whole - * `bootSchemaStack` family (#6217). + * `bootSchemaStack` family (commit 2b641ddd4). * * `--json` has one audience — a program — and the commands that boot a kernel * were handing that program a stream it could not parse. `ObjectLogger` routes diff --git a/packages/cli/test/lint-conversion-notices.e2e.test.ts b/packages/cli/test/lint-conversion-notices.e2e.test.ts index c5aa18a075e..8874382761d 100644 --- a/packages/cli/test/lint-conversion-notices.e2e.test.ts +++ b/packages/cli/test/lint-conversion-notices.e2e.test.ts @@ -1,13 +1,13 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #12297 — `os lint` never surfaced an ADR-0087 D2 conversion notice, in + * The defect commit 9fd45a952 fixed — `os lint` never surfaced an ADR-0087 D2 conversion notice, in * EITHER face. * * ## The class this belongs to, and the one it does not * * ⛔ NOT the "computed, then dropped on a failure exit" family (#11643 / - * #11391 / #11772 / #12047 / #12125). Nothing was computed and discarded here. + * #11391 / #11772 / #12047 / commit 79cf692b0). Nothing was computed and discarded here. * `lint.ts` called `normalizeStackInput(config)` with no options object at all, * so no `onConversionNotice` sink existed and the notices were never PRODUCED. * The filer's anchored count over the whole file said so in one number: @@ -32,9 +32,9 @@ * ## ⛔ WHAT THESE PINS DO NOT DECIDE * * Whether an auto-converted key should instead become a `LintIssue` folded into - * `issues` — the `os lint` shape of the same question raised on #12125, where + * `issues` — the `os lint` shape of the same question commit 79cf692b0 left open, where * it is whether `warnings` and `conversions` should be one field — is OPEN. The - * 2026-08-25 ruling did not address it and #12125's implementer explicitly + * 2026-08-25 ruling did not address it and commit 79cf692b0 explicitly * withheld an answer. This change had no authority to settle it, so it mirrors * the shipped sibling shape. `counts are unchanged` below is a REGRESSION GUARD * recording the as-shipped shape — green before and after — ⛔ never an argument @@ -268,7 +268,7 @@ describe('#12297 — `os lint` surfaces ADR-0087 conversion notices in both face // the as-shipped shape, ⛔ never red-before evidence. `issues` keeps meaning // "something to fix"; a converted key is not one, and folding it in would // move `total`/`warnings` for every author with a deprecated spelling. The - // fold question is OPEN (#12125) and this pin takes no side on it. + // fold question is OPEN (commit 79cf692b0 left it so) and this pin takes no side on it. const converted = payloadOf(await runCli(['lint', '--json'], dirs.converts), 'converts'); const canonical = payloadOf(await runCli(['lint', '--json'], dirs.canonical), 'canonical'); diff --git a/packages/cli/test/migrate-exit-code.e2e.test.ts b/packages/cli/test/migrate-exit-code.e2e.test.ts index 8ccb6c113cb..4ce585d5994 100644 --- a/packages/cli/test/migrate-exit-code.e2e.test.ts +++ b/packages/cli/test/migrate-exit-code.e2e.test.ts @@ -11,7 +11,7 @@ * Only the one thing no author looks at, and the only thing a CI step, a * `set -e` script, a Makefile or a container entrypoint looks at. * - * Two of those observations have since changed, and deliberately: #6217 gave + * Two of those observations have since changed, and deliberately: commit 2b641ddd4 gave * `--json` its stdout back, so the boot log and the shutdown receipt now arrive * on **stderr** and stdout is one JSON document. That is what let this file * drop the payload-hunting extractor it had to carry — see {@link jsonPayload}. @@ -104,7 +104,7 @@ function runCli(args: string[], cwd: string, env: Record = {}): * column 0, then back to its matching lone `{` — written under duress because * the kernel's INFO logger wrote to stdout, so the payload arrived with ~60 log * lines above it and two below and the whole stream was not valid JSON. That - * was its own defect for the same audience (#6217); it is fixed, `--json` now + * was its own defect for the same audience; commit 2b641ddd4 fixed it, `--json` now * reserves stdout for the payload and the kernel's output goes to stderr, and * the extractor is gone. * @@ -163,7 +163,7 @@ describe('os migrate recorded-by --json — a successful run exits 0 (#4873)', ( pending: 0, applied: false, }); - // The receipt moved streams with #6217 and is still a receipt: the + // The receipt moved streams with commit 2b641ddd4 and is still a receipt: the // kernel really came up and really came down, it just says so on stderr // now so stdout can be the payload and nothing else. expect(run.stderr).toContain('Graceful shutdown complete'); diff --git a/packages/cli/test/package-publish-error-envelope.test.ts b/packages/cli/test/package-publish-error-envelope.test.ts index 44909e730ea..de7b663bcbc 100644 --- a/packages/cli/test/package-publish-error-envelope.test.ts +++ b/packages/cli/test/package-publish-error-envelope.test.ts @@ -2,7 +2,7 @@ /** * `os package publish` renders a failed publish as the SERVER's own sentence, - * never as the literal `[object Object]` (#10763). + * never as the literal `[object Object]` (commit c2b97c2a1). * * ## The defect * diff --git a/packages/cli/test/platform-page-i18n-parity.test.ts b/packages/cli/test/platform-page-i18n-parity.test.ts index cb1061ff2da..90dc33f1407 100644 --- a/packages/cli/test/platform-page-i18n-parity.test.ts +++ b/packages/cli/test/platform-page-i18n-parity.test.ts @@ -140,12 +140,12 @@ describe('plugin-carried Setup pages — i18n drift guard (#3589)', () => { }); }); -// ─── Extractor ↔ resolver WALK parity (#13109) ───────────────────────────── +// ─── Extractor ↔ resolver WALK parity (commit 8b236c826) ─────────────────── // // The guard above compares extractor output against the SHIPPED bundle, so it // only ever sees keys the extractor already emits — it is structurally blind // to "a key that should have been offered and wasn't", which is exactly the -// defect #13109 records. This block is the differential the shared +// defect commit 8b236c826 fixed. This block is the differential the shared // `PAGE_COMPONENT_COPY_KEYS` list cannot give: the KEY LIST has one definition // and both sides import it, but the WALK — which COMPONENTS carry those keys — // was written twice, once in `translatePage` (`packages/spec`) and once in @@ -160,7 +160,7 @@ describe('plugin-carried Setup pages — i18n drift guard (#3589)', () => { // whichever side it was copied from and pass through the drift it exists to // catch. // -// Since #13218 (ruled 2026-08-30) the walk itself is ONE exported symbol — +// Since commit c45d8e6b4 (the 2026-08-30 ruling) the walk itself is ONE exported symbol — // `walkAddressedPageComponents` in `@objectstack/spec/system` — and both sides // consume it, so the five invariants this block measures (roots, descent key, // depth cap, cycle guard, collision arbitration) have a single source. This @@ -650,7 +650,7 @@ describe('i18n-extract ↔ translatePage walk parity (#13109)', () => { }); -// --- The three shipped platform RECORD pages (#14817) ---------------------- +// --- The three shipped platform RECORD pages (commit 5529a374e) ------------ // // The guard at the top of this file owns the plugin-carried Setup pages whose // copy lives in the BUNDLE. This block owns the other three pages the platform @@ -684,7 +684,7 @@ describe('i18n-extract ↔ translatePage walk parity (#13109)', () => { // // ## What each assertion buys // -// The harm recorded on #14817 is not today's debt (there is none) -- it is that +// The harm commit 5529a374e records is not today's debt (there is none) -- it is that // `check:i18n-coverage`'s `0` for `platform-objects` reads as "checked, clean" // over a population that never contained these pages, so "a fourth plugin page, // or one new untranslated section heading, lands green". The population below diff --git a/packages/cli/test/print-metadata-stats-zero-row.test.ts b/packages/cli/test/print-metadata-stats-zero-row.test.ts index 880f2be35f5..905c954b9b8 100644 --- a/packages/cli/test/print-metadata-stats-zero-row.test.ts +++ b/packages/cli/test/print-metadata-stats-zero-row.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #10504 — `os validate` dropped the whole `UI:` row at zero apps, so a + * The defect commit ff5733e03 fixed — `os validate` dropped the whole `UI:` row at zero apps, so a * project with no navigable UI read identically to one whose summary simply * does not report on UI at all. * @@ -71,7 +71,7 @@ const ZERO_APPS_STATS: MetadataStats = { const ONE_APP_STATS: MetadataStats = { ...ZERO_APPS_STATS, apps: 1 }; /** - * #10952's harsher fixture: a stack that declares nothing at all, so EVERY + * Commit 0d4bd93e7's harsher fixture: a stack that declares nothing at all, so EVERY * section is empty — including `Data:`, which the `blank` scaffold's one object * keeps populated. Before the fix this rendered the single line `UI: 0 Apps`. */ @@ -97,17 +97,17 @@ describe('[#10504] printMetadataStats renders the UI: row at zero apps', () => { expect(out).toContain('Data: 1 Objects 2 Fields'); }); - // #10504's fourth test asserted the NARROW scope it shipped with: that + // Commit ff5733e03's fourth test asserted the NARROW scope it shipped with: that // `Logic:`/`Security:` still dropped their whole row at zero. That card named - // this assertion as "the deliberate one to update" if #10952 landed the wider - // fix. #10952 landed it — triage generalised the principle (a summary section + // this assertion as "the deliberate one to update" if commit 0d4bd93e7's card landed the wider + // fix. Commit 0d4bd93e7 landed it — triage generalised the principle (a summary section // is never silently dropped; every section prints its zero state) — so the // assertion is replaced, deliberately and by name, with the per-section pins // in the next describe block. }); /** - * #10952 — the same drop, measured on the rows #10504 did not rule on. + * The defect commit 0d4bd93e7 fixed — the same drop, measured on the rows the ruling commit ff5733e03 landed did not rule on. * * Reproduced at this branch's base against the real CLI (`bin/run-dev.js * validate`, `NO_COLOR=1`) on two fixture stacks. One object, two fields and @@ -122,7 +122,7 @@ describe('[#10504] printMetadataStats renders the UI: row at zero apps', () => { * just were not there, and "none of it" is indistinguishable from "not * reported on". * - * Triage (issue comment 5380549313) generalised #10504's ruling: a summary + * Triage (issue comment 5380549313) generalised the ruling commit ff5733e03 landed: a summary * section is NEVER silently dropped; every section prints its zero state. The * constraint it set is consistency with the shipped `UI: 0 Apps` shape, not a * specific string. @@ -179,7 +179,7 @@ describe('[#10952] printMetadataStats prints every section\'s zero state — no }); /** - * #11172 — the two rows of `printMetadataStats` that #10952 did not reach. + * The defect commit 05181e8cc fixed — the two rows of `printMetadataStats` that commit 0d4bd93e7 did not reach. * * Both measured at that card's head against the real CLI (`bin/run-dev.js * validate`, `NO_COLOR=1`) on a stack declaring nothing. The whole summary was @@ -252,7 +252,7 @@ describe('[#11172] printMetadataStats: the Runtime: row survives zero, and no me const keys = Object.keys(collectMetadataStats({})); // Anti-vacuity floor: an empty (or accidentally shrunken) key list would // satisfy the loop below perfectly while asserting nothing. 18 is the count - // after #11172 retired `translations`; retiring another metric under + // after commit 05181e8cc retired `translations`; retiring another metric under // enforce-or-remove means lowering this deliberately, which is the point. expect(keys.length).toBeGreaterThanOrEqual(18); diff --git a/packages/cli/test/published-entry-stderr-error-listener.test.ts b/packages/cli/test/published-entry-stderr-error-listener.test.ts index fcb8957c2f0..748ad79ac34 100644 --- a/packages/cli/test/published-entry-stderr-error-listener.test.ts +++ b/packages/cli/test/published-entry-stderr-error-listener.test.ts @@ -1,13 +1,13 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * A failed stderr write must not kill the PUBLISHED CLI. #14858 for the class, + * A failed stderr write must not kill the PUBLISHED CLI. Commit 0c5e97368 for the class, * #15564 for the measurement that reached it on this entry point. * * ## What #15564 asked, and what the answer turned out to be * * `bin/run-dev.js` has carried a no-op `error` listener on `process.stderr` - * since #14858; `bin/run.js` — the file `bin.objectstack` / `bin.os` point at, + * since commit 0c5e97368; `bin/run.js` — the file `bin.objectstack` / `bin.os` point at, * and the only thing under `bin/` npm packs (#14874) — did not. The card was * filed **NOT REPRODUCED** on purpose and fenced the cheap conclusion: two * probes against the published entry with the read end destroyed had answered @@ -30,7 +30,7 @@ * at afterWriteDispatched (node:internal/stream_base_commons:159:15) * exit code=1 * - * — the same frame and status #14858 traced on the dev shim, at 3049-3433 ms, + * — the same frame and status commit 0c5e97368's card traced on the dev shim, at 3049-3433 ms, * on `examples/app-todo`. The same child read by a DRAINING parent boots and * serves, exit 0 at a 20 s SIGTERM after 7926 bytes over 16.6 s. So the crash * costs the run at its first diagnostic line and 20 of its 21 stderr writes. diff --git a/packages/cli/test/published-subpath-hook-body.pin.test.ts b/packages/cli/test/published-subpath-hook-body.pin.test.ts index 13dd9eb9911..ad4f09654a9 100644 --- a/packages/cli/test/published-subpath-hook-body.pin.test.ts +++ b/packages/cli/test/published-subpath-hook-body.pin.test.ts @@ -25,7 +25,7 @@ * consumer — ratify the subpath as public surface rather than read `dist/` * paths — applied to the second consumer. ⛔ NOT a local reimplementation: a * hand-rolled extractor passes its own tests while diverging from the rule the - * build actually applies, which is the failure mode #13651 was filed about. + * build actually applies, which is the failure mode commit ada3834ad's card was filed about. * * ## Why the packed tarball and not the source tree * diff --git a/packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts b/packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts index 48be2ea0d50..cd79e0be523 100644 --- a/packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts +++ b/packages/cli/test/run-dev-unbuilt-workspace.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * The WIRING half of #12964 — `bin/run-dev.js` really asks, on a real failing + * The WIRING half of commit e6fd1caf7 — `bin/run-dev.js` really asks, on a real failing * run, whether "command … not found" is about a missing command at all. * * ``` @@ -464,7 +464,7 @@ describe('the mirror direction: a reader that is never coming back', () => { it('a CLOSED read end ends the child on its own, with the status every other reader gets', () => { // ⚠️ THE NUMBER BELOW MOVED FROM 1 TO 2, and this case is why it could not // move quietly. It pinned 1 on purpose — 1 was what the CLI DID, never what - // anyone contracted — and #14858 is the card that changed the CLI. ⛔ This + // anyone contracted — and commit 0c5e97368 is what changed the CLI. ⛔ This // was not a broken test and the flip is not a regression. // // What the child USED TO DO with its read end destroyed: node's OWN default @@ -487,7 +487,7 @@ describe('the mirror direction: a reader that is never coming back', () => { // `process.stderr` before `run()`. A failed stderr write stops being fatal, // the run reaches the CLI's own exit path — oclif's `handle()`, status 2 — // and the closed reader answers what the drained and never-read readers - // already answered (#14715 pinned 2 for the never-read one). Re-measured + // already answered (commit accb9231c pinned 2 for the never-read one). Re-measured // for that change, one contiguous 2x2 ablation of the shim on one box, the // listener present/absent against the `write` callback kept/removed: // diff --git a/packages/cli/test/scaffold-ci-script-parity.test.ts b/packages/cli/test/scaffold-ci-script-parity.test.ts index e5dc96a4430..a11ae63b80a 100644 --- a/packages/cli/test/scaffold-ci-script-parity.test.ts +++ b/packages/cli/test/scaffold-ci-script-parity.test.ts @@ -3,11 +3,11 @@ /** * PIN — every scaffolder emits a project that can run the on-ramp's CI workflow. * - * ## The defect this exists for (#16350) + * ## The defect this exists for (closed by commit 68aee4c99) * * Two scaffolders write a new project's `package.json`: `npx create-objectstack` * copies `packages/create-objectstack/src/templates/blank/`, and `os create` / - * `os init` render one of the `TEMPLATES` maps in `src/commands/init.ts`. #16330 + * `os init` render one of the `TEMPLATES` maps in `src/commands/init.ts`. Commit 4998efa71 * added a `lint` script to the template and a `pnpm lint` step to the workflow it * ships — and did not touch `init.ts`, whose THREE script maps each declared * `validate` and no `lint`. The two script sets diverged inside a single PR, and diff --git a/packages/cli/test/scaffold-workspace-consistency.test.ts b/packages/cli/test/scaffold-workspace-consistency.test.ts index d6a0af7dbc6..dfd45bea70a 100644 --- a/packages/cli/test/scaffold-workspace-consistency.test.ts +++ b/packages/cli/test/scaffold-workspace-consistency.test.ts @@ -2,7 +2,7 @@ // // scaffold-workspace-consistency — the two scaffold paths render a // `pnpm-workspace.yaml` into a new user's project independently, and this file -// is the only thing that can fail when they disagree (#10499). +// is the only thing that can fail when they disagree (commit 6d441e41f). // // ── The shape of the defect ───────────────────────────────────────────────── // @@ -21,7 +21,7 @@ // one of the two scaffold paths went on shipping the pre-fix shape for months // — found by a first-run audit (#10405), not by a gate. The measured pnpm // boundary was corrected in the renderer by that fix and NOT in the template, -// which is the second instance of the same class (#10498): a user on pnpm +// which is the second instance of the same class (fixed by commit 6d441e41f): a user on pnpm // 10.28 was told by the file inside their own project that their pnpm cannot // read the key it is in fact reading, while the sibling scaffold path said the // opposite. @@ -54,10 +54,10 @@ // // ── `peerDependencyRules`, and why it is compared here NOW ────────────────── // -// This limb was deliberately absent while #10931 was open: that card was the +// This limb was deliberately absent while commit afe1c4e0a's card was open: that card was the // ruling on WHICH peer skews the scaffold should declare, and a limb written // before it would have either duplicated the card or pre-empted its answer. -// #10931 is answered (the four `@better-auth/utils` declarations landed with +// Commit afe1c4e0a answered it (the four `@better-auth/utils` declarations landed with // it), so the reservation is discharged and the drift risk is what remains — // and it is the same two-producer risk the rest of this file exists for. The // peer block is, if anything, the more fragile of the two: build approvals are diff --git a/packages/cli/test/serve-app-anchored-optional-import.e2e.test.ts b/packages/cli/test/serve-app-anchored-optional-import.e2e.test.ts index b52724d8531..37128244a7f 100644 --- a/packages/cli/test/serve-app-anchored-optional-import.e2e.test.ts +++ b/packages/cli/test/serve-app-anchored-optional-import.e2e.test.ts @@ -37,7 +37,7 @@ * serve-process.ts` on purpose: that helper always runs the child WITH `cwd` set * to the app, which is the one shape this file must not use. What IS borrowed * from it is everything orthogonal to the directory the child starts in: - * `childEnv()` (#11267) — this file boots the real stack, better-auth included, + * `childEnv()` (commit 1ddda1d00) — this file boots the real stack, better-auth included, * which reads `TEST` directly — plus `randomPort()`, `portContentionError()` * (#12441) and `portDriftError()` (#12525, wired here by #12548), because a port * draw is not a property of the CWD either and this file used to carry its own @@ -295,7 +295,7 @@ function frameworkClusterEsmEntry(): string { manifest = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')); } catch { /* not a package root, or unreadable — keep climbing */ } if (manifest?.name === CLUSTER) { - // [#13112] The `import` condition is EITHER the ESM target itself or a + // [commit e7191ce71] The `import` condition is EITHER the ESM target itself or a // nested conditions object carrying it under `default` (the // per-condition `types` shape). Both spellings ship in this repo, so the // entry is read through the nesting; the refusal below still fires when diff --git a/packages/cli/test/serve-bound-port-publish-order.test.ts b/packages/cli/test/serve-bound-port-publish-order.test.ts index acd5b8b9abc..0a68fa6f892 100644 --- a/packages/cli/test/serve-bound-port-publish-order.test.ts +++ b/packages/cli/test/serve-bound-port-publish-order.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #13193 / #13158 — the pin for the ORDER `os serve` publishes its bound port in. + * Commit faff497fd / #13158 — the pin for the ORDER `os serve` publishes its bound port in. * * ## What broke, and why it read as a flake for a day * diff --git a/packages/cli/test/serve-host-fallback-base.e2e.test.ts b/packages/cli/test/serve-host-fallback-base.e2e.test.ts index bc783c6dcdf..a1b76dfd2a5 100644 --- a/packages/cli/test/serve-host-fallback-base.e2e.test.ts +++ b/packages/cli/test/serve-host-fallback-base.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #11157 — `serve`'s host importer resolves the UNDECLARED leg from + * Commit a4cb7817f — `serve`'s host importer resolves the UNDECLARED leg from * `packages/cli`, because it hands `createHostImporter` its own base. * * ── The defect ─────────────────────────────────────────────────────────── @@ -11,7 +11,7 @@ * leg falls back to "the importing package's own resolution" — and which package * that is depends entirely on where the `import()` is physically WRITTEN, * because Node ESM resolves a bare specifier against the module containing the - * call. #10943 made that an explicit parameter, `options.fallbackImport`, so a + * call. Commit 46d34ab7c made that an explicit parameter, `options.fallbackImport`, so a * caller can hand in its own `import()`. `@objectstack/verify` (`bootStack`) and * the `packages/qa/dogfood` enterprise probe both pass theirs; `serve`'s * `importFromHost` did not, so the CLI advertised its own resolution and @@ -208,7 +208,7 @@ describe('os serve → the undeclared fallback resolves from packages/cli (#1115 // Named, not just failed: the no-base leg really does resolve from // `packages/types`, which is the sentence this whole card is about. expect(probe.controlNoBase).toMatch(/imported from .*[/\\]packages[/\\]types[/\\]/); - // …and it says exactly why, which is the branch #11157 moves `serve` off. + // …and it says exactly why, which is the branch commit a4cb7817f moves `serve` off. expect(probe.controlNoBase).toContain('the caller did not pass `fallbackImport`'); }); @@ -249,7 +249,7 @@ describe('os serve → the undeclared diagnostic reports the base actually used' // #11185: the app being served, never the process CWD. expect(probe.nowhere).toContain(`host app: ${appRoot}`); expect(probe.nowhere).not.toContain(`host app: ${neutralCwd}`); - // #11157: the fallback that failed is now THIS package's, so the path Node + // Commit a4cb7817f: the fallback that failed is now THIS package's, so the path Node // reports is inside packages/cli and not inside packages/types. expect(probe.nowhere).toMatch(/fallback resolution also failed: .*imported from /); expect(probe.nowhere).toMatch(/imported from .*[/\\]packages[/\\]cli[/\\]/); diff --git a/packages/cli/test/serve-mcp-capability-collision.e2e.test.ts b/packages/cli/test/serve-mcp-capability-collision.e2e.test.ts index 73b67a03277..fd9a75c0419 100644 --- a/packages/cli/test/serve-mcp-capability-collision.e2e.test.ts +++ b/packages/cli/test/serve-mcp-capability-collision.e2e.test.ts @@ -81,7 +81,7 @@ const HERE = resolve(fileURLToPath(import.meta.url), '..'); * PRICE, stated because it is real. This file is now a verdict about BUILD * STATE as well as about the source in the checkout, which is the trade * `scripts/check-test-source-alias.mjs` argues against for in-process imports. - * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (#11268) + * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (commit 918988ad3) * so CI always builds `dist/` first; `requireBuiltCli()` — hoisted into * `helpers/serve-process.ts` by #12539, with the reason it refuses supplied * from HERE (`RUN_JS_RESOLVES_FROM_DIST`) because it is true of this @@ -161,7 +161,7 @@ function boot(env: Record, waitFor: RegExp): Promise // `childEnv`, not a bare `...process.env`: the vitest worker exports // `TEST=true`, which better-auth 1.7.1 reads directly and answers by // switching its own origin/CSRF validation OFF in the child — see - // `helpers/serve-process.ts` for the measurement (#11267). This file + // `helpers/serve-process.ts` for the measurement (commit 1ddda1d00). This file // signs in for real, so it is a child that actually reaches that code. env: childEnv({ NO_COLOR: '1', diff --git a/packages/cli/test/serve-mcp-stdio-answers.e2e.test.ts b/packages/cli/test/serve-mcp-stdio-answers.e2e.test.ts index b77f5093f01..973e1a7fe4d 100644 --- a/packages/cli/test/serve-mcp-stdio-answers.e2e.test.ts +++ b/packages/cli/test/serve-mcp-stdio-answers.e2e.test.ts @@ -80,7 +80,7 @@ const HERE = resolve(fileURLToPath(import.meta.url), '..'); * PRICE, stated because it is real. This file is now a verdict about BUILD * STATE as well as about the source in the checkout, which is the trade * `scripts/check-test-source-alias.mjs` argues against for in-process imports. - * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (#11268) + * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (commit 918988ad3) * so CI always builds `dist/` first; `requireBuiltCli()` — hoisted into * `helpers/serve-process.ts` by #12539, with the reason it refuses supplied * from HERE (`RUN_JS_RESOLVES_FROM_DIST`) because it is true of this @@ -147,7 +147,7 @@ function boot(env: Record, waitFor: RegExp): Promise // `childEnv`, not a bare `...process.env`: the vitest worker exports // `TEST=true`, which better-auth 1.7.1 reads directly and answers by // switching its own origin/CSRF validation OFF in the child — see - // `helpers/serve-process.ts` for the measurement (#11267). This file + // `helpers/serve-process.ts` for the measurement (commit 1ddda1d00). This file // signs in for real, so it is a child that actually reaches that code. env: childEnv({ NO_COLOR: '1', diff --git a/packages/cli/test/serve-node-env-production-default.e2e.test.ts b/packages/cli/test/serve-node-env-production-default.e2e.test.ts index b74f5d127e9..d96767ba5fa 100644 --- a/packages/cli/test/serve-node-env-production-default.e2e.test.ts +++ b/packages/cli/test/serve-node-env-production-default.e2e.test.ts @@ -9,7 +9,7 @@ * (`start.ts:347`). `os serve` runs IN-PROCESS, so there is no child env to * default; the equivalent has to mutate `process.env.NODE_ENV` itself, early * enough that every `NODE_ENV !== 'production'` gate downstream — starting - * with plugin-auth's localhost trusted-origin CSRF substitution (#10366) — + * with plugin-auth's localhost trusted-origin CSRF substitution (commit bbe643c08) — * observes the default rather than the raw unset value. * * WHY THIS FILE SPAWNS THE REAL, BUILT CLI (`bin/run.js`, not @@ -387,14 +387,14 @@ async function probeOriginCheck(env: Record): Promis // which NODE_ENV state this call is probing. OS_AUTH_SECRET: 'e2e-node-env-default-probe-secret-not-for-real-use', // EXACTLY the argument the line above makes, for the sibling gate that - // #11267 exposed. The unset-`NODE_ENV` leg is — by this file's whole + // commit 1ddda1d00 exposed. The unset-`NODE_ENV` leg is — by this file's whole // design — a PRODUCTION boot, and `LocalCryptoProvider` refuses to start // in production without a stable key rather than mint one that would // make every `sys_secret` value undecryptable after a restart. That // refusal is a boot failure, not a signal about the origin gate this // file measures, so the key is supplied explicitly. // - // ⚠️ It was NOT needed before #11267 — and that is the finding, not an + // ⚠️ It was NOT needed before commit 1ddda1d00 — and that is the finding, not an // inconvenience. What follows is quoted in the PAST TENSE on purpose: // the code it quotes is GONE. `detectMode` used to read // `if (env.VITEST || env.NODE_ENV === 'test') return 'test'`, so while @@ -431,7 +431,7 @@ async function probeOriginCheck(env: Record): Promis // `serve.ts`'s own gate and stays green with the fix reverted, which is // exactly the vacuity this card's anti-vacuity section warns against, // one layer further down than the one it names. This file used to unset - // `TEST` by hand right here; #11267 moved that into `childEnv()` so + // `TEST` by hand right here; commit 1ddda1d00 moved that into `childEnv()` so // every spawner in this directory gets it without having to know, and // widened it to the whole `VITEST*` family. The behaviour of this // fixture is unchanged — `childEnv()` removes a superset of what the diff --git a/packages/cli/test/serve-package-registry-always-on.e2e.test.ts b/packages/cli/test/serve-package-registry-always-on.e2e.test.ts index 000f43c7017..95d68e0ed91 100644 --- a/packages/cli/test/serve-package-registry-always-on.e2e.test.ts +++ b/packages/cli/test/serve-package-registry-always-on.e2e.test.ts @@ -128,7 +128,7 @@ function bootServe(dir: string, port: string, db: string): Promise { const child = spawn(TSX, [CLI, 'serve', 'objectstack.config.ts', '-p', port, '--dev'], { cwd: dir, stdio: ['pipe', 'pipe', 'pipe'], - // `childEnv`, never a bare `...process.env` — see its header (#11267). + // `childEnv`, never a bare `...process.env` — see its header (commit 1ddda1d00). env: childEnv({ NO_COLOR: '1', OS_DATABASE_URL: db, diff --git a/packages/cli/test/serve-port-drift-notice.e2e.test.ts b/packages/cli/test/serve-port-drift-notice.e2e.test.ts index c0f7cd8d920..cda2eb96e0d 100644 --- a/packages/cli/test/serve-port-drift-notice.e2e.test.ts +++ b/packages/cli/test/serve-port-drift-notice.e2e.test.ts @@ -188,7 +188,7 @@ function boot(port: number | string, timeoutMs = 180_000): Promise { return new Promise((resolveBoot) => { const child = spawn(TSX, [CLI, 'serve', 'objectstack.config.ts', '--port', String(port)], { cwd: dir, - // The shared child environment, never a bare `...process.env` (#11267). + // The shared child environment, never a bare `...process.env` (commit 1ddda1d00). // // `NODE_ENV` is declared here rather than left to the entrypoint even // though `bin/run-dev.js` pins the same value before argv is parsed: the diff --git a/packages/cli/test/serve-process-child-env.e2e.test.ts b/packages/cli/test/serve-process-child-env.e2e.test.ts index d4ca502140a..4b7a852f672 100644 --- a/packages/cli/test/serve-process-child-env.e2e.test.ts +++ b/packages/cli/test/serve-process-child-env.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #11267 — a spawned `os serve` child must not inherit the vitest worker's + * Commit 1ddda1d00 — a spawned `os serve` child must not inherit the vitest worker's * `TEST=true`, because better-auth switches its own origin/CSRF validation OFF * when it sees it. * @@ -29,7 +29,7 @@ * * | child env | answer | * |---|---| - * | `{ ...process.env, … }` — this directory's shape before #11267 | `401 INVALID_EMAIL_OR_PASSWORD` — origin ACCEPTED, validation never ran | + * | `{ ...process.env, … }` — this directory's shape before commit 1ddda1d00 | `401 INVALID_EMAIL_OR_PASSWORD` — origin ACCEPTED, validation never ran | * | `childEnv({ … })` | `403 INVALID_ORIGIN` — validation ran and rejected | * * Isolated when this was measured: stripping ONLY `TEST` (leaving `VITEST`, @@ -60,7 +60,7 @@ * ## ⚠️ The first boot deliberately builds the env the WRONG way * * `leakedEnv()` below is a bare `...process.env` spread on purpose — it is the - * pre-#11267 recipe, kept executable so the repair stays distinguishable from a + * recipe from before commit 1ddda1d00, kept executable so the repair stays distinguishable from a * no-op. ⛔ Do not "clean it up" to `childEnv()`: that would delete the only * evidence in the repo that the leak does anything, and leave a green suite * behind. It is also the canary on the dependency — if better-auth stops @@ -167,7 +167,7 @@ const OVERRIDES = { }; /** - * ⚠️ The PRE-#11267 recipe, on purpose. See this file's header before touching + * ⚠️ The recipe from BEFORE commit 1ddda1d00, on purpose. See this file's header before touching * it — it is the leg that proves the leak does something. */ function leakedEnv(): Record { diff --git a/packages/cli/test/serve-ready-degraded-boot.e2e.test.ts b/packages/cli/test/serve-ready-degraded-boot.e2e.test.ts index 76e199ab747..3a7f3ca557c 100644 --- a/packages/cli/test/serve-ready-degraded-boot.e2e.test.ts +++ b/packages/cli/test/serve-ready-degraded-boot.e2e.test.ts @@ -94,7 +94,7 @@ async function boot(env: Record = {}): Promise const child = spawn(process.execPath, [CLI, 'serve', 'objectstack.config.ts', '--port', String(port)], { cwd: fixtureDir, stdio: ['ignore', 'pipe', 'pipe'], - // `childEnv`, never a bare `...process.env` — see its header (#11267). + // `childEnv`, never a bare `...process.env` — see its header (commit 1ddda1d00). env: childEnv({ NO_COLOR: '1', OS_DATABASE_URL: ':memory:', diff --git a/packages/cli/test/serve-stdio-stdout-purity.e2e.test.ts b/packages/cli/test/serve-stdio-stdout-purity.e2e.test.ts index feced02b1c5..650462c082e 100644 --- a/packages/cli/test/serve-stdio-stdout-purity.e2e.test.ts +++ b/packages/cli/test/serve-stdio-stdout-purity.e2e.test.ts @@ -77,7 +77,7 @@ const HERE = resolve(fileURLToPath(import.meta.url), '..'); * PRICE, stated because it is real. This file is now a verdict about BUILD * STATE as well as about the source in the checkout, which is the trade * `scripts/check-test-source-alias.mjs` argues against for in-process imports. - * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (#11268) + * `turbo.json` declares `@objectstack/cli#test` `dependsOn: ["build"]` (commit 918988ad3) * so CI always builds `dist/` first; `requireBuiltCli()` — hoisted into * `helpers/serve-process.ts` by #12539, with the reason it refuses supplied * from HERE (`RUN_JS_RESOLVES_FROM_DIST`) because it is true of this @@ -139,7 +139,7 @@ function boot(env: Record, waitFor: RegExp): Promise // `childEnv`, not a bare `...process.env`: the vitest worker exports // `TEST=true`, which better-auth 1.7.1 reads directly and answers by // switching its own origin/CSRF validation OFF in the child — see - // `helpers/serve-process.ts` for the measurement (#11267). This file + // `helpers/serve-process.ts` for the measurement (commit 1ddda1d00). This file // signs in for real, so it is a child that actually reaches that code. env: childEnv({ NO_COLOR: '1', diff --git a/packages/cli/test/start-port-banner-agreement.e2e.test.ts b/packages/cli/test/start-port-banner-agreement.e2e.test.ts index 6a40180c483..c74a36895ac 100644 --- a/packages/cli/test/start-port-banner-agreement.e2e.test.ts +++ b/packages/cli/test/start-port-banner-agreement.e2e.test.ts @@ -131,7 +131,7 @@ function bootStart( return new Promise((resolveBoot, rejectBoot) => { const child = spawn(entry.exec, [...entry.argv, 'start', ...args], { cwd: workdir, - // `childEnv`, never a bare `...process.env` — see its header (#11267). + // `childEnv`, never a bare `...process.env` — see its header (commit 1ddda1d00). // `NODE_ENV: undefined` is required by the built entrypoint (#11464): // `development`/`test` sends oclif's command lookup back to `src/`. env: childEnv({ diff --git a/packages/cli/test/unbuilt-workspace-lead.test.ts b/packages/cli/test/unbuilt-workspace-lead.test.ts index 94617c264dc..2cb8bcc351b 100644 --- a/packages/cli/test/unbuilt-workspace-lead.test.ts +++ b/packages/cli/test/unbuilt-workspace-lead.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * The DECISION half of #12964 — when oclif's "command … not found" is really a + * The DECISION half of commit e6fd1caf7 — when oclif's "command … not found" is really a * dependency that has no build output, and when it is genuinely a missing * command and must be left alone. * @@ -173,7 +173,7 @@ describe('unbuiltWorkspaceLines — build output that was never consulted (#1654 const lines = unbuiltWorkspaceLines(notFound(), [REDIRECTED_DETAIL], INVOCATION_PREFIX, () => REDIRECTED_TO); expect(lines).toHaveLength(2); - // Still contradicts "not found" — that half of #12964 is unchanged. + // Still contradicts "not found" — that half of commit e6fd1caf7 is unchanged. expect(lines?.[0]).toContain('NOT A MISSING COMMAND'); // …but the attribution is inverted, and says so in words a reader cannot // misread as the old line: the precondition is NOT the build output. diff --git a/packages/cli/test/validate-build-gate-parity.test.ts b/packages/cli/test/validate-build-gate-parity.test.ts index db279d1e6b8..278a2758c7c 100644 --- a/packages/cli/test/validate-build-gate-parity.test.ts +++ b/packages/cli/test/validate-build-gate-parity.test.ts @@ -303,7 +303,7 @@ const NOT_A_GATE: Readonly> = { 'cleanupOldRuntimeBundles', 'warningsSoFar', ], - // [#17080] Reads a fact about the TOOLCHAIN, not about the input. The + // [commit 8b4890343] Reads a fact about the TOOLCHAIN, not about the input. The // ADR-0087 D4 `release` section is computed at publish time from the two // tarballs and shipped inside the installed `@objectstack/spec`; this reader // opens that file and counts its entries. It takes nothing from the stack, so @@ -377,7 +377,7 @@ const UTILS_DIR = join(__dirname, '..', 'src', 'utils'); /** * The three authoring commands, as one list. Named once so a rule below cannot - * quietly cover a subset of the class it describes — the #12297 failure the + * quietly cover a subset of the class it describes — the failure commit 9fd45a952 closed, which the * sink guard at the bottom of this file records. */ const AUTHORING_COMMANDS: readonly string[] = ['compile.ts', 'validate.ts', 'lint.ts']; @@ -1073,7 +1073,7 @@ describe('os validate is the read-only superset of os build (#3782, #4409)', () * before the conversion retires and their metadata stops loading, and five * conversions are live today. * - * ⭐ [#12297] `lint.ts` was MISSING FROM THIS LOOP, and that is why the gap + * ⭐ [commit 9fd45a952] `lint.ts` was MISSING FROM THIS LOOP, and that is why the gap * survived #11772: the loop named the two commands the card in hand was * about, so closing `os build` left `os lint` — the third command the #4409 * registry holds to this same bar, and the one whose docblock above already diff --git a/packages/cli/test/validate-json-failure-conversions.e2e.test.ts b/packages/cli/test/validate-json-failure-conversions.e2e.test.ts index e93015db07f..49902737c66 100644 --- a/packages/cli/test/validate-json-failure-conversions.e2e.test.ts +++ b/packages/cli/test/validate-json-failure-conversions.e2e.test.ts @@ -15,7 +15,7 @@ * to appear exactly ONCE — the payload now carries the notice, and the terminal * gains no second stderr line for it. * - * #12125 — `os validate --json`'s FAILURE payloads dropped the `conversions` + * The defect commit 79cf692b0 fixed — `os validate --json`'s FAILURE payloads dropped the `conversions` * field the run had ALREADY COMPUTED, on all five of its failure exits. * * The same "computed, then dropped on a failure exit" shape as the `warnings` @@ -394,7 +394,7 @@ describe('#12125 — every `os validate --json` failure exit carries the convers // ⛔ NOT an argument that folding is wrong. Whether the two should become // one field is an OPEN question this card was not given authority to // settle; this records the shape as-shipped so a fold happens deliberately - // rather than as a side effect. Green both before and after #12125. + // rather than as a side effect. Green both before and after commit 79cf692b0. const run = await runCli(['validate', '--json'], dirs.docsfail); const payload = payloadOf(run, 'docsfail'); const warnings = Array.isArray(payload.warnings) ? payload.warnings : []; diff --git a/packages/cli/test/validate-json-warning-parity.e2e.test.ts b/packages/cli/test/validate-json-warning-parity.e2e.test.ts index ebcf144f54b..f819aa9c02d 100644 --- a/packages/cli/test/validate-json-warning-parity.e2e.test.ts +++ b/packages/cli/test/validate-json-warning-parity.e2e.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * #10953 — `os validate` and `os validate --json` carry the SAME warning set + * Commit be7262e72 — `os validate` and `os validate --json` carry the SAME warning set * for the same config. * * ## The defect this pins shut diff --git a/packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts b/packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts index ef0b02dd500..a7db256f4bb 100644 --- a/packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts +++ b/packages/cli/test/vitest-resolution-base-collapse.e2e.test.ts @@ -59,7 +59,7 @@ * That is what makes the control vacuous. The control for a base claim is "build * it the old way and show it fails" — and the old way does not fail here, so the * control is written green and reports nothing. Measured on this card: removing - * #11157's fix from `serve.ts` entirely left the in-process `chalk` assertion in + * commit a4cb7817f's fix from `serve.ts` entirely left the in-process `chalk` assertion in * `src/commands/serve-config-plugin-host-resolution.test.ts` GREEN, while the * spawned-child pin of the same claim in `serve-host-fallback-base.e2e.test.ts` * went RED. Same tree, same ablation, opposite verdicts. diff --git a/packages/cli/test/vitest-tiers-partition.test.ts b/packages/cli/test/vitest-tiers-partition.test.ts index ab2537f42d0..230e668fd7e 100644 --- a/packages/cli/test/vitest-tiers-partition.test.ts +++ b/packages/cli/test/vitest-tiers-partition.test.ts @@ -2,7 +2,7 @@ /** * The two tiers of this package's suite stay a PARTITION, and the tier of - * every file stays what the file DOES (#13504, #14554). + * every file stays what the file DOES (commit 44813ba57, #14554). * * `vitest.config.ts` splits the suite into two named projects — `unit` (the * local default) and `integration` (spawns the real CLI or boots a real diff --git a/packages/cli/tsconfig.test.json b/packages/cli/tsconfig.test.json index d5cb7cb93cb..6d4ed2602c4 100644 --- a/packages/cli/tsconfig.test.json +++ b/packages/cli/tsconfig.test.json @@ -1,4 +1,4 @@ -// The TEST-layer type-check program (#14710), adopting the mechanism #5286 set +// The TEST-layer type-check program (commit 95fdf627b), adopting the mechanism #5286 set // for `packages/spec` and #5449 generalised. `tsconfig.json` beside this file // stays exactly as it is: it is the BUILD config, and its `include: ["src"]` is // correct for a build — `tsconfig.build.json` ships `src` and nothing else. diff --git a/packages/cli/vitest.config.ts b/packages/cli/vitest.config.ts index 36a510bd4df..3e9a236d5b9 100644 --- a/packages/cli/vitest.config.ts +++ b/packages/cli/vitest.config.ts @@ -39,14 +39,14 @@ // apart and neither said which was current, so the population is now stated // ONCE — with the commit it was measured on — in the suite-cost section below. // -// ## Why the create-objectstack entry (#10557) +// ## Why the create-objectstack entry (commit 818e02700) // // `init.ts` prints its "Created files" summary from a walk of the finished // project directory rather than a list accumulated while writing the // template (see the command's own header) — reusing `create-objectstack`'s // `created-summary.ts`, published as the `create-objectstack/created-summary` // subpath so both scaffold paths share one renderer instead of drifting -// (#10499). Without an alias that bare specifier resolves through +// (commit 6d441e41f closed the earlier drift). Without an alias that bare specifier resolves through // `create-objectstack`'s `exports` to its **dist**, for the same reason and // the same danger as the entry above: a stale `dist/created-summary.js` // would make every test that reaches `init.ts` a verdict about build state. @@ -60,7 +60,7 @@ // already in this package's ledger entry — so the required set is unchanged in // both directions. // -// ## WHY THERE IS STILL NO `test` BLOCK — the suite cost, measured (#10152) +// ## WHY THERE IS STILL NO `test` BLOCK — the suite cost, measured (commit ad492e7fd) // // This package's suite was the largest single item on the Test Core critical // path (548.6s / 474.4s in two `merge_group` runs), and the standing theory for @@ -79,7 +79,7 @@ // re-checked. Whoever re-measures next: print your commit here, and keep these // counts in exactly one place in this file — a second copy is what rotted last // time, because the two drifted and neither said which was current. -// ⇒ Re-measured on f532630d02 (#13504): the `cli` POPULATION below is +// ⇒ Re-measured on f532630d02 (commit 55519d503): the `cli` POPULATION below is // superseded by the section further down, which also attributes the `import` // term per file. The peer rows and every ratio in this section are from the // 2f665a1af run and were NOT re-taken. @@ -258,9 +258,9 @@ // So the work is real, the price is fair, and nothing contained in this package // removes it without changing what the e2e tests assert. // -// ## THE `import` TERM, ATTRIBUTED PER FILE (#13504) — f532630d02, 2026-08-31 +// ## THE `import` TERM, ATTRIBUTED PER FILE (commit 55519d503) — f532630d02, 2026-08-31 // -// #13504 asked the one question the section above does not answer. The run it +// Commit 55519d503's card asked the one question the section above does not answer. The run it // filed spent `import 401.08s`, a quarter of its wall, before any assertion // executed, and nothing said WHERE. This section says where, and the answer // settles three candidate routes without any of them having to be tried. @@ -356,7 +356,7 @@ // `bin/run.js` each state that prerequisite in their own words). So this names // the lever and stops; taking it is one argument per file. // -// THE TRADE, PRICED. This is the choice #13504 says is being made by the +// THE TRADE, PRICED. This is the choice commit 55519d503's card says is being made by the // suite's runtime rather than by a person. Estimated wall uses this run's own // measured effective parallelism (2043.29s of per-file work over a 1041s wall // = 1.96): @@ -482,7 +482,7 @@ // population: it did not see the swap. // // What keeps those four honest is a declaration, not this gate. `turbo.json` -// declares `@objectstack/cli#test` `dependsOn: ["build"]` (#11268), so CI +// declares `@objectstack/cli#test` `dependsOn: ["build"]` (commit 918988ad3), so CI // builds `dist/` before the suite runs, and each of the four refuses an unbuilt // tree in a sentence of its own. The residual — a `dist/` merely BEHIND its // source — is real, and those files state it. An in-process import has no such @@ -493,7 +493,7 @@ // Before adding a `test` block for speed, re-measure: if `tests` is still the // dominant term, the block is not the lever. // -// ## THE TWO TIERS (#13504, #14554) — `unit` and `integration`, DERIVED population +// ## THE TWO TIERS (commit 44813ba57, #14554) — `unit` and `integration`, DERIVED population // // Maintainer ruling (2026-09-01): split this suite into two NAMED tiers — a // unit-fast tier that is fast to run locally and does not monopolise the shared @@ -505,7 +505,7 @@ // pnpm --filter @objectstack/cli exec vitest run --project integration # the real thing, on demand // // ⛔ `--project` NARROWS THE RUN, AND A PATH YOU NAME OUTSIDE THE SELECTED TIER -// IS DISCARDED RATHER THAN RUN (#17853). The split itself skips, weakens, +// IS DISCARDED RATHER THAN RUN (commit 08f5f0e5a). The split itself skips, weakens, // deletes and doubles nothing — `vitest run` with no `--project` runs every // project, so the POPULATION is intact. ⛔ That sentence is about the // population and says nothing whatever about one narrowed invocation, and this @@ -538,7 +538,7 @@ // statement about this package rather than about a subset you chose. // // ⛔ THE PREDICATE IS WHAT A FILE DOES, NOT WHAT IT IS CALLED. The ACCEPT on -// #13504 fixed that the `*.e2e.test.ts` name disagrees with behaviour, so a +// commit 44813ba57's card fixed that the `*.e2e.test.ts` name disagrees with behaviour, so a // tier keyed on the name routes coverage to the wrong place. The predicate is // stated ONCE, in `vitest-tiers.ts` — SPAWN (the real CLI, or this package's // source in a cold tsx child) or KERNEL (a real kernel or driver booted in @@ -659,7 +659,7 @@ import { integrationTestFiles, unitTestFiles } from './vitest-tiers.js'; export const INTEGRATION_FILES = integrationTestFiles(__dirname); export const UNIT_FILES = unitTestFiles(__dirname, INTEGRATION_FILES); -// #17853 / #17978 — say so when a path named on the command line will run no +// Commit 08f5f0e5a / #17978 — say so when a path named on the command line will run no // tests. It is invoked HERE, at config load, and ⛔ deliberately NOT as a // `test.reporters` entry: naming that option replaces vitest's own reporter // defaulting instead of extending it, which measurably changes a healthy run's @@ -674,7 +674,7 @@ export const UNIT_FILES = unitTestFiles(__dirname, INTEGRATION_FILES); // // ⭐ This package is the ONE of the eight that needs no walked population: both // of its projects take an exact-path `include`, as a by-product of the tier walk -// it already performs for unrelated reasons (#13504 / #14554). So it hands the +// it already performs for unrelated reasons (commit 44813ba57 / #14554). So it hands the // two arrays over directly and never calls `exactAndGlobPopulations`. That // asymmetry is exactly why a port of this package's former local copy could not // serve the other seven — #17978 carries the measurement. @@ -828,7 +828,7 @@ export default defineConfig({ external: [/packages[\/]types[\/]dist/], }, }, - // The two tiers (#13504) — see the header section of the same name, and + // The two tiers (commit 44813ba57) — see the header section of the same name, and // "THE NIGHTLY TIERS" for the population both read. Both `extends: true` // so each project inherits the `resolve.alias` table and the // `server.deps.external` entry above; each repeats the console-intercept