Skip to content

T-D4CZ-ungated-ts-packages-get-a-check

State: closed/done · Impact: high · Complexity: small

agent-call, system-model and vault-graph-core have no moon.yml. The packages/ts/* glob still registers each as a project, but with no language/layer/stack — moon project system-model reports Language: javascript, Stack: unknown, Layer: unknown — so they match none of .moon/tasks/ts-lib.yml’s three inheritedBy conditions and have no check task at all — moon run agent-call:check answers “Unknown task check for project agent-call”. agent-call is on the publish channel, so a package that ships to npm is never typechecked in CI. All three compile clean today, so this is pure wiring with no cleanup behind it.

LocationRole today
packages/ts/agent-call/On the publish channel (publish-libs.json), has tsconfig.json + tsconfig.build.json + 6 test files, and NO moon.yml — so no check, no test, no CI gate of any kind
packages/ts/system-model/Contract-only package (types + one port interface), no moon.yml, no gate
packages/ts/vault-graph-core/Pure graph builder with a test/ directory, no moon.yml, no gate
.moon/tasks/ts-lib.ymlSupplies the inherited check to language: typescript + layer: library + stack: backend; a project with no moon.yml matches none of the three
scripts/guard-ts-lib-checks.tsGuards against a backend lib redefining the inherited check — it cannot see a project that never inherits one

Each of the three carries a moon.yml declaring the ts-lib triple, so it inherits bunx tsc --noEmit -p tsconfig.json and appears in moon run :check. The two with tests (agent-call, vault-graph-core) also declare the local test task the aspect deliberately leaves to each library.

None declares a local check — guard-ts-lib-checks.ts exists to keep that from happening, and inheriting is the whole point.

  1. Add packages/ts/system-model/moon.yml — layer: library, stack: backend, language: typescript, no tasks beyond what it inherits. No test task: the package has no tests.
  2. Add packages/ts/vault-graph-core/moon.yml with the same triple plus test: bun run test — its suites are written against node:test and its package script runs them on node’s runner, the shape its two siblings obsidian-vault and obsidian-bases already use. Declare no dependsOn: the bun toolchain already infers obsidian-vault from the workspace dependency in package.json.
  3. Add packages/ts/agent-call/moon.yml with the same triple plus test: bun test. Declare no id: — per S-0009 ids derive by default and no Rust crate of any of these three names exists, so there is nothing to disambiguate.
  4. Confirm each new project is picked up by the packages/ts/* glob in .moon/workspace.yml and add NO sources: entry — that file documents at length that an explicit source alongside a matching glob registers the directory twice with no duplicate-id error.
LocationKindChange
packages/ts/agent-call/moon.ymlnewts-lib triple + test; inherits check
packages/ts/system-model/moon.ymlnewts-lib triple; inherits check, no tests to declare
packages/ts/vault-graph-core/moon.ymlnewts-lib triple + test (delegating to the package’s node runner); inherits check
  • AC-1: moon run agent-call:check, system-model:check and vault-graph-core:check all resolve and pass, where all three previously answered “Unknown task check for project …”.
  • AC-2: moon run agent-call:test and vault-graph-core:test run their existing suites.
  • AC-3: bun scripts/guard-ts-lib-checks.ts still passes and its backend TS library count rises by exactly three. Stated as a delta because the absolute keeps moving as libraries land — it read 22 → 25 when this was written and 26 → 29 by the time it was verified against main.
  • AC-4: All three appear in the affected set for a change to packages/ts/tsconfig/presets/*.json, proving the gate is wired to the shared bar and not just present.
  • packages/ts/app-frame has no tsconfig.json at all, so it cannot inherit a tsc-based check. It is a Nuxt layer and needs vue-tsc; that is a separate question about frontend-tier gating.
  • packages/ts/prettier-config also has no moon.yml. It ships JSON and has nothing to typecheck; if it ever gains a gate it belongs with the tsconfig-preset shape (layer: configuration), not this triple.
  • none

Found while auditing what remained after the shared-config work merged (#1644). Verified rather than assumed: moon run <p>:check returns “Unknown task” for all three, and each compiles clean under its own tsconfig.json, so wiring the gate costs nothing but the three files.


← Back to Tasks