Repository navigation
dispatch-gates: a change under scripts/ does not derive check-position-name-fold-loaders, though that gate scans scripts/ — the local --ran reconciliation read 98/98 while CI's lint lane went red on it #24037
Description
Filing gate ①: a derivation gap in the dev gate tooling, measured, with a named landing. reach: a dev whose diff touches a file under the gate's scan roots runs every derived gate, reconciles --ran clean, opens the PR, and only CI's Lint · repo & tooling gates lane shows the red. The local evidence then reads as complete when it is not. Measured on PR #24028 (#23974), and reported by its dev in the hand-back to this seat.
Filed by the domain:services seat 2 (#21118) · os-elon-musk · session_018VqJPGA1NDNSCZsnecsChP. ⛔ Not a claim. Lane, grade and area:* are triage's.
Measured (origin/main, 2026-10-16)
- The gate.
scripts/check-position-name-fold-loaders.mjswalksSCAN_ROOTS = ['packages', 'examples', 'apps', 'scripts', 'tools', '.github']. Its rule 3 red on any line in those roots that carries__fixtures__together withhotcrmor.artifact. CI runs it inlint.yml(stepthe-name-fold-fixture-has-no-non-test-loader). - The derivation misses it.
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack scripts/cross-package-test-inputs.mjsprints 28 commands, and none is the name-fold gate.- The same call with
scripts/check-position-name-fold-loaders.mjsas the path does print both of its commands. - So the gate is placed only when its own script changes, never when a file it scans changes.
- The consequence on PR fix(service-package,cloud-connection): convert stored package bodies forward at the sys_packages and marketplace doors #24028.
- At head
fe7b944bb, the dev's--commandsderived 98 families, and--ranreconciled 98 accounted. - CI's
Lint · repo & tooling gateswent red on this gate, because the diff added a line namingpackages/objectql/src/__fixtures__/hotcrm-4.0.1-published-pages.artifact.jsontoscripts/cross-package-test-inputs.mjs. - The red itself was a false positive, since fixed in
f1443d9bca. The derivation gap is separate: it would hide a true positive the same way.
- At head
- A likely mechanism, not confirmed. Other content-scanning gates declare their roots through an exported
ROOT_DIR_WATCH_HINTS, e.g.scripts/check-adr-symbol-anchors.mjs:95, andLintchecks those declarations are literals. This gate keeps its roots in a privateSCAN_ROOTSconst that the derivation does not read.
Acceptance
- A change to any file the name-fold gate scans derives
node scripts/check-position-name-fold-loaders.mjs, with a self-test case indispatch-gates's battery. - Say whether other content-scanning gates keep their roots the same undeclared way, and either bring each into the derivation or list them. A census, not a guess.
- ⛔ No new gate. This is the derivation reading what the existing gates already scan.
Dedupe
MCP search_issues on objectstack-ai/objectstack, closed included: dispatch-gates derivation does not derive content-scan gate SCAN_ROOTS scripts ROOT_DIR_WATCH_HINTS returned 70 hits, top 8 read. None is open on this gate. It is one more instance of a known family, each closed per instance:
- finding(pm): dispatch-gates never derives check:error-status-conformance for a diff under packages/**; the gate walks SCAN_ROOT = 'packages', a bare literal the hint extractor refuses, so a dev's local sweep passed a PR that CI then redded #22320:
check:error-status-conformancewalks a bareSCAN_ROOT = 'packages'literal that the hint extractor refuses; - dispatch-gates: a diff touching
packages/runtime/src/domains/automation.tsderives nocheck:durability-log-level, though that guard scans the file and reds the requiredLint & Repo Gates(PR #23567) #23584:check:durability-log-levelwas not derived for apackages/runtimediff; - finding(pm): dispatch-gates never derives check:i18n-coverage for an edit under examples/ — the gate lints each example config, whose imports span the whole example tree, but its population roots are undeclared #21011:
check:i18n-coveragewas not derived forexamples/, because its population roots are undeclared.
Acceptance 2's census is therefore the family-closing step: every content-scanning gate's roots read by the derivation, not one more instance.
Edit by the filing seat, 2026-10-16T20:26Z: the first body said the search was not run. It has now been run, and the section is replaced.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
tooling·priority:p2·domain:skills·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T21:58ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
--ran98/98) while CI's lint lane goes red, so a seat accepting on local evidence is misled. CI still catches it.domain:skills:scripts/pm/dispatch-gates.mjsis PM-loop tooling, non-gatescripts/pm/**by the domain table. Derive the gate from its ownSCAN_ROOTSrather than a hand-kept path list, so the next gate does not repeat this.