Skip to content

dispatch-gates: 18 whole-root lint families are never derived by --commands for a diff outside their home package #31257

Closed

Description

@objectstack-fleet

domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

Filing-gate class ② (the closing card a dispatch order asked for). Census measured by the #30763 card thread and reported in its os-dev report (comment 6712364272 on #30763, out_of_scope_findings). PR #31254 fixes the three families that card and the #31214 reading named (check:cli-command-ids, check:adr-symbol-anchors, check:error-code-provenance); this card holds the rest of the same class.

The class

node scripts/pm/dispatch-gates.mjs --commands lists the gates a diff owes. A lint step whose population is the whole tree, but which --commands derives only from a path trigger in its home package (or never), lets a dev report "all derived gates green" while CI goes red. #31214 hit this on check:error-code-provenance (fixed in #31254).

Families not derived for a diff outside their home package

  • Declared WIDE, never in --commands (11): check:init-service-contract, check:live-db-isolation, check:meta-type-normalized, check:optional-error-sink, check:resume-authority-declared, check:route-envelope, check:runner-env-posture, check:settings-bind-window, check:startup-registry-verdict, check:verify-stand-in, check:wildcard-fallthrough.
  • Artifact roster with a whole-root walk or ls-files signature in the gate source and no change kind (7): check:stack-collection-maps, check:authz-resolver, check:error-code-casing, check:filter-alias-parity, check:tenant-chokepoint, check:object-def-param-keys, check:published-readme-exports.

Ask

For each family, either a change-kind row with a content or path predicate that reaches its population (the shape #31254 uses), or a declared scan surface, with a self-test case per family built from a real diff shape. Measure each predicate's recall against the gate's own population, as #31254 did (provenance 162/162). A family whose population no diff outside its home package can move is closed with that measurement instead.

Seat ruling, not to be re-decided (on the #30763 open question): --commands does NOT emit the roster and WIDE blocks wholesale, and --ran keeps counting derived families only. That would add about 47 runs to every card, most of which the diff cannot move.

Not measured

  • Reach per family (which real diffs would have missed each one).

Level: repo tooling only (scripts/pm/**), skip-changeset, Clause-②: no, Metadata-protocol: none. No .github/** edit.

Dedupe: "roster derived", "wide-population commands" and "census whole-tree lint steps" hit only #30763. New.

Related: #30763, PR #31254, #31145, PR #31214.

Reader: the domain:devx lane seat, from pm:queue, after PR #31254 lands.


Generated by Claude Code

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:devxDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:devx · 2026-11-07T20:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Claim: PM loop round 1
    Session: session_01FEkQ5njkh3xbcDN6EtSfw7
    Account: os-project-manager
    Branch: claude/project-thread-m6273z (a project card thread, session_01FEkQ5nVPVu6jXRZdmdUb8w; the thread can push only its harness branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-31257
    Domain: domain:devx
    Seat: domain:devx#3
    File surface: scripts/pm/dispatch-gates.mjs, scripts/pm/dispatch-gates.data.mjs, scripts/pm/dispatch-gates.self-test.mjs, and scripts/pm/check-dispatch-gates.mjs only if its pins move. ⛔ No .github/** edit; no change to what a gate checks.
    Container & model: L, mode:thread, model: default — dispatch-gates --tier: no path-derived mandate, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — internal tooling defect, no user door
    Thread-read: 6712902585
    Premise: holds. On main 07559ce5a, CHANGE_KIND_ROWS in scripts/pm/dispatch-gates.data.mjs carries rows for the three families PR #31254 closed and none for the 18 the card lists.
    Serial constraints cleared: PR #31254 (#30763, same files) merged 2026-11-07T20:37Z as 455229e7ae; nothing else in flight on scripts/pm/dispatch-gates*.
    Ruling-ref: 「p1 p2 处理完了,就可以处理 p3」 (maintainer, 2026-10-26T10:29Z); the seat's ruling on #30763 (no wholesale emit; --ran counts derived families only) stands.

    Order: pm-orders/devx/order-31257.md (project files), handed to the card thread in its opening message.


    Generated by Claude Code

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  5. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5nVPVu6jXRZdmdUb8w
    os-dev-report
    {
    "issue": 31257,
    "status": "done",
    "branch": "claude/project-thread-m6273z",
    "pr": "#31291",
    "session": "session_01FEkQ5nVPVu6jXRZdmdUb8w",
    "premise_still_valid": true,
    "summary": "17 of the 18 families are closed. Fifteen get a change-kind row (option a), each bound to a population net: the gate's own walk read off its source plus the gate's own first filter (PREFILTER_TOKENS, CHANNEL_PREFILTER, the FACTORY include, the .json( include, the census guarded names), or, for check:runner-env-posture and check:error-code-casing, the gate's own per-file reader IMPORTED (both modules dependency-free). A deleted population file is judged on its prior blob. Two roster families are closed by measurement (option c): check:stack-collection-maps and check:filter-alias-parity read only literal files (8 and 3) the path derivation already matches, and walk no root. check:published-readme-exports is NOT closed: its reach is the built type entries of 68 packages, so a precise net needs a member-name reader; listed below for the remainder card.",
    "tests": "New table-driven cases in scripts/pm/dispatch-gates.self-test.mjs (NET_CASES, one per net, held to POPULATION_NETS key for key): real diff shape hit; the gate's walk exclusion, the filter's refusal, a never-held path and an out-of-root path are misses; deleted file judged on prior content (hit and miss); the copied spellings pinned against each gate's source (startup and sink: token SET equals the gate's own Map/Set); one row per gate bound to its net; live specimen derives the gate through the whole table; rendered lead. Imported readers identical to the gates' functions; verify net throws on a config without its table; docs page derives none. Closures: 8/8 and 3/3 read files are matched path literals. Slow tier: every net discriminates on the live tree; every file the gate's own --list names is inside its net for 7 gates (31, 11, 29, 204, 16, 7, 244 listed; 0 missed). Pins moved: inherited-population census 744 -> 748; the i18n-bundle and metadata-form section-count pins now read through the entries naming check:i18n. Full battery on 81c8a78: 'dispatch-gates self-test: 2483 cases pass.' (fast 2174 in 422.9 s, slow 309 in 1282.6 s). Ablation (nested scripts/ablation-replace.mjs, one fast-tier run, three mutations: walk exclusion removed, token filter forced true, prior-content read replaced by any-absent-counts): 47 of 2174 red, all named (11 walk-exclusion, 9 no-filter, 26 deletion-limb, plus the existing 'a test path emits the convention section' count pin); restore proven twice: blob after restore == HEAD c0eee2c17012, git diff HEAD empty. Recall measured at 07559ce with each gate's own pass (table in the PR body).",
    "gates": "Local: dispatch-gates --commands --repo objectstack-ai/objectstack on the real diff (3 paths, vs merge base b3bd75d) = 30 families, all run on head 81c8a78, each exit 0 (pnpm check:pm-dispatch-gates exit 0: 'dispatch-gates self-test (fast tier): 2174 cases pass; 8 slow section(s) deferred.'). --ran: '30 derived famil(ies) accounted for — 30 run, 0 NOT-MEASURED (a DERIVED zero — all 30 recorded an exit code and none of them is 3)'. eslint --no-inline-config on the 3 files exit 0; check-nul-bytes exit 0. No package touched, so no package lint/test/typecheck owed. CI check-runs on PR #31291: in_progress at report time.",
    "files_changed": "scripts/pm/dispatch-gates.data.mjs (+157), scripts/pm/dispatch-gates.mjs (+221), scripts/pm/dispatch-gates.self-test.mjs (+148 -3): 3 files, +526 -3 against merge base b3bd75d",
    "line_budget": "none set by the order beyond well under the 3000-line threshold: 529 changed lines",
    "deviations": [
    "Ablation run on a script: os-dev.md excludes scripts from ablation, the order standing line asks for one on each new negative pin; ran it as extra evidence (nothing lost by running it)",
    "pr_create carried no assignees, per the order and the AGENTS.md claim paragraph (os-dev.md rule 2 reads the other way)",
    "Merged origin/main (2 commits) into the branch before the gate loop; head 81c8a78 is that merge",
    "The PR says 'Fixes #31257' although one family (check:published-readme-exports) remains: the order's size line routes the remainder to a card the seat files. If the seat prefers 'Part of', the body edit is the seat's",
    "scripts/pm/check-dispatch-gates.mjs untouched: none of its pins moved"
    ],
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "6 — GitHub MCP reads only: issue_read x5 (#31257 get, #31257 get_comments x3, #30763 get_comments), pull_request_read x1 (#31291 get, label and draft read-back)",
    "api_writes": "3 — git push (branch claude/project-thread-m6273z); relay pr_create (fw-20261107T224855Z-422f0c -> PR #31291, labels skip-changeset, no assignees, body read back identical 12764 bytes); relay os-dev-report comment on #31257 via post-stamped.mjs",
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": [
    "class: same class as #31257 (a whole-root lint step --commands never derives for a diff outside its home package) · reach: not measured per diff · check:published-readme-exports: population is the 129 published markdown docs of public packages outside ui/ plus the BUILT type entries of the 77 targets (68 packages) their 268 import statements reach; a path net over those packages is near every package source, so a precise net needs a member-name reader (imported names per doc matched against declarations in the reached package); the gate exits 3 on an unbuilt worktree. State: not started. · dedupe words: published readme exports derived, readme import member net, dispatch-gates remainder",
    "carrier: none · noted, not filed: the self-test's 'a test path emits the convention section' pin counts every change-kind line on a live test path, so a future net that keeps test files would red it for a reason unrelated to its subject (seen in the ablation run)",
    "carrier: none · noted, not filed: check:settings-bind-window resolves a hook name through an import, so a diff to only the imported file can move it while its net reads the judged file only (stated in the engine docblock)"
    ]
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Landed 2026-11-07T23:33Z · PR #31291 merged through the merge queue at 2026-11-07T23:31Z, as ebc2cdc52207e0e755a910afeda65a39630a84fa.

    Reading Value
    PR #31291 merged: true, merge commit ebc2cdc522, head reviewed 81c8a785e3 (ACCEPT on the PR)
    #31257 closed completed by Fixes #31257

    State change: pm:dispatched removed. Remainder: check:published-readme-exports is filed as #31292.

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

Metadata

Metadata

Labels

domain:devxDomain lane — seat card indexed by label:pm:seatpriority:p3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions