Skip to content

fix(spec): repoint the agent, skill and action liveness citations at the real cloud path - #13309

Merged
os-project-manager merged 2 commits into
mainfrom
claude/issue-13272-ledger-stale-path
Aug 30, 2026
Merged

fix(spec): repoint the agent, skill and action liveness citations at the real cloud path#13309
os-project-manager merged 2 commits into
mainfrom
claude/issue-13272-ledger-stale-path

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Part of #13272.

Deliberately Part of rather than a closing keyword: this PR lands the half that
recorded evidence can justify, and the card's re-verification half is still open.
See "Scope boundary" below.

What was wrong

Twenty-two evidence citations across three liveness ledgers named
packages/services/service-ai/..., a path that exists in neither repository:

ledger citations _note repeated the falsified sentence
packages/spec/liveness/agent.json 11 yes
packages/spec/liveness/skill.json 8 yes
packages/spec/liveness/action.json 3 yes

Both halves of the recorded claim were false, each in its own direction:

  1. The framework tree is absent, not stale. Every _note called the
    framework's own service-ai tree "a stale build artifact with no src/".
    Measured in this checkout: git ls-files | grep -ic service-ai returns 0,
    and packages/services/ holds every sibling service except service-ai.
    There is no artifact to be stale.
  2. The prefix was wrong for cloud too. Cloud's real layout, measured at
    cloud@15f55df and recorded on [worklist] Re-close the tool.json liveness ledger — every citation points into the cloud runtime's service-ai, which this repo's checkout does not contain #13042, is packages/service-ai/... — never
    packages/services/service-ai/....

Why they sat green, and why the repair is not a plain re-spelling

FOREIGN_PATH_PREFIXES in packages/spec/scripts/liveness/evidence.mts lists
the stale spelling, so those citations were silently classified foreign and
never resolved. They did not survive scrutiny — they were exempt from it.

The real cloud path is repo-rooted in shape and is not in that list, so a
naive repoint resolves as LOCAL and fails CI. Every repointed citation therefore
carries the explicit cloud realm marker, which is the attribution
scanEvidence reads directly rather than a special case for one prefix.

Measured by ablation on this branch (fix committed first, mutation confirmed
on disk by anchored grep counts, restored to byte-identity against the HEAD
blobs afterwards):

tree gate line exit
with the cloud markers 467 repo-local ... 467 resolved; 154 attributed to another repo 0
markers stripped (naive repoint) 489 repo-local ... 467 resolved, 22 MISSING; 132 attributed 1

132 + 22 = 154, so the markers move exactly the twenty-two citations into the
foreign bucket and nothing else. The change is gate-neutral against main
(both spellings classify foreign) while removing a provably wrong path.

The constant is deliberately left untouched, per the card and its triage: adding
the real path to it would let an unmarked citation pass silently, trading one
unfalsifiable spelling for another.

Scope boundary — recorded in each _note, not only here

This corrects the package root from the recorded measurement only. The cited
consumers were not re-read against a cloud checkout (this session has no
cloud access), so:

  • no verifiedAt is stamped, and
  • no #symbol anchor is added — the gate never resolves a foreign anchor, so an
    unverified one would re-create the very unfalsifiable pointer this repair
    removes.

No status verdict is altered. Re-verifying these 22 consumers against a live
cloud checkout remains the open half of #13272 and needs a container that has the
cloud repo.

Verification

Run at 7e1580b9 (the final commit on this branch):

  • check:liveness — exit 0; its own verdict line: "every 'live' / 'planned' /
    'experimental' entry's repo-local evidence path resolves".
  • check:empty-state, check:strictness-ledger, check:variant-docs (the rest
    of spec-liveness-check.yml) — exit 0.
  • packages/spec liveness suite — evidence.test.ts, check-liveness.test.ts,
    verification.test.ts, key-mention.test.ts: 4 files, 113 tests passed.
    These matter because evidence.test.ts walks the real ledger directory.
  • check:published-files, check:merge-driver, check:nul-bytes, and the
    changeset family — exit 0.
  • 27 of the 29 families derived by scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack are green. Two are NOT MEASURED by their own
    declaration, neither a red: check-half-states (needs a GitHub credential;
    PREREQUISITE NOT MET) and check-test-completeness (needs a saved test-run
    log, unreachable locally). Two more — check:dev-prereqs and
    check:dual-build-cjs-loads — are left to CI: both need a full build and this
    diff adds no build input, being JSON data plus a changeset.

The ledgers ship inside this package's npm tarball (liveness is named in
files), so this is a published-data change and carries a changeset, following
the precedent of the symbol-anchor batches.

Note for the reviewer, on the dispatch brief

The brief for this card stated that tool.json's five citations had been
repaired in PR #13302 and pointed there for the citation pattern. That is not
what PR #13302 contains — its diff is packages/spec/scripts/check-llms-txt.ts
plus scripts/pm/dispatch-gates.mjs (a watch-hint card). tool.json on
origin/main still carries all six occurrences of the stale prefix and is
untouched here, correctly, since it belongs to #13042. The repair pattern in this
PR was therefore derived from evidence.mts itself and from the ledger README's
realm-marker section, not from that PR.


Generated by Claude Code

claude added 2 commits August 30, 2026 02:32
…cloud path

The 22 citations in these three ledgers named packages/services/service-ai/...,
a path that exists in neither repository, and each _note repeated a claim that
is false in this checkout. Repointed onto cloud's real layout with an explicit
cloud realm marker, and repaired the note.
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

⚠️ 3 changed file(s) yielded no anchor (packages/spec/liveness/action.json, packages/spec/liveness/agent.json, packages/spec/liveness/skill.json), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files. Nothing else in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)).

What this run could not see
  • 3 changed file(s) yielded no anchor (packages/spec/liveness/action.json, packages/spec/liveness/agent.json, packages/spec/liveness/skill.json) — pages documenting those are invisible to this run
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 126 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 8f743076d47638fa29b86cafa772912b67a8d9b6packageMentionDocs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants