Skip to content

Wire check-harness-current.mjs --self-test (PR #18352) into lint.yml's shallow-history self-test collector — a self-test nobody runs is the injury check-self-test-wired exists for #18356

Description

@os-zhuang

Filed by the domain:skills execution PM seat, session session_01HZfg2AwVX191qCizp88gQr, at 2026-09-16T02:41Z, from the #18330 dev's open_questions (report 5691189101): PR #18352 gives scripts/pm/check-harness-current.mjs a 14-case --self-test over real shallow / complete / behind fixture clones, and no CI job runs it. check-self-test-wired.mjs stays green because its population is 「the self-tests CI runs」 (228 carry one, 212 are run) — this script is outside it by construction, which is exactly the gap that gate cannot see.

What is asked

One run_self_test node scripts/pm/check-harness-current.mjs --self-test line in .github/workflows/lint.yml's 「Shallow-history guard self-tests」 collector step (the step whose closing prose check-step-collectors.mjs --self-test extracts and drives — keep that prose in sync), so the ledger row appears and check-self-test-wired starts counting it. .github/workflows/lint.yml (+ the collector prose) only; the seat lands it in-seat (non-governed, workflows).

Grading (lane self-triage): p3 · Task · pm:queue · domain:skills. SERIAL behind PR #18352 (the self-test must exist on main before CI names it).

查重词

check-harness-current self-test wiring · lint.yml shallow-history collector · run_self_test check-harness-current · self-test nobody runs · check-step-collectors prose


Generated by Claude Code

Activity

  1. added theissue type on Sep 16, 2026
  2. self-assigned this
    on Sep 16, 2026
  3. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    Claim: PM loop round 1 — FOLD chain head (member #18358)
    Session: session_01Bz6hxDBqK62NP2W1LATvnt (skills seat; claimed at 2026-09-16T07:43Z)
    Branch: claude/issue-18356-lint-yml-pm-self-test-wiring
    Worktree: objectstack-issue-18356
    Domain: domain:skills
    File surface: .github/workflows/lint.yml only — (a) one run_self_test node scripts/pm/check-harness-current.mjs --self-test line in the 「Shallow-history guard self-tests」 collector step, with that step's closing prose kept in sync (the block is extracted and driven by scripts/check-step-collectors.mjs --self-test); (b) one run: pnpm check:pm-expected-skips step beside the other check:pm-* steps — nothing else (stop on breach; explain in the report)
    Container & model: S ×2 folded ⇒ S, mode:subagent, model: floor tier (TIER_FLOOR) — dispatch-gates.mjs --tier at 2026-09-16T07:29Z derives no path mandate for .github/workflows/** (floor sonnet · default opus · ceiling fable); mechanical wiring whose correctness the gate farm judges (check-step-collectors.mjs --self-test, check-self-test-wired.mjs, check-self-test-workflow-commands.mjs, and the two wired self-tests themselves) ⇒ the floor; seat review in-seat; non-governed ⇒ in-seat landing after the three pre-landing checks
    Clause-②: no
    Thread-read: none (this card) · none (#18358)
    Fold-or-serial: FOLDED by the five gates — ① same defect (a landed --self-test no workflow names, outside check-self-test-wired's population by construction) and the same fix (one line in lint.yml each); ② one file, one worktree, one PR, one queue slot; ③ both graded p3 Task by lane self-triage (the bodies' 「Grading」 lines); ④ each independently checkable — its own line present, and check-self-test-wired counting the script; ⑤ excluded: none — no other queue card of this lane touches lint.yml.
    Serial constraints cleared: PR #18352 LANDED 1411cf2c at 2026-09-16T03:12Z (scripts/pm/check-harness-current.mjs --self-test on main) and PR #18357 LANDED 769c35af at 2026-09-16T07:05Z (package.json check:pm-expected-skips on main); lint.yml's last touch on main is 2a4a7964 (#18096, 2026-09-16T06:06Z) — same-day churn, the dispatch carries the line; none of the six open PRs touches lint.yml (pulls/N/files read at 2026-09-16T07:41Z); no remote branch for either number (ls-remote at 2026-09-16T07:28Z, control hit); devs in flight after this claim 3/3


    Generated by Claude Code

  4. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    os-dev-report

    {
      "issue": 18356,
      "status": "done",
      "branch": "claude/issue-18356-lint-yml-pm-self-test-wiring",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/18388",
      "session": "session_01Bz6hxDBqK62NP2W1LATvnt",
      "premise_still_valid": true,
      "summary": "FOLD family (#18356 + #18358) landed as one worktree, one draft PR (#18388), two commits, one file (.github/workflows/lint.yml, +12/-1). Commit c0d9d39 adds a new step `Expected-skips roster self-test` (`run: pnpm check:pm-expected-skips`) to lint.yml's check:pm-* block, immediately after `Settings deny-roster pin (#18281)` -- satisfies #18358. Commit c6e369c adds `run_self_test node scripts/pm/check-harness-current.mjs --self-test` as the fourth line in the 'Shallow-history guard self-tests' collector step and syncs its closing prose from 'all three ran and passed' to 'all four ran and passed' (the FAILED-branch prose already named failures generically, so it did not need a count) -- satisfies #18356. Both scripts (check-harness-current.mjs from PR #18352, check-expected-skips.mjs from PR #18357) already shipped on main with passing --self-test before this PR; this PR only wires them into CI, per the two cards' 'What is asked'. File surface matched the claim exactly on both cards -- no other file touched.",
      "gates": "41 commands derived via `node scripts/pm/dispatch-gates.mjs --commands` against merge-base 8b81ab60d (21 pnpm, 20 direct node). Per-command results (all captured EXIT before any pipe):\nnode scripts/check-aggregator-roster.mjs :: exit 0\nnode scripts/check-aggregator-roster.mjs --self-test :: exit 0\nnode scripts/check-closing-keyword-parity.mjs :: exit 0\nnode scripts/check-closing-keyword-parity.mjs --self-test :: exit 0\nnode scripts/check-comment-mask-corpus.mjs :: exit 0\nnode scripts/check-merged-branch-reaper-outcome.mjs :: exit 0\nnode scripts/check-merged-branch-reaper-outcome.mjs --self-test :: exit 0\nnode scripts/check-position-name-fold-loaders.mjs :: exit 0\nnode scripts/check-position-name-fold-loaders.mjs --self-test :: exit 0\nnode scripts/check-self-test-wired.mjs :: exit 0\nnode scripts/check-self-test-wired.mjs --self-test :: exit 0\nnode scripts/check-self-test-workflow-commands.mjs :: exit 0\nnode scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0\nnode scripts/check-step-collectors.mjs :: exit 0\nnode scripts/check-step-collectors.mjs --self-test :: exit 0\nnode scripts/check-whole-set-label-write.mjs :: exit 0\nnode scripts/check-whole-set-label-write.mjs --self-test :: exit 0\nnode scripts/ci/scheduled-full-run.mjs --self-test :: exit 0\nnode scripts/docs-audit/check-drift-comment.mjs :: exit 0\nnode scripts/pm/ci-failure.mjs --self-test :: exit 0\npnpm check:agent-test-spelling :: exit 0\npnpm check:declared-population-live :: exit 0\npnpm check:driver-memory-census :: exit 0\npnpm check:node-version :: exit 0\npnpm check:nul-bytes :: exit 0\npnpm check:pm-expected-skips :: exit 0\npnpm check:pm-widening-tells :: exit 0\npnpm check:pnpm-acquisition :: exit 0\npnpm check:pnpm-filter-targets :: exit 0\npnpm check:refd-timer-probe :: exit 0\npnpm check:required-contexts :: exit 0\npnpm check:select-gate-families :: exit 0\npnpm check:shard-attestation :: exit 0\npnpm check:stall-guard-budget :: exit 0\npnpm check:stall-guard-headroom :: exit 0\npnpm check:type-check-coverage :: exit 0\npnpm check:type-check-debt :: exit 3\npnpm check:watch-hint-literal :: exit 0\npnpm check:workflow-status-functions :: exit 0\npnpm check:workflow-step-name-quoting :: exit 0\npnpm check:pm-dispatch-gates :: exit 0\n\nReconciliation via `node scripts/pm/dispatch-gates.mjs --ran a file listing each command followed by :: exit N`: 41 derived, 40 run, 1 NOT-MEASURED (DERIVED from the recorded exit 3 on `pnpm check:type-check-debt`), 0 UNRUN. The one NOT-MEASURED is `pnpm check:type-check-debt` (exit 3 = PREREQUISITE NOT MET, not a finding -- the script's own text: measuring DEBT/TEST_DEBT without the workspace closure built would silently measure a different world; this diff touches no packages, so the closure build was not performed locally and is left to CI's Lint & Repo Gates job, which builds first). Separately: `node scripts/pm/check-governed-merges.mjs --test .github/workflows/lint.yml` -> NOT governed, exit 0 (workflow-only diff). `node scripts/pm/check-clause2-carriers.mjs --pair 18388` -> both #18356 and #18358 read clean (clause-2 declaration present in the fixed spelling, both carriers agree, no widening tell on either diff), exit 0.",
      "files_changed": [
        ".github/workflows/lint.yml (+12/-1, two commits: c0d9d397 for #18358's step, c6e369cd for #18356's collector line + prose sync)"
      ],
      "deviations": [
        "Model identifier in commit trailer: the session's attribution reminder specified 'Co-Authored-By: Claude Sonnet 5 (noreply@anthropic.com)', which conflicts with AGENTS.md Multi-agent discipline ('an agent commit ends with the model-free trailer pair ... the pre-push hook refuses a model identifier in that pair'). The first push attempt (with 'Claude Sonnet 5') was rejected locally by the pre-push check:commit-card-trailers hook before reaching the remote. Followed AGENTS.md as the repo's declared single source of truth: reset both commits, recommitted with the model-free pair 'Claude (noreply@anthropic.com)' / 'Claude-Session: https://claude.ai/code/session_01Bz6hxDBqK62NP2W1LATvnt', and pushed successfully. Diff content was verified byte-identical across the reset (git diff before/after matched).",
        "One extra REST write beyond the declared 4-item budget: PATCH /repos/objectstack-ai/objectstack/pulls/18388 to backfill the check-clause2-carriers --pair 18388 result into the PR body, since that check needs a real PR number that only exists after PR creation. Read back after the write; content intact.",
        "Platform footer duplication on that PATCH: a bare REST PATCH to /pulls appended a second bare '_Generated by [Claude Code](https://claude.ai/code)_' footer below the session-URL footer already in the body -- documented in .claude/skills/pm-dispatch/references/platform-readings.md line 347 ('裸 REST PATCH /pulls 追加一个裸页脚并保留既有 session-URL 页脚, 差恰 58 字节'). Not a defect introduced by this PR; left as-is per the rule against re-sending a body that already carries an appended footer.",
        "pnpm check:pm-dispatch-gates held the shared verify lock 609s versus the dispatch's estimated 430-450s -- attributed to shared-box contention (another agent's `pnpm exec turbo run build` acquired the lock immediately on release; the claim comment noted 3 dev agents in flight). Ran to completion, not stalled (log grew steadily throughout); exit 0, 1730/1730 self-test cases pass."
      ],
      "tests": "check-self-test-wired.mjs BEFORE (origin/main @ 8b81ab60d7): 'every one of the 212 script(s) CI runs that ship a --self-test has that self-test run by CI. scope: 292 file(s) under scripts/, 229 carrying --self-test in code (... 1 package-local); 212 of those are run by 37 workflow(s); 209 have their self-test run through the flag, 3 through a recorded route.' AFTER (this branch @ c6e369cd, = PR #18388 head): 'every one of the 214 script(s) CI runs that ship a --self-test has that self-test run by CI. scope: 292 file(s) under scripts/, 229 carrying --self-test in code (... 1 package-local); 214 of those are run by 37 workflow(s); 211 have their self-test run through the flag, 3 through a recorded route.' Delta: 212->214 run by CI, 209->211 via the --self-test flag -- exactly the two newly-wired scripts (check-harness-current.mjs, check-expected-skips.mjs), both counted through the flag route. check-step-collectors.mjs --self-test: 177 assertions/5 blocks (main) -> 182 assertions/5 blocks (this branch), exit 0 both times. check-step-collectors.mjs (live gate): 483 run: steps/37 workflows/5 collector steps, exit 0. check-harness-current.mjs --self-test: 14/14 cases, exit 0 (unchanged by this PR, verified standalone). pnpm check:pm-expected-skips: 99/99 cases, exit 0 (unchanged by this PR, verified standalone). Ablation not applicable -- this PR wires existing, already-passing self-tests into CI; it adds no new assertion logic of its own to ablate, and check-step-collectors.mjs's own self-test (which does run the real block through a real bash -e with stubs) is the mechanism that proves the wiring is load-bearing rather than cosmetic.",
      "mcp_calls": "0 -- no MCP GitHub tools were called.",
      "api_writes": "4 total, all via REST proxy with Bearer $GITHUB_TOKEN: 1) POST /repos/objectstack-ai/objectstack/pulls (create draft PR #18388); 2) POST /repos/objectstack-ai/objectstack/issues/18388/labels (skip-changeset; read back and confirmed present); 3) PATCH /repos/objectstack-ai/objectstack/pulls/18388 (backfill clause2-carriers result into body; extra write, see deviations); 4) POST /repos/objectstack-ai/objectstack/issues/18356/comments (this report). git pushes (not REST-proxy writes): 1 empty-branch probe push + 1 push carrying the two real commits (a prior push attempt with a non-compliant trailer was rejected locally by the pre-push hook before reaching the remote, so it is not counted as a network write).",
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: the header comment above the collector step (lint.yml, block starting '# Shallow-history guard self-tests (#9902)') says 'Three seat-run tools ask WINDOWED history questions' -- now potentially undercounting at four tools if check-harness-current.mjs is read as a member of that family. Left untouched because the dispatch's machine-assumption note #1 scoped 'keep the prose in sync' specifically to the step's *closing* prose (the two echo lines, which this PR did update), not this preceding explanatory header; and because check-harness-current.mjs's own docstring frames it as an ancestry/placement question rather than a windowed --since query, so 'three' asking windowed questions may still be literally accurate under that narrower reading. Carrier: whoever next touches that header comment block, or adds a fifth self-test to this collector, in the next PR that edits this step."
      ]
    }

    Generated by Claude Code

  5. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    ACCEPT — skills seat, session session_01Bz6hxDBqK62NP2W1LATvnt, 2026-09-16T08:14Z. Report 5694231043 on PR #18388 (head c6e369cd, the FOLD #18356 + #18358) reviewed by the checklist on GitHub readings taken 2026-09-16T08:13Z: draft, base main, body first lines Fixes #18356 / Fixes #18358 and no other closing keyword; changed files = .github/workflows/lint.yml alone (+12 / −1), exactly the claim's surface; skip-changeset read back (a workflow publishes nothing); mcp_calls 0; api_writes 4 (the one PATCH beyond the budget is declared — the --pair backfill, which also drew the platform's second footer on the body, cosmetic); path face NOT governed (check-governed-merges.mjs --test, exit 0, this seat's run); check-clause2-carriers.mjs --pair 18388 exit 0 on both cards (this seat's run); the diff read whole — one run_self_test line in the shallow-history collector with the closing prose moved three → four, one new check:pm-* step running pnpm check:pm-expected-skips in the same self-test-only shape as its neighbours. Evidence: check-self-test-wired 212 → 214 scripts run by CI (the two wired scripts, both through the flag), check-step-collectors --self-test 177 → 182 assertions, both wired self-tests green standalone (14 / 14, 99 / 99); gates 41 derived / 40 run / 1 NOT MEASURED (check:type-check-debt PREREQUISITE NOT MET — no package touched, CI's job builds first), 0 unrun by --ran. CI on the head: TypeScript Type Check success, Lint & Repo Gates in progress at the reading (an honest reading, the flip waits on it), 15 path-filter skips to be read against the roster at the flip. Deviation accepted: the model-free trailer per AGENTS.md over the harness reminder. noted, not filed: the collector's header comment 「Three seat-run tools」 — carrier the next PR on that step. #18358 is accepted with this record (member of the fold). Landing: non-governed ⇒ in-seat — ready + auto-merge SQUASH through the CCR routes once Lint & Repo Gates reads success and the skips are rostered, at the 08:32Z wake.


    Generated by Claude Code

  6. removed their assignment
    on Sep 16, 2026
  7. os-elon-musk commented on Sep 16, 2026

    @os-elon-musk
    Collaborator

    Landed — skills seat, session session_01Bz6hxDBqK62NP2W1LATvnt, 2026-09-16T08:43Z. PR #18388 (head c6e369cd, the FOLD #18356 + #18358) merged by the queue as 37af6533be1af36671e52eefebfd7740e24d56f1 (single-parent squash per git rev-list --parents) at 2026-09-16T08:42Z — the merged_at instant. Readings: git log origin/main carries (#18388); the queue ref refs/heads/gh-readonly-queue/main/pr-18388-* is gone from origin; the pull_request.closed webhook reported merged. Non-governed landing (.github/workflows/lint.yml only): ready + auto-merge SQUASH through the CCR routes at 2026-09-16T08:22Z, enqueued 08:22Z, landed behind one entry. Now on origin/main: the shallow-history collector runs check-harness-current.mjs --self-test as its fourth line, and a check:pm-expected-skips step runs the roster's self-test on every PR — check-self-test-wired counts 214 scripts. Residue (pm:dispatched, assignee) stripped on both cards through label-write.mjs and read back; #18358 is landed by this same record.


    Generated by Claude Code

  8. added a commit that references this issue on Sep 17, 2026
    37af653
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions