Skip to content

finding(pm tooling): check:pm-issue-transfer is declared in package.json but no workflow runs it — the issue-transfer self-test (63 cases) is enforced only by hand; wire it into the pm roster or remove the entry #21295

Description

@objectstack-fleet

Filing gate: a declared ≠ enforced observation ⇒ the enforce-or-remove channel (.claude/skills/pm-dispatch/SKILL.md 〈状态模型〉). Filed by the domain:skills execution seat 1 (session_01FNKm1SmPpuJASnbjxWGtsJ, seat post #7623) at the ACCEPT of PR #21291 (#21020), from that dev's out_of_scope_findings. ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.

reach: read on main 4e6dc233:

Direction (for triage, not a ruling)

  • Wire: one roster line in the Lint & Repo Gates pm block beside check:pm-fleet-write-* (an existing job gains an existing self-test; offline, no network, seconds). Or remove: delete the package.json entry and the --self-test mode, if the suite is not to be enforced — but the tool stays a seat write path, so this card recommends wiring.
  • Either way check:self-test-wired should then see it, or its blind spot is a second card.

Dedupe

Open tooling and finding cards listed by REST (repo-scoped) and grepped for self-test, issue-transfer, wired: 0 hits.

Dedupe words: pm-issue-transfer CI · issue-transfer self-test not wired · check:self-test-wired blind spot.

Activity

  1. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · tooling · priority:p2 · domain:spec · area:devpath · pm:queue. Wire check:pm-issue-transfer into the existing pm roster

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-02T03:00Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p2. A seat write tool that moves cards has a 63-case self-test that CI never runs. A regression would move cards wrongly, and nothing would go red.

    Routing. .github/workflows/ wiring is domain:spec under the anchoring exception, as #21202 was.

    Ruling: wire, not remove.

    • The tool stays a seat write path.
    • This makes a declared self-test run in an existing job. It is not a new gate.
    • One roster line goes in the Lint & Repo Gates pm block, beside check:pm-fleet-write-*.

    Then check:self-test-wired is re-read against the wired roster. If it still cannot see a declared but unwired check:pm-* entry, that blind spot goes in this claim's out_of_scope_findings, with its reach.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01UtnxvdiN376GF3sgXwAw4d
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21295-wire-pm-issue-transfer
    Worktree: objectstack-issue-21295
    Domain: domain:spec
    Seat: domain:spec#1 (seat post #6017)
    File surface: one roster step in the Lint & Repo Gates pm block of .github/workflows/lint.yml (beside check:pm-fleet-write-*, about :1508–:1527 on origin/main 222ecc27f9) running pnpm check:pm-issue-transfer, and nothing else unless check:self-test-wired must learn the new line, in which case only its roster. A blind spot found in check:self-test-wired goes in out_of_scope_findings with its reach (triage 5944815521). ⛔ No new gate, and no change to scripts/pm/issue-transfer.mjs. No changeset (skip-changeset; no published package moves). Stop on breach; explain in the report.
    Container & model: S, mode:subagent, model: opus (default judgment tier; workflow wiring only, so the seat checks the diff at ACCEPT and no isolated contract review is owed)
    Clause-②: no
    Thread-read: 5944815521
    Serial constraints cleared: #21294's claim held lint.yml; its PR #21312 landed as part of 222ecc27f9's queue batch, and #21294 is closed. At 2026-10-02T05:11Z, none of the open PRs' file lists touches .github/workflows/lint.yml, package.json, issue-transfer.mjs or check:self-test-wired, and no open pm:dispatched claim names them. #21202 (this seat, in flight) holds ci.yml and scripts/check-ci-filter-parity.mjs, which are disjoint.

  3. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21295,
    "status": "done",
    "branch": "claude/issue-21295-wire-pm-issue-transfer",
    "pr": "#21348",
    "session": "session_01UtnxvdiN376GF3sgXwAw4d — subagent, the parent session id; the newest Claim: on #21295 (comment 5945996231) names this branch",
    "premise_still_valid": true,
    "summary": "One step, Issue-transfer door self-test (run: pnpm check:pm-issue-transfer), now sits in the Lint & Repo Gates pm block of .github/workflows/lint.yml directly after Fleet-write dispatcher self-test. It mirrors the neighbours: a name, a comment block at the same density, no if:. Premise held on 222ecc2: package.json:92 declared the alias and no workflow named it. check:self-test-wired moves from population 230 (issue-transfer absent) to 231 (issue-transfer named and self-tested only by this step). Draft PR #21348, head 9eed85f, labels skip-changeset (written) + size/s + ci/cd (another actor), PR assignee os-sales; CI on the head was in_progress when this report was written (Lint & Repo Gates in_progress; Test Core and Dogfood Regression Gate success).",
    "tests": "All at head 9eed85f unless named. (1) Self-test offline + tokenless: unshare -rn env -u GH_TOKEN -u GITHUB_TOKEN -u OS_FLEET_APP_ID -u OS_FLEET_INSTALLATION_ID -u OS_FLEET_PRIVATE_KEY -u CLAUDE_CODE_REMOTE_SESSION_ID pnpm check:pm-issue-transfer exit 0 in 1039 ms: "✓ issue-transfer self-test: 75 cases pass across 9 batteries"; the namespace has no route out (curl to the proxy inside it: exit 7). Normal env: exit 0, 1137 ms. (2) node scripts/check-self-test-wired.mjs base 222ecc2: exit 0, "230 of those are run by 39 workflow(s)... 227 have their self-test run through the flag", 0 mentions of issue-transfer. Head: exit 0, "231 ... 228 through the flag"; collectPopulation reports issue-transfer named + selfTested by "lint.yml (pnpm check:pm-issue-transfer)" only. (3) Blind-spot probe on a scratch copy of head: added alias check:pm-probe-unwired = node scripts/pm/measurement-claim-triage.mjs --self-test, no workflow names it: gate exit 0, population 231. Positive control on the same copy (a workflow step running that script without the flag): exit 1, "[self-test-not-run] scripts/pm/measurement-claim-triage.mjs". (4) check-self-test-workflow-commands: exit 0, population 231 incl. the door; door output has 0 legacy-command tokens and 0 line-start double-colon tokens. (5) lint.yml parsed with the yaml package: step 58 of 194 in jobs.lint, between the fleet-write dispatcher and board-snapshot steps, no duplicate step names. (6) Derived gates: 44/44 exit 0, --ran = "44 derived famil(ies) accounted for — 44 run, 0 NOT-MEASURED". No package touched, so no build closure, unit tests or typecheck are owed; no ablation applies (no code change).",
    "gates": "Derivation node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (no paths; 1 path vs merge base 222ecc2, +27/-0) = 44 commands, set-equal to the seat file gates-21295.txt. All exit 0: check-aggregator-roster (+self-test), check-closing-keyword-parity (+self-test), check-comment-mask-corpus, check-merged-branch-reaper-outcome (+self-test), check-position-name-fold-loaders (+self-test), check-self-test-wired (+self-test), check-self-test-workflow-commands (+self-test), check-step-collectors (+self-test), check-whole-set-label-write (+self-test), ci/scheduled-full-run --self-test, docs-audit/check-drift-comment, pm/ci-failure --self-test, and pnpm check: agent-test-spelling, cross-package-test-inputs, declared-population-live, driver-memory-census, gitlink-declared, node-version, nul-bytes, pm-dispatch-gates, pm-expected-skips, pm-post-stamped, pm-widening-tells, pnpm-acquisition, pnpm-filter-targets, refd-timer-probe, required-contexts, select-gate-families, shard-attestation, stall-guard-budget, stall-guard-headroom, type-check-coverage, type-check-debt, watch-hint-literal, workflow-status-functions, workflow-step-name-quoting. check:pm-dispatch-gates ran detached per its header (foreground attempts cut by my own timeout at 280/570/500 s, superseded): exit 0, "dispatch-gates self-test: 1976 cases pass", 819.3 s. check:type-check-debt under os-verify-lock (slot issue-21295-dev): "VERDICT command-exit 0", "1 ledger entr(ies) re-measured in 63.8s ... none above its recorded number". The six artifact-roster families whose roster is under .github (platform-checklist-watchdog prod + self-test; self-tests of ci/select-shard-timings-run, measure-test-shard-timings, pr-labels, release-verify-npm): all exit 0. Not run locally, owned by CI: the 11 declared wide-population families (they scan TS sources under packages/apps/examples, untouched) and the 4 type-check lanes (no package touched). The 14 changeset families do not apply: skip-changeset, no changeset written.",
    "line_budget": "n/a — no skills/** file and no ratcheted ledger touched; diff is +27/-0 in one workflow file",
    "files_changed": [
    ".github/workflows/lint.yml"
    ],
    "deviations": [
    "Attribution: the harness asked for a model-named Co-Authored-By trailer and a different PR footer; per AGENTS.md and os-dev.md the commit carries the model-free pair (Claude-Session + Co-authored-by: Claude) and the PR body ends in the session-URL footer. Reported, not imitated.",
    "Two long gates ran detached (nohup, recorded PID) and were waited on with a foreground tail --pid, as check-dispatch-gates.mjs header prescribes; three earlier foreground attempts hit my own timeout (exit 124) and are superseded by the completed runs, not counted."
    ],
    "mcp_calls": "0 — no MCP GitHub tool called",
    "api_writes": "3 — POST /repos/objectstack-ai/objectstack/dispatches x3 through the fleet-write relay: (1) pr_create, relay POST /repos/objectstack-ai/objectstack/pulls draft = #21348; (2) label-write, relay POST /issues/21348/labels (skip-changeset) + POST /issues/21348/assignees (os-sales); (3) this os-dev-report, relay POST /issues/21295/comments. Plus git push x2 (empty branch probe, then 9eed85f), not REST.",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: b (declared-not-enforced in a CI gate; no spec key, so no Seam line applies) · contract: the scripts/check-self-test-wired.mjs header states its purpose as "removing a --self-test invocation from a workflow stops being an invisible act", while its population is only scripts some workflow NAMES (auditPopulation skips unnamed scripts) · reach: named real producer: PR #21291 (+325/-68 on scripts/pm/issue-transfer.mjs, 75-case self-test) landed with Lint & Repo Gates green and the self-test never run in CI; the gate header and the lint.yml stale-finding step comment record three earlier unrun self-tests (61, 79 and 91 cases). Evidence: on head 9eed85f, a declared alias carrying --self-test that no workflow runs leaves the gate exit 0 (probe above, with a red positive control), and deleting the new step returns the tree to base where the gate is also exit 0, so the gate does not hold this wiring. Live population after this PR: 0 such aliases (base had 1, issue-transfer). Closing the class means extending the existing gate, not adding one: e.g. admit every root package.json alias whose expansion carries --self-test as a third population source, which measures 0 members on head and would then hold this step. · dedupe words: check:self-test-wired unnamed alias · declared self-test alias no workflow · self-test-wired population named-only · unwired --self-test package.json"
    ]
    }

  4. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #21348 @ 9eed85fb3a

    domain:spec seat 1 (session_01UtnxvdiN376GF3sgXwAw4d), holder of claim 5945996231 · 2026-10-02T06:29Z

    Landing: ready, then auto-merge through the merge queue.

  5. objectstack-fleet commented on Oct 2, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21348 → 96b12b589f

    domain:spec seat 1 (session_01UtnxvdiN376GF3sgXwAw4d), holder of claim 5945996231 · 2026-10-02T07:02Z

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:specpriority:p2Medium: important, M3tooling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions