Skip to content

T-9FH9-the-script-vocabulary-lands-across-solutions

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

solutions/ holds 107 of the repo’s 162 tracked package.json — the larger half of the missing-vocabulary problem, and the half where two apps (learn_web, vimit_prototype) declare a lint script that runs eslint . --fix. Because moon’s lint task runs bun run lint, a moon run of either app’s lint target rewrites source today. This task adds the missing baseline scripts across solutions/ — same mechanical shape as T-076A-the-script-vocabulary-lands-in-packages-apps-and-sites — and fixes the two mutating gates so nothing in the repo rewrites source under a read-only verb name.

101 tracked package.json under solutions/ (excluding node_modules and the 6 synthetic fixtures under crates/manifest-graph/tests/mini-repo/, one of which is deliberately malformed JSON) sit outside the baseline vocabulary: 4 have format, 2 have format:check, 4 have lint, and 20 of the 36 that own a tsconfig.json have typecheck. 32 of the 107 counted package.json (fixtures included) declare zero gate scripts at all — 22 of those are determined/experiences Nuxt layers.

LocationRole today
solutions/determined/products/*/package.json24 Nuxt products. Build-only today; own no tsconfig.json, cannot be typechecked in isolation.
solutions/determined/experiences/*/package.json24 Nuxt layers (22 of the 24 have zero gate scripts). Own no tsconfig.json either — narrowing include to one layer drops the generated types and reports ~83 errors that aren’t real.
solutions/augmented/apps/learn_web/package.jsonlint: "eslint . --fix" — mutating gate; moon run learn_web:lint rewrites source.
solutions/augmented/apps/vimit_prototype/package.jsonlint: "nuxt prepare && eslint . --fix" — same defect.
solutions/augmented/apps/augmented_web/package.jsonAlready correct: lint: "eslint ." (read-only) plus a separate lint:fix: "eslint . --fix". The shape task 4 brings the other two toward.
solutions/ontological/crates/manifest-graph/tests/mini-repo/**/package.json6 synthetic fixtures exercising the manifest-graph crate’s own tests (one is intentionally malformed JSON, to test error handling). Not gated projects — excluded from this task.

Every one of the 101 real solutions/ manifests carries the verbs the which-verb-which-project rule assigns it:

VerbApplies toIn this tier
format, format:check, lintevery manifest — operates on source files, no compilable unit requiredall 101
typecheckmanifests owning a real tsconfig.json36 of 101
testmanifests with testsunchanged — scripts already present are left as-is
buildmanifests that emitunchanged — scripts already present are left as-is

Products and experience layers (48 manifests: 24 + 24) get format, format:check and lint but never typecheck — they own no tsconfig.json and cannot be typechecked in isolation; that coverage comes through the composed product via .moon/tasks/nuxt-product.yml in T-PJ8G-the-tool-and-product-tiers-get-their-gates.

learn_web and vimit_prototype match augmented_web’s shape: lint runs read-only (eslint ., and nuxt prepare && eslint . for vimit_prototype), and the --fix form moves to a new lint:fix script. No script named lint or format:check contains --fix or --write anywhere under solutions/.

  1. Enumerate the 101 manifests: find solutions -name package.json -not -path '*/node_modules/*' -not -path '*/tests/mini-repo/*'.
  2. For each, diff its current scripts block against the target set (format, format:check, lint always; typecheck when a tsconfig.json sits in the same directory) and add only the missing entries. Existing build/test/app-specific scripts are left untouched.
  3. Fix the two mutating gates by hand, not by the mechanical diff: split learn_web’s and vimit_prototype’s lint into a read-only lint and a new lint:fix carrying the --fix form, matching augmented_web.
  4. Point the new lint/format/format:check/typecheck scripts at the same tools augmented_web and the sibling tier already use, so the vocabulary is consistent across both tiers before T-0DSA-the-typescript-aspect-delegates-and-spans-both-stacks wires moon tasks to it.
  5. Run bun run typecheck, bun run lint, bun run format:check in a sample from each category (a product, an experience, a publish-channel library) to confirm the new scripts execute without behavior change.
  6. Do not touch any moon.yml and do not touch the 6 mini-repo fixtures — both are out of scope.
LocationKindChange
solutions/determined/products/*/package.jsonmodifyAdd format, format:check, lint. No typecheck — no own tsconfig.json.
solutions/determined/experiences/*/package.jsonmodifySame additions as products.
solutions/determined/apps/*/package.jsonmodifyAdd missing format, format:check, lint, and (where a local tsconfig.json exists) typecheck.
solutions/determined/packages/*/package.jsonmodifySame additions as apps/*.
solutions/determined/package.jsonmodifyAdd missing format, format:check, lint to the workspace-root manifest (already has typecheck).
solutions/determined/.claude/skills/family-events/scripts/package.jsonmodifyAdd missing format, format:check, lint.
solutions/augmented/apps/learn_web/package.jsonmodifylint: "eslint . --fix" → lint: "eslint ."; add lint:fix: "eslint . --fix".
solutions/augmented/apps/vimit_prototype/package.jsonmodifylint: "nuxt prepare && eslint . --fix" → lint: "nuxt prepare && eslint ."; add lint:fix: "nuxt prepare && eslint . --fix".
solutions/augmented/**/package.jsonmodifyAdd missing baseline scripts to the remaining manifests in this tier.
solutions/ontological/**/package.jsonmodifyAdd missing baseline scripts to the 8 real manifests (the 6 tests/mini-repo/ fixtures are excluded).
solutions/agent-pants/**/package.jsonmodifyAdd missing baseline scripts across this tier’s manifests.

AC-1 through AC-3 share one file list, computed once: F=$(find solutions -name package.json -not -path '*/node_modules/*' -not -path '*/tests/mini-repo/*').

  • AC-1: for f in $F; do jq -e '.scripts.format and .scripts["format:check"] and .scripts.lint' "$f" >/dev/null || echo "$f"; done prints nothing.
  • AC-2: every manifest with a tsconfig.json in its own directory has a typecheck script: for f in $F; do d=$(dirname "$f"); [ -f "$d/tsconfig.json" ] && ! jq -e '.scripts.typecheck' "$f" >/dev/null && echo "$f"; done prints nothing.
  • AC-3: no lint or format:check script contains --fix or --write: for f in $F; do jq -r '.scripts.lint // "", .scripts["format:check"] // ""' "$f"; done | grep -E -- '--fix|--write' returns nothing.
  • AC-4: jq -r '.scripts.lint, .scripts["lint:fix"]' solutions/augmented/apps/learn_web/package.json prints eslint . then eslint . --fix.
  • AC-5: jq -r '.scripts.lint, .scripts["lint:fix"]' solutions/augmented/apps/vimit_prototype/package.json prints nuxt prepare && eslint . then nuxt prepare && eslint . --fix.
  • AC-6: git diff --stat -- solutions -- '*.moon/**' is empty — no moon.yml under solutions/ changed.
  • Milestone-level survey in the approved plan for M-3MGB: 153 of 162 tracked package.json are missing format:check, and learn_web/vimit_prototype are the repo’s only two gates that mutate the tree under a read-only verb name.

T-VAF5-a-standard-for-the-baseline-task-vocabulary, T-BBYP-shared-eslint-oxlint-layer


← Back to Tasks