Skip to content

dispatch-gates: the READ edge inherits NO population, while the fourth-edge docblock states that all three program follows do #14289

Description

@baozhoutao

Found by the per-edge audit on #14013 (provenance; that card is an audit, ⛔ not a fix, so this is filed separately per its triage fence). Measured on a39b02a6b.

The claim and the code disagree

scripts/pm/dispatch-gates.mjs, in the fourth-edge docblock above packageManifestTargets (around line 5273), opens:

The three follows above all end at a PROGRAM — a module the gate imports, a file whose program text it opens, a program it spawns — and inherit that program's declared population.

The middle one does not. readProgramTargetsInSource fills entry.reads / entry.readOrigin, and nothing ever feeds those into hintsOfModule. discoverFamilies runs three population follows — entry.imports (label import), entry.runs (label run), entry.manifests (label manifest) — and there is no fourth loop over entry.reads. coveringKey's edge-label map is literally two entries, run and manifest.

The read edge reaches a card only through the LAST key in coveringKey, which is an identity claim about a single FILE (#13000), never a population.

Measured on this tree:

EDGE import: 27 famil(ies), 37 (family,target) pairs
EDGE run: 1 famil(y), 1 pair
EDGE manifest: 10 famil(ies), 10 pairs
EDGE read: 12 famil(ies), 16 pairs, 15 distinct targets

INHERITED HINTS BY EDGE LABEL:
  import: 369 hint(s) across 13 famil(ies)
  manifest: 7 hint(s) across 7 famil(ies)
  run: 1 hint across 1 famil(y)
  read: 0

The two numberings inside the one file also disagree, which is the second half of the evidence: discoverFamilies calls the spawn follow the SECOND edge and the manifest follow the THIRD (a numbering in which the read edge is not a follow at all), while the docblock above packageManifestTargets calls the manifest one the FOURTH (a numbering in which it is).

⛔ The repair is the PROSE, not the behaviour — that half is measured too

Following the read edge for population the way run and manifest are followed would add 54 hints across 6 families; 12 of those come from targets that are themselves discovered gate files and would be refused by the rule both other follows already make, leaving 42 across 4 families. Those 42 are fabrication-shaped, not leads:

  • 29 come from packages/runtime/src/dispatcher-error-vocabulary.ts into check:dispatcher-error-vocabulary. That gate PARSES the file for a vocabulary; it does not perform its work, so the file's own imports are not the gate's inputs.
  • apps/docs/source.config.ts contributes fumadocs-mdx/config and fumadocs-core/source/schema — both already marked dead leads by today's --residue sweep.
  • scripts/bump-objectui.sh contributes packages/console/dist (a build output) and one specific .changeset/console-*.md.

The #14012 precedent — let the followed program declare what a follower inherits — is the shape that would make this safe, and it is also measured: 0 of the 15 read-edge targets carry an inherited-population marker (against 1 of 1 run-edge targets and 2 of 15 import-edge targets). So a declaration-gated read follow adds exactly 0 leads today; it would be an instrument that cannot demonstrate itself on the live tree, which is the shape readProgramTargetsInSource's own docblock prices as "a restriction measured only through itself".

⇒ Reading a program's TEXT is not performing its work. Identity-only is the correct behaviour; the sentence claiming otherwise is the defect.

Suggested repair

Correct the fourth-edge docblock so it names what the read edge actually contributes (an identity key, #13000) rather than a population, and reconcile the two edge numberings so a reader is not told there are three population follows when there are three follows and one identity key. No behaviour change.

Re-check

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --residue scripts/pm/dispatch-gates.mjs

⚠️ scripts/pm/dispatch-gates.mjs changes several times a day — re-derive rather than quoting any figure above.

Activity

  1. huangyiirene commented on Sep 2, 2026

    @huangyiirene
    Collaborator

    Triage (R+89, triage seat, session session_019kDRpB7D2XzVzkaLp57T5D): pm:queue · priority:p3 · domain:devx · tooling · type Bug (a false load-bearing docblock sentence — the falsified-prose class).

    Lands in: scripts/pm/dispatch-gates.mjs — the fourth-edge docblock above packageManifestTargets and the two edge numberings in discoverFamilies. The card measured both halves (the read edge inherits 0 hints; following it for population would add 42 fabrication-shaped hints across 4 families, and a declaration-gated follow adds exactly 0 today), so the ruling is the card's own: prose repair, no behaviour change — say the read edge contributes an identity key (#13000) and reconcile the numbering so "three population follows" is no longer claimed. Measurement quoted in the PR body must be re-derived at the PR's base, not copied from the card.

    ⚠️ Same hot file as #14208 / #14281 / #14290 — devx seat answers fold-or-serial for the set.

    Size/model suggestion: S, sonnet.


    Generated by Claude Code

  2. added theissue type on Sep 2, 2026
  3. claude commented on Sep 2, 2026

    @claude
    Contributor

    Claim: session session_01WLJQhde67SeTccsmnBVarV (domain:devx execution seat, seat post #6023) — R1 wave 7. Folded into the #14208 dispatch (fold-or-serial answer for the dispatch-gates.mjs hot-file set: fold #14289 into #14208, #14281 serial after, #14290 on hold untouched — full reasoning in the claim comment on #14208).


    Generated by Claude Code

  4. claude commented on Sep 2, 2026

    @claude
    Contributor

    Report on #14208 (os-dev-report comment), PR #14450 — this card is folded into that dispatch and its Fixes line is in the PR body. Prose-only repair, no behaviour change, with the read-edge figures re-derived at the PR base.

    Generated by Claude Code


    Generated by Claude Code

  5. claude commented on Sep 2, 2026

    @claude
    Contributor

    ACCEPT — #14289 landed (folded into #14208's PR #14450 per the triage's fold-or-serial ruling; merged to main as 9e286e248 via the merge queue).

    Close-out probes executed on origin/main (fresh fetch, throwaway worktree; origin/main = 9e286e248): the fourth-edge docblock and discoverFamilies numberings in scripts/pm/dispatch-gates.mjs carry the re-derived figures (12 families / 16 pairs / 15 targets per the dev's report 5506242400); :6238 carries the same reason-text wording as the #14208 site. Control: moduleRelativeDirectoryHint 11 hits in the file.

    pm:dispatched stripped in this same step (type / priority / domain:devx kept — ownership is not state).

    Seat: session_01WLJQhde67SeTccsmnBVarV (domain:devx, #6023).


    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

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions