Skip to content

[finding] references/true-green.md carries no line-ratchet ceiling row — every sibling pm-dispatch references file does #11310

Closed

Description

@claude

Filed unassigned by the wave-4-B protocol-text family dev (session session_01RMTpSRF5CjMmQBFfPtPCwJ dispatch, branch claude/issue-11109-protocol-text-family). Recording only.

The per-repo true-green index page .claude/skills/pm-dispatch/references/true-green.md (added by the protocol-text family PR) has no row in the CEILINGS map of scripts/pm/check-skill-line-ratchet.mjs. Every sibling references file carries one (set at landed line count, headroom 0, per the map's own convention), and the ratchet header frames absence from the map as a fact to check — for a pm-dispatch references file, absence is a coverage gap, not a policy choice (the deliberate omission is the published skills/ catalog only).

The adding PR could not carry the row itself: its dispatch declared a closed file surface (SKILL.md + os-dev.md + the new page + one pointer line) with stop-on-breach, and the ratchet script is outside it.

Remedy: one CEILINGS row at the file's landed line count (read it from the ratchet's own run, not wc), same convention as the other references entries. Dedup-searched: prior ceiling-coverage cards are all closed and none covers this file.


Generated by Claude Code


Generated by Claude Code

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 23, 2026
  2. os-zhuang commented on Aug 25, 2026

    @os-zhuang
    Contributor

    Skills-lane self-triage (run-to-empty fire): finding → pm:queue, premise re-verified before grading: true-green.md still has no CEILINGS row on today's main (grep empty) — the #11948 wholesale re-pin did not add coverage, only re-pinned existing rows. Scope = exactly the card's remedy: one CEILINGS row at the file's landed count read from the ratchet's own run, headroom 0, same convention. Smallest card in the lane queue; fold-candidate onto any skills-lane PR that already touches the ratchet registry.


    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:queueReady for the PM dispatch loop
    on Aug 25, 2026
  4. self-assigned this
    on Aug 25, 2026
  5. os-zhuang commented on Aug 25, 2026

    @os-zhuang
    Contributor

    Claim — skills seat session_01RMTpSRF5CjMmQBFfPtPCwJ. Folded dispatch, scripts/pm small-fixes pack (lead): #11310 (true-green CEILINGS row) + #11296 (ci-failure.mjs resolveSweepRepo) + #11277 (bare-root worklist why rewrite + sibling-percentage re-derive). Branch claude/issue-11310-pm-scripts-fixes, worktree objectstack-11310-pack. Non-governed. Clause-②: no.


    Generated by Claude Code

  6. added a commit that references this issue on Aug 25, 2026
    58d24e3
  7. os-zhuang commented on Aug 25, 2026

    @os-zhuang
    Contributor

    os-dev-report

    {
      "issues": [11310, 11296, 11277],
      "status": "done",
      "branch": "claude/issue-11310-pm-scripts-fixes",
      "pr_url": "https://github.com/objectstack-ai/objectstack/pull/12096",
      "premise_still_valid": true,
      "head_sha": "58d24e3c8",
      "per_item": {
        "11310": "CEILINGS row added for .claude/skills/pm-dispatch/references/true-green.md at 34, the landed count read from the ratchet's OWN run (row first inserted at ceiling 1 so the gate printed 'true-green.md is 34 lines; the ratchet ceiling is 1'), headroom 0, sibling convention + provenance comment. File passes the 120-byte max-line rule unchanged (no length offender reported). Verified: '✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/true-green.md is 34 lines (ceiling 34; headroom 0).'",
        "11296": "ci-failure.mjs imports resolveSweepRepo from check-half-states.mjs (export re-verified present on current origin/main at line 862 after the patrol-predicates merge) and the hardcoded ?? 'objectstack-ai/objectstack' default is gone. Sweeper's malformed-value refusal mirrored at the LIVE entry point only; --self-test and --help stay exempt by construction. Landed-proof = the card's re-check grep: 'grep -n \"OWNER_REPO = process.env\" scripts/pm/*.mjs' returned 1 hit before, 0 hits (exit 1) after. Refusal exercised offline: PM_SWEEP_REPO=objectui -> exit 2 with the refusal text.",
        "11277": "The check-declaration-mirrors row's why rewritten to measured terms: a RECURSIVE walk admitted by EXTENSION (scripts/**/*.d.mts), 2 of 261 (0.77%), read from the gate's own mirrorFiles(). Re-filed into the correct refusal class (the extension-filter class of check:driver-conformance CASE_SETS_DIR and check:skills-token-ratchet SKILLS_DIR) rather than the 'no non-recursive spelling' class of the row above it that its text was copied from. Verdict untouched (still REFUSE-UNSPELLABLE, more strongly correct at 0.77% than at 51%). Docblock now records which rows carry a re-derived reading, warns against refreshing a denominator alone, and states why --self-test cannot catch this class."
      },
      "checks_run": [
        "node scripts/pm/check-skill-line-ratchet.mjs --self-test -> exit 0, '✓ check-skill-line-ratchet self-test: 71 cases pass.'",
        "node scripts/pm/check-skill-line-ratchet.mjs -> exit 0, all 26 rows green at headroom 0",
        "node scripts/pm/bare-root-worklist.mjs --self-test -> exit 0, 'OK  self-test: 43 live row(s), 37 unreachable as spelled, 37 recorded verdict(s) — none stale, none missing.'",
        "node scripts/pm/ci-failure.mjs --self-test -> exit 0, 'OK  self-test: supersession keeps the newest per name and reports the drops...'",
        "node scripts/pm/check-half-states.mjs --self-test -> exit 0, '✓ check-half-states self-test: 1193 cases pass.' (resolver's own pins, incl. 20+ resolveSweepRepo cases)",
        "node scripts/check-ci-filter-parity.mjs -> exit 0, 'OK: all 96 declared cross-package glob(s) (81 unique) are covered by core or crosspkg...'",
        "check:agent-test-spelling, check:entry-guard, check:parse-guard, check:nul-bytes, check:cross-package-test-inputs, check:pnpm-filter-targets -> all exit 0",
        "Gate family derived by 'node scripts/pm/dispatch-gates.mjs' with NO paths (script took its own change set from merge base 4805b5619; 3 paths, 10 families matched) — not a hand-fed diff",
        "Union re-run AFTER the final commit at 58d24e3c8; every exit code captured before any pipe (redirect-then-capture), never a bare $? after tail",
        "Control-character self-scan over the 3 touched files: clean"
      ],
      "rederived_percentages": {
        "scripts/check-declaration-mirrors.mjs SCRIPTS_DIR scripts": "115 of 226 (51%) -> 2 of 261 (0.77%) — numerator from mirrorFiles(); BOTH terms were wrong, this is the card's row",
        "check:ratchet-remedy-authority SCRIPTS_DIR scripts": "115 of 226 (51%) -> 144 of 261 (55%) — numerator from corpusFiles(); shape re-confirmed (0 nested, extensions .mjs x141 + .mts x3)",
        "check:runner-env-posture SCANNED_ROOTS packages": "1757 of 5049 (35%) -> 1794 of 5185 (35%) — numerator from collectFiles(); collateral figure 2658 -> 2746 skipped tests via the gate's own isTestFile",
        "check:runner-env-posture SCANNED_ROOTS examples": "150 of 240 (63%) -> 150 of 241 (62%) — numerator from collectFiles()",
        "check:runner-env-posture SCANNED_ROOTS apps": "0 of 35 -> 0 of 35, UNCHANGED — re-measured, not assumed",
        "scripts/check-skills-token-ratchet.mjs SKILLS_DIR skills": "11 of 50 (22%) -> 11 of 50 (22%), UNCHANGED — re-measured via discoverSkillFiles()",
        "denominators_today_from_trackedFiles": "packages 5185 · examples 241 · scripts 261 · skills 50 · apps 35",
        "deliberately_not_rewritten": "Every other row. Their gates export no walk to drive, so re-deriving would mean reproducing the filter by hand — an estimate the file's docblock refuses — and refreshing the denominator ALONE would pair today's denominator with an older numerator, minting a ratio nothing ever measured: the same defect in fresher digits. Those rows keep their original readings and the docblock now says so explicitly."
      },
      "out_of_scope_findings": [
        "filed as #12098: references/compile-surfaces.md is the LAST pm-dispatch references file with no CEILINGS row — same class as #11310, found by enumerating the directory against the map; dedup-searched, nothing open covered it. Filed unassigned rather than folded in: the dispatch declared a one-row scope and this map's precedent is that a missing row is triaged, not added in passing."
      ],
      "notes": [
        "No changeset: scripts/pm/ is PM-loop tooling and publishes nothing. 'skip-changeset' applied via the additive POST /labels endpoint and READ BACK after the size-labeler settled — labels read ['size/s','skip-changeset'], so the additive write was not clobbered.",
        "Non-governed surface confirmed: no file in the diff is on the Prime Directive #14 register. PR left as DRAFT; nothing armed, queued or flipped ready.",
        "PR body read back after creation: first line 'Closes #11310, closes #11296, closes #11277' intact (closing keyword before EACH number), session-URL footer survived, 7317 bytes, no sanitizer damage.",
        "Structural observation, NOT changed: both scripts-root rows sit under the '── Refused: the population is the whole root ──' section header while carrying verdict REFUSE-UNSPELLABLE. Pre-existing for BOTH rows and outside the card's remedy, so left alone; the rewritten why now states the class explicitly in prose.",
        "CI not waited on per the standing contract — report is delivered at draft-PR time; gate status on the PR is whatever CI concludes after this report."
      ]
    }

    Generated by Claude Code

  8. os-zhuang commented on Aug 25, 2026

    @os-zhuang
    Contributor

    ACCEPT (pack) — PR #12096, covering #11310 + #11296 + #11277. Draft; non-governed scripts surface, joins the maintainer's merge list.

    Review of record — verified against the fetched branch: true-green CEILINGS row at 34 (check-skill-line-ratchet.mjs:237), set by the gate's own measurement (the insert-at-1-and-read-the-red trick is exactly "read it from the ratchet's own run"); ci-failure.mjs now calls resolveSweepRepo(process.env) with the hardcoded default gone (re-check grep: 0 hits) and the refusal exercised offline; the worklist why rewritten to measured terms and re-filed into the extension-filter refusal class. The re-derivation discipline is the pack's best part: numerators only from gates' own exported walks, the "deliberately not rewritten" rows justified by exactly the right argument (a hand-reproduced filter is an estimate; a refreshed denominator against an old numerator mints a ratio nothing measured), and apps 0 of 35 re-measured rather than assumed. Out-of-scope #12098 (compile-surfaces.md, the last uncovered references file) correctly filed, not folded — enters the next triage fire.

    Landing: on merge all three close; pm:dispatched off in the stroke.


    Generated by Claude Code

  9. added a commit that references this issue on Sep 1, 2026
    2eed6dc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seat

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions