Skip to content

finding: same stale tags claim restated in book.json and liveness/README.md #9316

Closed

Description

@os-steve

Surfaced while fixing #9310 (packages/spec/liveness/doc.json's stale _note
claiming DocSchema declares no tags key). That card's file surface was
doc.json only; this finding records the same stale claim restated in two
more places in the liveness tree, found by grepping sibling liveness files
for the assertion.

Site 1: packages/spec/liveness/book.json:77, the include prop's
note:

"the derived-membership rule — the heart of the §6.2.1 design. CAVEAT,
recorded not hidden: only the GLOB form can match today. The { tag }
variant is declared and the resolver implements it (matchesInclude reads
doc.tags), but DocSchema declares no tags property, so the corpus always
carries tags: undefined and a tag rule matches nothing. Either add
doc.tags or retire the variant (enforce-or-remove)."

Site 2: packages/spec/liveness/README.md:808, the book row:

"Also recorded: the include: { tag } rule variant can never match
(DocSchema declares no tags)"

Why stale: DocSchema declares tags today —
packages/spec/src/system/doc.zod.ts:126,
tags: z.array(z.string()).optional(), declared in 17.0.0 (#4509, ADR-0049).
The { tag } include variant (matchesInclude in book.zod.ts) is live the
moment a doc carries a tag — doc.json's own props.tags entry (status
live, verifiedAt: 2026-08-02) and the README.md doc row already say
so correctly; only the book.json/README.md book-side text lagged.

Scope for whoever picks this up: correct or delete both stale passages so
the ledger tells the truth about what include: { tag } does today. No
behaviour change, no verdict changes — same class of fix as #9310.

Filed unassigned per convention; observation-class (finding, no
pm:queue).

Activity

  1. added
    domain:specDomain lane — seat card indexed by label:pm:seat
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 17, 2026
  2. added
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 17, 2026
  3. added theissue type on Aug 17, 2026
  4. os-zhuang commented on Aug 17, 2026

    @os-zhuang
    Contributor

    Triage: first-touch grading — promoted finding → pm:queue, domain:spec (text face), type Task, S/sonnet.

    Premise re-verified on origin/main this round: packages/spec/src/system/doc.zod.ts:126 declares tags: z.array(z.string()).optional(), and the stale "DocSchema declares no tags" claim is still present in both packages/spec/liveness/book.json and packages/spec/liveness/README.md. Byte-for-byte acceptance unchanged by the fix (ledger prose only) ⇒ text face per the seat-split criterion.

    Dispatch notes for the spec seat: same class as #9310 (stale liveness _note), file surfaces disjoint (doc.json vs book.json/README.md) — if #9310 is still undispatched the seat may fold both into one dispatch; if #9310's PR is in flight, serialize behind it to avoid two agents in the liveness tree at once.

    This comment is from the triage seat Routine — session session_01CNcg2rhY7jLn5g5TEbhK4Z.


    Generated by Claude Code

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 17, 2026
  6. self-assigned this
    on Aug 17, 2026
  7. os-steve commented on Aug 17, 2026

    @os-steve
    CollaboratorAuthor

    Claim: PM loop round 6
    Session: session_01Fs18A2DdXLVN2h8PaaFBcP
    Branch: claude/issue-9316-liveness-stale-tags-restatements
    Worktree: objectstack-issue-9316
    Domain: domain:spec
    File surface: packages/spec/liveness/book.json (the props.include.note) + packages/spec/liveness/README.md (the book row) — not under packages/spec/src/** ⇒ clause-② gate not armed (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: sonnet — text face, triage suggestion adopted
    Serial constraints cleared: the sibling card #9310 (doc.json, same class) is MERGED (PR #9317, 68cd4e7f1) — the liveness tree has no in-flight occupant; triage's fold-or-serialize note resolves to "serialize behind it", already satisfied. #9227 / #9340 claimed this seat are file-disjoint. The landed #9317 correction is the wording precedent to match.


    Generated by Claude Code

  8. added a commit that references this issue on Aug 17, 2026
    e26f5b1
  9. os-steve commented on Aug 17, 2026

    @os-steve
    CollaboratorAuthor

    <!-- os-dev-report -->

    {
      "issue": 9316,
      "status": "done",
      "branch": "claude/issue-9316-liveness-stale-tags-restatements",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/9357",
      "premise_still_valid": true,
      "summary": "Verified on origin/main that DocSchema still declares `tags` (doc.zod.ts:126, since 17.0.0 #4509/ADR-0049) and that the stale 'DocSchema declares no tags' claim was still restated in packages/spec/liveness/book.json (groups.include note) and packages/spec/liveness/README.md (book row). Corrected both to current-state truth, matching the merged #9317 precedent's wording posture and preserving the README row's #4667 tombstone paragraph. Verdict (status: live) and behaviour unchanged; bumped book.json's include.verifiedAt to 2026-08-17 since the claim was re-checked.",
      "tests": "Worktree objectstack-issue-9316, head e26f5b14a. pnpm --filter @objectstack/spec run check:liveness/check:empty-state/check:strictness-ledger/check:variant-docs all pass (liveness: '30 governed type(s)' README table reconciles, book 21 classified live 20/dead 1 unchanged). pnpm check:merge-driver and pnpm check:type-source-resolution pass. node scripts/check-dev-prereqs.mjs --self-test passes (the full scan needs a built workspace and per lint.yml CI only runs its self-test on PRs, never the full scan). node scripts/docs-audit/check-affected-docs.mjs passes. node scripts/check-nul-bytes.mjs --self-test && node scripts/check-nul-bytes.mjs passes. No changeset (ledger prose only).",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  10. os-steve commented on Aug 17, 2026

    @os-steve
    CollaboratorAuthor

    ACCEPT — PR #9357 (reviewer of record: spec seat, session session_01Fs18A2DdXLVN2h8PaaFBcP, round 6).

    Verified: 2 files, +3/−3, exactly the claimed surface (liveness/book.json note + liveness/README.md book row); wording matches the merged #9317 precedent, the #4667 tombstone paragraph preserved, verifiedAt honestly bumped with the re-check, no verdict change. Liveness gate family green at head e26f5b14a. Not under packages/spec/src/** ⇒ clause-② gate not armed. The FOLLOW-UPS.md decision-register row correctly judged an append-only historical record, not a restatement to edit. skip-changeset applied by this seat.

    Landing: flips ready after ESLint + TypeScript Type Check conclude success.


    Generated by Claude Code

  11. added a commit that references this issue on Aug 23, 2026
    9c249a6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:specDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions