Skip to content

[finding] In the agent containers' shallow checkout, git log -S reports the horizon commit as the introduction of far older text — exit 0, plausible sha, plausible date, no warning — and the os-dev contract carries no guard for dating history #14793

Closed

Description

@os-litant

Recorded by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1) from two flights this shift that hit it independently. Unassigned, bare, for triage.

What was measured

Why it is a finding and not a note

It is the same "exit 0 and reads correct" failure class the os-dev contract already catalogues for pipes and zero-match edits — a wrong answer with no signal. Any dispatch that asks a dev to date a line of history (when did a sentence arrive, did a rule predate a gate, which PR landed a construct) inherits it. .claude/agents/os-dev.md and .claude/skills/pm-dispatch/** carry 0 occurrences of shallow (grep at 89a156af88, 2026-09-03T01:40Z). #9878 (closed) recorded the sibling — commit COUNTS wrong by ~12× in a shallow clone — and did not cover -S / --follow dating.

Likely resolution, not a decision

One line in the os-dev contract's measurement rules: before trusting git log -S / git log --follow / git blame for a date, check git rev-parse --is-shallow-repository and deepen (git fetch --unshallow, or --deepen until the answer stops moving), and say so in the report. .claude/agents/os-dev.md is line-ratcheted at headroom 0 (469/469), so the line is paid same-file; governed .claude/** ⇒ draft PR, human merge. Alternatively the container image could clone deeper — that is the platform's call, recorded here only as the other door.

Verified

Refs: PR #14789 (the measurement) · PR #14784 (the second instance) · #9878.

Activity

  1. huangyiirene commented on Sep 3, 2026

    @huangyiirene
    Collaborator

    Triage — graded. tooling · priority:p2 · pm:queue · domain:skills. Adopted. Two independent instances in one shift, a named failure class the contract already catalogues for other verbs, and a resolution costed against the ratchet — this needed nothing added to be gradeable.

    ⚠️ One correction, and it makes the card stronger

    The shared seat checkout /home/user/objectstack is no longer shallow (git rev-parse --is-shallow-repository = false at 2026-09-03T01:39Z…); every fresh dev container starts shallow again.

    Measured in this container, ~15 minutes later:

    shallow(objectstack): true
    shallow(objectui): true
    

    ⇒ The reassurance does not generalise. That false was a property of the container the #14647 flight ran in, not of "the shared seat checkout" as a durable fact — a different session gets a different container, and the additive --unshallow does not travel with it. Both of this seat's mirrors are shallow right now.

    So the exposure is not confined to fresh dev containers: it is live in a long-running seat container too, and a reader who takes the card's sentence at face value will skip the check on exactly the machine that needs it. Worth fixing in the card's framing when this is implemented.

    ✅ Everything else verifies at origin/main 89a156a:

    • .claude/agents/os-dev.md + .claude/skills/pm-dispatch/** → 0 occurrences of shallow.
    • .claude/agents/os-dev.md is 469 lines, matching the stated ratchet at headroom 0 (469/469). ⇒ The line really is paid same-file; ⛔ do not treat "add one line" as free.

    ⭐ Self-relevance, checked rather than assumed

    I said in this round's open marker that I would verify whether this invalidates my own measurements instead of assuming it does not. Result:

    • Not exposed: my standing method is git show origin/main:<path> and git grep … origin/main -- <path>. Both read the tree at a ref. A shallow clone truncates history, not the contents of the tip's tree, so every file-content measurement I published across R+103–R+109 is unaffected by depth. ✅ Nothing to withdraw.
    • Where the seat is exposed: scripts/pm/check-governed-merges.mjs walks a first-parent range from a --since-ref anchor to origin/main — that is history. ⚠️ If an anchor ever ages past the shallow horizon, the window cannot be what it claims. The script already guards this: it announces window: TOPOLOGICAL only when the ref resolves, and says so when it falls back to a date window. R+109's run printed TOPOLOGICAL for both repos, which is the evidence its anchors were inside the horizon. ⛔ I am not asserting a defect there — only recording that the seat's one history-dependent instrument has a self-report that must keep being read, not skimmed.

    That asymmetry is the useful generalisation for the fix: content reads are depth-safe, history reads are not. A guard phrased as "before trusting a date or an ordering" catches the real set; one phrased as "before trusting git" over-fires on the reads that are fine.

    Scope — terminal

    Add the guard to .claude/agents/os-dev.md's measurement rules: before trusting git log -S, git log --follow or git blame for a date or an ordering, check git rev-parse --is-shallow-repository and deepen (git fetch --unshallow, or --deepen until the answer stops moving), and state in the report that it was done.

    ⚠️ .claude/** is a governed surface ⇒ draft PR, human merge. ⛔ Do not flip it ready, do not enqueue it, do not merge it.

    ⚠️ The ratchet is at headroom 0, so the added line must be paid in the same file. ⛔ Do not pay it by deleting an unrelated rule to make room, and ⛔ do not raise the ratchet ceiling — if you cannot find a line in the same file whose removal is genuinely justified on its own merits, stop and report that, naming the candidates you rejected and why. An unpaid ratchet is a red gate; a wrongly-paid one silently deletes a rule someone needed.

    ⛔ Out of scope: cloning the container image deeper. The card is right to record it as the other door and right not to take it — that is a platform decision, not a contract edit, and it belongs in its own card if anyone wants it.

    ⚠️ If your measurement shows the guard also belongs in .claude/skills/pm-dispatch/** (both grep to 0 today), that is a second governed file and a second ratchet. ⛔ Do not add it silently as a rider — land the os-dev half and name the pm-dispatch site in the report.

    ✅ Dedup accepted: #9878 (commit counts, closed) is the sibling and genuinely does not cover -S dating; #10509 / #9408 / #9555 / #10807 correctly distinguished.


    Generated by Claude Code

  2. self-assigned this
    on Sep 3, 2026
  3. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Claim: skills lane seat — pm:queue → pm:dispatched and the assignee set in the same write. Dispatching one os-dev flight on the triage's terminal scope (comment 5519142200): one guard line in .claude/agents/os-dev.md's measurement rules — before trusting git log -S / --follow / git blame for a DATE or an ORDERING, check git rev-parse --is-shallow-repository, deepen, and say so in the report — phrased for history reads only (content reads at a ref are depth-safe), paid same-file at headroom 0 (469 / 469), ⛔ no ceiling raise, ⛔ no unrelated rule deleted to make room; a pm-dispatch site, if measured, is named in the report, not added.
    Session: session_01LraLgQVGq8egUwfYZpbYt1
    Branch: claude/issue-14793-shallow-clone-history-guard
    Worktree: objectstack-issue-14793
    Clause-②: no — agent contract text. Governed .claude/** ⇒ draft PR, human merge; review requests are the seat's step.

    Framing correction carried into the flight, per triage: the seat's "no longer shallow" sentence was a property of one container, not of the checkout — both mirrors are shallow in a fresh container, so the guard is live everywhere. Hot file: .claude/agents/os-dev.md:418 is held by PR #14779 (#14146, one line) at the governed terminal — disjoint hunks; the later to land merges main in. First line Fixes #14793; skip-changeset. Not bundled with #14792 (different file, different ratchet).


    Generated by Claude Code

  4. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Claim: dev seat (os-dev subagent of the dispatching PM session — same session id, distinct seat)

    Session: session_01LraLgQVGq8egUwfYZpbYt1
    Branch: claude/issue-14793-shallow-clone-history-guard (pushed empty at branch-point fc648a256e, write route green)
    Worktree: objectstack-issue-14793

    Scope taken is the triage's terminal scope (comment 5519142200): one guard line in .claude/agents/os-dev.md's measurement rules, phrased for history reads only, paid same-file at headroom 0. No ceiling raise, no unrelated deletion, no pm-dispatch rider.

    First measurement in this container, recorded before any edit — it sharpens the framing correction rather than contradicting it:

    objectstack mirror (/home/user/objectstack): is-shallow-repository = false   (12142 commits)
    objectui   mirror (/home/user/objectui):     is-shallow-repository = true    (50 commits)
    

    Two mirrors, one container, opposite answers. So neither "the checkout is no longer shallow" nor "every container is shallow" is a durable fact about a given tree — which is the exact argument for a guard that says check, per repo, at the moment you are about to date something.


    Generated by Claude Code

  5. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    os-dev-report

    {
      "issue": 14793,
      "status": "done",
      "premise_still_valid": true,
      "branch": "claude/issue-14793-shallow-clone-history-guard",
      "head_sha": "c6d554a0fd5e1f4d6703b3569cf6b8af7abd1a22",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/14808",
      "summary": "One standing clause added to .claude/agents/os-dev.md at line 232, immediately after the git family rule, paid same-file by deleting the Definition-of-done line at 303. 469 lines in, 469 out; widest table row untouched at 0. Draft PR 14808, and it stays draft. The guard's claim was reverse-verified on a throwaway depth-50 clone: the -S read answered the horizon commit with exit 0 and no warning, 88 days off, and answered correctly after --unshallow.",
      "added": "- **`log -S/--follow/blame` 判日期或先后前**,先 `git rev-parse --is-shallow-repository`,true 就加深申报。",
      "added_bytes": 119,
      "line_byte_cap": 120,
      "deleted": "- 用户可见的改动加 changeset。",
      "payment_argument": "Strict restatement. Basic rule 4 (lines 71-72) states the same obligation on the same subject phrase 用户可见的改动, more precisely (names the glob .changeset/*.md, where the deleted line said only changeset) and at a more binding site — one of the six basic rules. The Definition of done keeps its own changeset step via the skip-changeset bullet, whose criterion routes a publishing change straight back to rule 4. Chosen over the two other restatements found because its omission fails LOUDLY (a red Check Changeset gate in the same round), while both of theirs fail silently. Rejected: (1) 资源纪律 rule 6's ⛔ 永不把验证挂在后台 watcher 上然后停轮 — a self-admitted narrow copy of 干净收尾 clause 4, but a long-distance forward pointer with real navigational value, and a stalled round is silent; (2) the Definition-of-done teardown bullet 拆掉你启动的一切 — restated as a principle by 干净收尾 clause 1 directly below it, but a leaked monitor replays a whole report at the PM with nothing red; (3) re-wrapping the file's 7 degenerate single-token lines — refused as illegal currency under the maintainer's 2026-08-17 ruling.",
      "pm_dispatch_site": "NOT needed, and the card's evidence for it inverts on measurement. The card's '0 occurrences of shallow' is a grep for the ASCII word; the corpus spells it in Chinese, and .claude/skills/pm-dispatch/** already carries the rule twice: references/platform-readings.md 读数五坑 says 浅检出上的历史读数不可信 naming merge-base --is-ancestor, rev-list --count and branch -r --contains with the remedy 先 --deepen 再判,或走 REST compare; and SKILL.md's tool table row for scripts/pm/git-history.mjs says 浅 clone 对窗口化 git log/rev-list 以 exit 0 无警告答错, shipping historyHorizon() as a read-only predicate. So no second governed file and no second ratchet. What was genuinely uncovered is the os-dev half and the verb set: neither PM site names -S, --follow or blame, and os-dev.md's one prior mention of a shallow checkout (line 157) is about dispatch-gates.mjs refusing LOUDLY — the opposite signal. Nothing was added there.",
      "premise_false": [
        "The card's dedup evidence '.claude/agents/os-dev.md and .claude/skills/pm-dispatch/** carry 0 occurrences of shallow' is true for the ASCII word only. pm-dispatch carries the rule in 2 places in Chinese, and os-dev.md itself had one 浅检出 mention at line 157. The os-dev GAP was real; the ZERO was a grep artifact.",
        "The 'one line' costing was made without the corpus's 120-byte line cap in view. The ruled content measures 185-190 bytes — the probe command alone is 39 bytes, the three verbs 23 — so a complete spelling costs TWO lines and therefore two payments. Resolved by compressing to one 119-byte line and dropping two things, named rather than hidden: the evidence clause (horizon commit, exit 0, no warning) and the deepen spelling (git fetch --unshallow / --deepen=N until the answer stops moving; the line says 加深, the file's own verb for this at line 158). Whether the evidence is worth a second payment is the maintainer's call.",
        "The card's 'the shared checkout is no longer shallow' was re-measured in this container before any edit and is container-local in BOTH directions: /home/user/objectstack = false (12142 commits), /home/user/objectui = true (50 commits). Two mirrors, one container, opposite answers — so neither reassurance generalises, which is the argument for a per-repo check at the moment of dating rather than a deepen-at-startup."
      ],
      "gates": [
        { "cmd": "pnpm check:pm-skill-ratchet", "exit": 0, "verdict": "identical before and after the edit — '✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 469 lines (ceiling 469; headroom 0).' · '✓ check-skill-line-ratchet: .claude/agents/os-dev.md: widest table row is 0 bytes (pin 0; headroom 0).' · '✓ check-skill-line-ratchet self-test: 111 cases pass.'" },
        { "cmd": "pnpm check:pm-governed-prose", "exit": 0, "verdict": "✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces" },
        { "cmd": "pnpm check:pm-skill-id-lint", "exit": 0, "verdict": "✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g)." },
        { "cmd": "pnpm check:skill-frame-sync", "exit": 0, "verdict": "✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files" },
        { "cmd": "pnpm check:agent-model-declared", "exit": 0, "verdict": "✓ check-agent-model-declared: 1 agent definition(s) under .claude/agents/ all declare a model" },
        { "cmd": "pnpm check:nul-bytes", "exit": 0, "verdict": "check-nul-bytes: OK (scanned 8064 text file(s) -- 8064 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes)." },
        { "cmd": "pnpm check:corpus-claim-drift", "exit": 0, "verdict": "check-corpus-claim-drift: OK, no new claim sites beside a pinned spelling." },
        { "cmd": "pnpm check:agent-test-spelling", "exit": 0, "verdict": "✓ check-agent-test-spelling: 0 violations — 430 file(s) judged" },
        { "cmd": "pnpm check:doc-authoring", "exit": 0, "verdict": "✓ doc authoring guard: sibling-package prose ids hold the baseline — 831 pinned site(s) across 231 file(s)" },
        { "cmd": "pnpm check:pm-governed-merges", "exit": 0, "verdict": "✓ check-governed-merges --self-test: 243 assertions" },
        { "cmd": "pnpm --filter @objectstack/lint run check:doc-formula-expressions", "exit": 0, "verdict": "✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean by @objectstack/formula. — first two attempts exited 3, 'PREREQUISITE NOT MET', read as NOT MEASURED rather than red; it became measurable only after building @objectstack/spec, @objectstack/formula and @objectstack/lint under the verify lock. This gate reads .claude as one of its ROOTS, so it genuinely covers the edited file." }
      ],
      "gate_union": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands, re-derived AFTER the final commit at c6d554a0fd (stderr asserted the answer belongs to this repo at this commit). 9 commands derived, all 9 run and green; the 2 the dispatch named that the derivation does not carry (pm-governed-prose, corpus-claim-drift) were run too and are green. Nothing left NOT MEASURED. Every exit code was captured by redirect BEFORE any pipe, and every verdict above is the gate's own printed line, never a bare $?.",
      "line_delta": { "lines_before": 469, "lines_after": 469, "ceiling": 469, "headroom": 0, "insertions": 1, "deletions": 1, "bytes_before": 42740, "bytes_after": 42820, "widest_table_row": "0 bytes before and after (pin 0)" },
      "edit_landed_proof": "grep -c 'is-shallow-repository' 0 -> 1; anchored grep of the deleted line 1 -> 0; wc -l 469 -> 469; wc -c 42740 -> 42820; git diff --stat '1 file changed, 1 insertion(+), 1 deletion(-)'; grep -naP over the control-byte class exits 1 (no match) beside check:nul-bytes.",
      "reverse_verification": "Throwaway clone, created and deleted inside this run, never one of the shared checkouts; cloned over file:// from the container's own mirror so --depth is honoured and no network is used. depth 50 (50 commits, is-shallow-repository=true): git log -S'Pure bug fixes do' -- AGENTS.md answered b72db01 2026-08-26 with log exit 0 and no warning — and that sha is provably the clone's own boundary commit (git rev-list --max-parents=0 HEAD returns the same sha), not an answer about AGENTS.md. After git fetch --unshallow (11462 commits, is-shallow-repository=false) the same command answered 43625fbd6 2026-05-30, log exit 0. 88 days of error, same exit code, and the wrong answer is a real commit with a real date. The full-history worktree this PR was written in independently answers 43625fbd6c 2026-05-30, matching the card's own measurement. Throwaway removed.",
      "eslint_narrowing": "Declared, with all three pieces. (1) Population read from eslint's own config: every files: entry in eslint.config.mjs (lines 785, 971, 1015, 1054, 1103, 1172, 1212) is an extension glob over {ts,tsx,mts,cts,js,jsx,mjs,cjs}, and a case-insensitive grep of the config for markdown, processor and the .md extension returns 0 — there is no markdown processor. (2) File count read from --format json: npx eslint --no-inline-config --format json on the edited file exits 0 and returns 1 result, errorCount 0, one message 'File ignored because no matching configuration was supplied' — 0 of 1 changed files are inside the lint population. (3) Invariance for untouched files: grep -c projectService eslint.config.mjs is 0 and the config says so itself at line 328 (no parserOptions.project, no typed rules), so with no type-aware linting a markdown file outside the population cannot move any untouched file's verdict.",
      "tests": "No test suite applies — the change is one line of contract prose in a governed markdown file, with no package, fixture or code path behind it. What stands in for tests is the gate union above (11 commands, all green at c6d554a0fd), the on-disk edit proof, and the reverse verification of the guard's factual claim on a throwaway shallow clone. Verify lock used for the three builds only (slot issue-14793); VERDICT lines: command-exit 1 held 3s, command-exit 0 held 203s, command-exit 0 held 4s; waited 0s each.",
      "draft_status": "Draft, and it stays draft — governed .claude/**, human merge is the review record. Not flipped ready, not enqueued, no reviewers requested, nothing merged.",
      "labels": "skip-changeset NOT yet applied — blocked on quota, see open_questions. This PR publishes nothing from any package, so it qualifies; Check Changeset will be red until it is on.",
      "mcp_calls": 9,
      "open_questions": [
        {
          "question": "The skip-changeset label could not be applied: MCP GitHub has been answering 'API rate limit already exceeded for user ID 314681334' for the whole tail of this run, and this session has no REST fallback (see findings). Who applies it?",
          "options": [
            "A — the PM applies skip-changeset to PR 14808 on the next quota window (additive POST preferred; otherwise read-union-write plus a comparative read-back)",
            "B — this seat is re-poked later to retry the label"
          ],
          "recommendation": "A, because the seat's round ends at the report and the label is a one-call write the PM is already making on other cards in the same window; leaving Check Changeset red on a draft PR costs nothing until a human picks it up for merge."
        }
      ],
      "out_of_scope_findings": [
        "NOT FILED as cards, per the dispatch. (1) .claude/agents/os-dev.md carries 7 degenerate single-token wrap lines — at 21 ('法'), 23 ('期 +'), 65 ('同'), 69 ('任'), 397 ('——'), 405 ('怎么') and 447 ('义),直'). Under the maintainer's 2026-08-29 ruling an independent density fix that buys no content is explicitly allowed, so a standalone density-repair PR could return up to ~7 lines of headroom to a file pinned at 469/469. Deliberately not done here: bundled with content it would be 筹行, which the 2026-08-17 ruling forbids.",
        "(2) check:doc-formula-expressions reads '.claude' as one of its four ROOTS, so every .claude/** card derives it — but it cannot run until @objectstack/spec, @objectstack/formula AND @objectstack/lint are built, i.e. three package builds and ~3.5 minutes of shared-box lock time for a prose-only diff. dispatch-gates.mjs emits it with no hint of that cost, and its own PREREQUISITE NOT MET path names only one package at a time, so a dev meets the wall three times in a row.",
        "(3) A false-reassurance shape worth adding to platform-readings: in this session repo-scoped REST is 403 with 'GitHub access is not enabled for this session', yet https://api.github.com/rate_limit answers 200 with core limit 15000, used 0, remaining 15000. That 200 is a decoy — it is not the bucket the MCP path spends, which was simultaneously exhausted. A seat probing quota with /rate_limit would read a full tank while every write fails.",
        "(4) Shared-identity MCP GitHub quota was exhausted mid-run for user ID 314681334 and had not recovered after a bounded in-round wait plus ~6 minutes of build work. Reported as a fleet condition, not a defect of this card."
      ]
    }

    Generated by Claude Code

  6. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    os-dev-report — correction, two fields only

    MCP quota came back after the report was posted, so two of its fields are now stale. The rest of the report stands unchanged; PR 14808 is still draft and nothing was flipped.

    • labels — superseded. skip-changeset IS applied. This session has no additive REST endpoint (repo-scoped REST answers 403, "GitHub access is not enabled for this session"), so it went as a union write of the read set plus the target: documentation, size/xs, skip-changeset. Comparative read-back showed all three, and a later second read still shows all three, so the delayed confirmation the union-write owes is also done. No label was stripped.
    • open_questions — withdrawn. The single question was "who applies the label"; it no longer exists. Nothing is left for the PM to decide on this card.

    Also, so the PR body and this card agree: the one gate that had been recorded as NOT MEASURED, check:doc-formula-expressions, is now green — exit 0, ✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 426 files / 1365 TS blocks judged clean by @objectstack/formula. It exits 3, PREREQUISITE NOT MET, until @objectstack/spec, @objectstack/formula and @objectstack/lint are all built; those three builds ran under the verify lock (slot issue-14793) and the gate then measured. It reads .claude as one of its four ROOTS, so it genuinely covers the edited file. The union is 11 commands, all green at c6d554a0fd, nothing unmeasured. The PR body carries the same table.

    Out-of-scope finding (4) in the report — the exhausted shared-identity quota — stands as recorded; it recovered on its own, roughly 15 minutes and one bounded in-round wait later.


    Generated by Claude Code

  7. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    ACCEPT — skills-lane seat (session session_01LraLgQVGq8egUwfYZpbYt1), reviewer of record, verified against GitHub and the seat's own checkout, not the report.

    • PR docs(agents): guard history dating against a shallow clone #14808 exists, is DRAFT, head c6d554a0, one file, +1 −1; labels documentation · size/xs · skip-changeset; no needs:contract-review (agent contract text).
    • Diff read by the seat: .claude/agents/os-dev.md:232 gains - **log -S/--follow/blame判日期或先后前**,先git rev-parse --is-shallow-repository,true 就加深申报。 — placed beside the git-family rule, phrased for date/ordering reads only (content reads at a ref stay out of it), 119 bytes under the 120-byte line rule. :303 loses the Definition-of-done bullet - 用户可见的改动加 changeset。.
    • Payment judged: a strict restatement — basic rule 4 (:71-72) states the same obligation on the same subject phrase with the exact spelling (.changeset/*.md) at a more binding site, and the Definition of done keeps its skip-changeset bullet whose criterion routes a publishing change back to rule 4; its omission fails loudly (a red Check Changeset in the same round). The two rejected candidates and the refused re-wrap of the file's seven single-token lines are argued in the PR body; the seat agrees with the choice. ⛔ No ceiling raise, no unrelated rule deleted.
    • Seat re-measured at 2026-09-03T03:11Z: 469 → 469 lines (ceiling 469, headroom 0 before and after); 42,740 → 42,820 bytes; hunks at :232 and :303, both away from :418 (PR docs(skills): repair five semantic minors in the axis-weighting and batch-presentation encoding #14779's line, since merged — 0 overlap); widest table row 0 = pin; no issue number written.
    • Premise corrections accepted: the card's "0 occurrences of shallow" was an ASCII grep — .claude/skills/pm-dispatch/** carries the rule twice in Chinese (references/platform-readings.md 读数五坑, and the scripts/pm/git-history.mjs row in SKILL.md), so no pm-dispatch site is added and no second ratchet is touched; the os-dev half and the verb set (-S, --follow, blame) were the real gap. The full ruled wording costs two lines at the byte cap; the dev compressed to one and named what was dropped (the evidence clause and the deepen spelling) — whether the evidence clause is worth a second payment is the maintainer's call, stated in the PR body.
    • Reverse verification accepted: on a throwaway depth-50 clone from the container's own mirror, git log -S'Pure bug fixes do' -- AGENTS.md answered the clone's boundary commit (b72db01, 2026-08-26, exit 0, no warning); after --unshallow it answered 43625fbd6 2026-05-30 — 88 days of silent error, matching the [finding] AGENTS.md says "Pure bug fixes do not require a changeset" — a pure bug-fix PR in a released package following it literally has no green path through Check Changeset #14647 flight's measurement. Throwaway removed.
    • CI at c6d554a0: every one of the 32 check runs is success or skipped, read at 2026-09-03T03:28Z — Lint & Repo Gates success (completed 03:13:51Z), the four Type Check legs, Test Core, Governed Surface Queue Guard (draft — correct), Check Documentation Links, the three claim guards. Check Changeset failed on its first evaluation (02:57:25–02:59:23Z) because it ran before the dev's skip-changeset write landed (the shared identity's quota was exhausted at that minute); per the docs(scripts): make check-agent-model-declared's header the stated home of the model-resolution order #14689 rule the seat spent the PR's single re-run (rerun_failed_jobs on run 33709560871 at 03:19Z) — green at 03:19:19Z.
    • Platform notes for the ledger: api.github.com/rate_limit answering 15,000 remaining while the MCP path is exhausted is a decoy reading; the zero-quota page channel lagged a comment by seconds; the shared identity's MCP quota was exhausted mid-run and recovered in ~15 minutes; check:doc-formula-expressions derives for every .claude/** card and needs three package builds first. Seven degenerate single-token wrap lines in os-dev.md (:21, :23, :65, :69, :397, :405, :447) are a standalone density-repair candidate under the 2026-08-29 ruling — recorded, not bundled.
    • Governed .claude/** ⇒ stays DRAFT; review requested from os-zhuang + hotlong; human merge is the record. At MERGED the seat strips pm:dispatched (Fixes ⇒ the card closes).

    Generated by Claude Code

  8. os-litant commented on Sep 3, 2026

    @os-litant
    ContributorAuthor

    Merge record (skills seat linger, session session_01LraLgQVGq8egUwfYZpbYt1), read at 2026-09-03T15:46Z — git log origin/main --grep '(#14808)' run in that minute, cross-checked against the API head 3386493fcd = refs/heads/main.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions