yaaw-se 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +6 -2
  2. package/dist/installer/migrations/index.d.ts +2 -2
  3. package/dist/installer/migrations/index.js +2 -2
  4. package/dist/installer/migrations/project/index.js +2 -2
  5. package/dist/installer/migrations/project/index.js.map +1 -1
  6. package/dist/installer/migrations/project/v1-to-v2.d.ts +2 -0
  7. package/dist/installer/migrations/project/v1-to-v2.js +64 -0
  8. package/dist/installer/migrations/project/v1-to-v2.js.map +1 -0
  9. package/dist/installer/project-state.js +1 -0
  10. package/dist/installer/project-state.js.map +1 -1
  11. package/dist/installer/transaction.js +5 -0
  12. package/dist/installer/transaction.js.map +1 -1
  13. package/dist/installer/types.d.ts +5 -0
  14. package/dist/payload/bootstrap/claude-code.md +1 -1
  15. package/dist/payload/bootstrap/cline.md +1 -1
  16. package/dist/payload/bootstrap/codex.md +1 -1
  17. package/dist/payload/bootstrap/gemini-cli.md +1 -1
  18. package/dist/payload/integrations/codex/yaaw-runtime.md +1 -1
  19. package/dist/payload/payload-files.json +146 -111
  20. package/dist/payload/payload.json +1 -1
  21. package/dist/payload/skills/yaaw-create-spec/SKILL.md +6 -2
  22. package/dist/payload/skills/yaaw-create-ticket/SKILL.md +6 -2
  23. package/dist/payload/skills/yaaw-create-tickets/SKILL.md +6 -2
  24. package/dist/payload/skills/yaaw-implement/SKILL.md +6 -2
  25. package/dist/payload/skills/yaaw-orchestrator/SKILL.md +6 -2
  26. package/dist/payload/skills/yaaw-planner/SKILL.md +6 -2
  27. package/dist/payload/skills/yaaw-planning-review/SKILL.md +6 -2
  28. package/dist/payload/skills/yaaw-prd/SKILL.md +6 -2
  29. package/dist/payload/skills/yaaw-refine-prd/SKILL.md +6 -2
  30. package/dist/payload/skills/yaaw-repair/SKILL.md +6 -2
  31. package/dist/payload/skills/yaaw-review/SKILL.md +6 -2
  32. package/dist/payload/skills/yaaw-revise-prd/SKILL.md +6 -2
  33. package/dist/payload/yaaw-core/system/core/dispatch-execution.md +16 -53
  34. package/dist/payload/yaaw-core/system/core/invalidation.md +7 -38
  35. package/dist/payload/yaaw-core/system/core/io-contract.md +12 -45
  36. package/dist/payload/yaaw-core/system/core/lifecycle.md +11 -18
  37. package/dist/payload/yaaw-core/system/core/recovery.md +12 -26
  38. package/dist/payload/yaaw-core/system/core/routing.md +16 -31
  39. package/dist/payload/yaaw-core/system/core/state-model.md +7 -27
  40. package/dist/payload/yaaw-core/system/registries/handoff-policy.json +41 -59
  41. package/dist/payload/yaaw-core/system/registries/reconciliation-policy.json +17 -0
  42. package/dist/payload/yaaw-core/system/registries/role-io.json +15 -144
  43. package/dist/payload/yaaw-core/system/registries/skills.json +108 -12
  44. package/dist/payload/yaaw-core/system/roles/implementer.md +10 -13
  45. package/dist/payload/yaaw-core/system/roles/orchestrator.md +12 -17
  46. package/dist/payload/yaaw-core/system/roles/planner.md +9 -18
  47. package/dist/payload/yaaw-core/system/roles/reviewer.md +9 -14
  48. package/dist/payload/yaaw-core/system/schemas/engineering-v1.schema.json +15 -0
  49. package/dist/payload/yaaw-core/system/schemas/engineering-v2.schema.json +59 -0
  50. package/dist/payload/yaaw-core/system/schemas/engineering.schema.json +9 -12
  51. package/dist/payload/yaaw-core/system/schemas/evidence-v3.schema.json +111 -0
  52. package/dist/payload/yaaw-core/system/schemas/evidence.schema.json +3 -0
  53. package/dist/payload/yaaw-core/system/schemas/handoff.schema.json +3 -60
  54. package/dist/payload/yaaw-core/system/schemas/intent.schema.json +63 -8
  55. package/dist/payload/yaaw-core/system/schemas/observed-state.schema.json +55 -61
  56. package/dist/payload/yaaw-core/system/schemas/project-state-v1.schema.json +74 -0
  57. package/dist/payload/yaaw-core/system/schemas/project-state-v2.schema.json +251 -0
  58. package/dist/payload/yaaw-core/system/schemas/project-state.schema.json +9 -71
  59. package/dist/payload/yaaw-core/system/templates/engineering-research.md +2 -2
  60. package/dist/payload/yaaw-core/system/templates/engineering.md +2 -1
  61. package/dist/payload/yaaw-core/system/templates/evidence.json +2 -1
  62. package/dist/payload/yaaw-core/system/templates/handoff.json +7 -8
  63. package/dist/payload/yaaw-core/system/templates/intent.json +4 -3
  64. package/dist/payload/yaaw-core/system/templates/observed-state.json +6 -13
  65. package/dist/payload/yaaw-core/system/templates/project-state.json +2 -2
  66. package/dist/payload/yaaw-core/system/templates/review.md +4 -4
  67. package/dist/payload/yaaw-core/system/templates/spec.md +2 -2
  68. package/dist/payload/yaaw-core/system/templates/ticket.md +3 -3
  69. package/dist/payload/yaaw-core/system/tools/orchestration-engine.mjs +187 -0
  70. package/dist/payload/yaaw-core/system/tools/orchestration-runtime.mjs +46 -688
  71. package/dist/payload/yaaw-core/system/workflows/implementation/implement-ticket.md +9 -17
  72. package/dist/payload/yaaw-core/system/workflows/implementation/repair-ticket.md +7 -12
  73. package/dist/payload/yaaw-core/system/workflows/implementation/verify-ticket.md +9 -10
  74. package/dist/payload/yaaw-core/system/workflows/orchestration/reconcile-state.md +10 -13
  75. package/dist/payload/yaaw-core/system/workflows/orchestration/recover-interruption.md +9 -12
  76. package/dist/payload/yaaw-core/system/workflows/orchestration/route.md +14 -21
  77. package/dist/payload/yaaw-core/system/workflows/planning/create-spec.md +3 -0
  78. package/dist/payload/yaaw-core/system/workflows/planning/create-tickets.md +3 -0
  79. package/dist/payload/yaaw-core/system/workflows/planning/decision-frontier.md +3 -0
  80. package/dist/payload/yaaw-core/system/workflows/planning/replan.md +2 -0
  81. package/package.json +4 -3
@@ -1,26 +1,18 @@
1
1
  # Implement ticket
2
2
 
3
3
  ## Purpose
4
- Implement one admitted bounded ticket and produce reviewable evidence.
4
+ Implement one admitted bounded ticket while making interruption recoverable from durable facts.
5
5
 
6
6
  ## Preconditions
7
- Repository status is `READY`. One ticket must be admitted as `READY`, dependencies pass, source revisions are current, and repository state is consistent. If no exact eligible ticket is available, return `PRECONDITION_UNSATISFIED:NO_READY_TICKET` to Orchestrator; never create the missing ticket.
7
+ Reconciled state says the ticket is `READY`; source revisions are current; dependencies pass; repository identity is `READY`.
8
8
 
9
9
  ## Procedure
10
- 1. If no exact ticket was supplied, execute `implementation.select-ticket`; on any typed prerequisite result, return it to Orchestrator while preserving desired intent `IMPLEMENT`.
11
- 2. Load the ticket, referenced product/spec/decisions/research, `.yaaw-core/system/rules/changeability.md`, relevant .yaaw-core/system/rules/expertise, and relevant code only.
12
- 2. Record `READY -> IN_PROGRESS` with transition provenance and repository identity.
13
- 3. Establish the minimum authorized implementation surface before editing.
14
- 4. Implement strictly within allowed scope while applying only the changeability principles relevant to the changed surface: visible main path, domain naming, external boundaries, valid-state modeling, decision/side-effect separation, useful failures, and focused change scope.
15
- 5. Do not perform style-only rewrites, speculative abstractions, or unrelated cleanup. If a discovered maintainability issue is not necessary for safe ticket completion, leave it unchanged and surface it as a future planning candidate when materially valuable.
16
- 6. If a material missing decision appears, transition to `REPLAN_REQUIRED` or `BLOCKED`; do not invent it.
17
- 7. Execute `implementation.verify-ticket`, including targeted verification for materially affected changeability properties.
18
- 8. Persist evidence tied to ticket/spec revisions and repository identity.
19
- 9. Transition `IN_PROGRESS -> REVIEW_REQUIRED` only when required evidence exists.
10
+ 1. Read the exact handoff, state, ticket, source contracts, `.yaaw-core/system/rules/changeability.md`, applicable expertise, and minimal code.
11
+ 2. Before editing any application file, write immutable v3 `implementation_start` evidence with result `STARTED`, current ticket/spec revisions, workflow ID, and the exact pre-edit repository identity.
12
+ 3. Only after that durable start fact exists, implement strictly inside allowed scope.
13
+ 4. If a material contract gap appears, stop with `REPLAN_REQUIRED` or `BLOCKED`; do not invent it.
14
+ 5. Execute `implementation.verify-ticket`.
15
+ 6. Persist verification evidence. Do not mutate lifecycle state directly.
20
16
 
21
17
  ## Output
22
- Reviewable implementation plus evidence, or explicit replan/blocker state.
23
-
24
- ## Evidence identity
25
-
26
- Use the canonical repository identity utility for implementation evidence. Do not implement a private worktree digest. Changeability requirements remain in force.
18
+ Bounded implementation plus durable start/verification evidence or a typed stop. Orchestrator adopts `READY -> IN_PROGRESS` from start evidence and `IN_PROGRESS -> REVIEW_REQUIRED` only from current PASS verification.
@@ -4,19 +4,14 @@
4
4
  Correct implementation defects while keeping the accepted ticket/spec contract unchanged.
5
5
 
6
6
  ## Preconditions
7
- Ticket is `REPAIR_REQUIRED` and latest review result is `REPAIR` against the same current contract revisions.
7
+ Reconciled state is `REPAIR_REQUIRED` and the latest review result is `REPAIR` against the current contract.
8
8
 
9
9
  ## Procedure
10
- 1. Load the same ticket contract, `.yaaw-core/system/rules/changeability.md`, latest review findings, and relevant code/evidence.
11
- 2. Repair only what is needed to satisfy the unchanged plan and the concrete review findings; do not broaden scope into adjacent cleanup.
12
- 3. Apply the relevant changeability principles when they are part of the defect or needed for a safe repair.
13
- 4. If repair requires product/architecture contract changes, transition to `REPLAN_REQUIRED` and stop.
14
- 5. Rerun relevant verification, including any previously failed changeability check, and append a new evidence record.
15
- 6. Transition `REPAIR_REQUIRED -> REVIEW_REQUIRED` with provenance.
10
+ 1. Load state, the unchanged ticket contract, `.yaaw-core/system/rules/changeability.md`, latest review findings, prior evidence, and relevant code.
11
+ 2. Repair only the bounded findings; do not broaden scope.
12
+ 3. If repair requires product/architecture contract changes, return `REPLAN_REQUIRED`.
13
+ 4. Rerun `implementation.verify-ticket` and write a new v3 verification record distinct from evidence referenced by the REPAIR review.
14
+ 5. Never edit state. Orchestrator moves `REPAIR_REQUIRED -> REVIEW_REQUIRED` only after fresh PASS verification.
16
15
 
17
16
  ## Output
18
- Repaired reviewable implementation or replan/blocker result.
19
-
20
- ## Repair identity
21
-
22
- After bounded repair and verification, bind evidence to the canonical repository identity and return `REVIEW_REQUIRED`. Changeability requirements remain in force.
17
+ Repaired reviewable implementation with fresh verification evidence, or a typed replan/blocker result.
@@ -4,17 +4,16 @@
4
4
  Produce reproducible implementation evidence without self-accepting the ticket.
5
5
 
6
6
  ## Inputs
7
- Ticket requirements/tests, changed surface, project tooling/rules, current repository identity.
7
+ Exact handoff, reconciled state, ticket requirements/tests, changed surface, project rules/tooling, and current repository identity.
8
8
 
9
9
  ## Procedure
10
- 1. Run every test/check required by the ticket.
11
- 2. Add targeted regression checks justified by the changed surface.
12
- 3. For each materially relevant changeability principle from `.yaaw-core/system/rules/changeability.md`, verify the concrete property rather than a style preference. Examples include boundary mapping behavior, invalid-state rejection, decision logic independent of side effects, stable error identity, and focused-diff inspection.
13
- 4. Record commands, exit/result, relevant checks (including relevant changeability checks), ticket/spec revisions, and exact repository identity in `.yaaw-core/project/evidence/EVIDENCE-TASK-NNN-VK.json` using the evidence schema.
14
- 5. Preserve failed evidence; do not rewrite it as success.
10
+ 1. Run every ticket-required test/check and justified targeted regressions.
11
+ 2. Verify materially relevant changeability properties as concrete behavior.
12
+ 3. After verification commands finish, capture the canonical repository identity.
13
+ 4. Write a new immutable `.yaaw-core/project/evidence/EVIDENCE-TASK-NNN-VK.json` using `yaaw.evidence/v3`.
14
+ 5. Set `kind: implementation_verification` and exactly one result: `PASS`, `FAIL`, or `BLOCKED`.
15
+ 6. Preserve failed records; fixes produce a later evidence record.
16
+ 7. If verification proves implementation materially incomplete, return `IMPLEMENTATION_INCOMPLETE` to Orchestrator rather than silently reimplementing in this verification workflow.
15
17
 
16
18
  ## Output
17
- Evidence record(s). Verification never transitions a ticket to PASS; only Reviewer can accept.
18
-
19
- ## Verification identity
20
- After verification commands finish, invoke `.yaaw-core/system/tools/repository-identity.mjs` and record that exact output in `yaaw.evidence/v2`. Do not reserialize it through a second digest implementation. Replaceable `.yaaw-core/runtime/**` coordination files are excluded by canonical `yaaw-worktree-v2`; all semantic/project/application changes remain in the basis. Changeability requirements remain in force.
19
+ One explicit verification result. Only a current PASS record can authorize review admission; evidence-file existence alone never does.
@@ -1,22 +1,19 @@
1
1
  # Reconcile state
2
2
 
3
3
  ## Purpose
4
- Repair only evidence-backed state inconsistencies before routing semantic work.
4
+ Apply exactly one highest-priority evidence-backed state adoption or legal lifecycle transition.
5
5
 
6
6
  ## Inputs
7
- Current observed-state snapshot, state claims, artifact revisions, repository/evidence/review identity.
7
+ Current observed-state snapshot and its `reconciliation` object from the production orchestration engine.
8
8
 
9
9
  ## Procedure
10
- - apply `core/recovery.md`, `core/transitions.md`, and `core/invalidation.md`;
11
- - examples: `IN_PROGRESS` + implementation + passing verification + no review -> `REVIEW_REQUIRED`; stale `PASS` -> `REPLAN_REQUIRED` or `REVIEW_REQUIRED` according to cause; `READY` + implementation already present -> recover/inspect rather than duplicate;
12
- - never change product/architecture meaning during reconciliation;
13
- - every repaired state records transition reason/evidence and increments transition sequence.
10
+ 1. Require framework integrity `HEALTHY`.
11
+ 2. Run `node .yaaw-core/system/tools/orchestration-runtime.mjs --workspace <WORKSPACE_ROOT> --reconcile-one`.
12
+ 3. Apply only the one reconciliation returned by the engine; do not batch multiple discovered facts.
13
+ 4. Increment `transition_sequence` exactly once and persist provenance.
14
+ 5. Return immediately to `orchestration.route` so reality is observed again.
14
15
 
15
- ## Output
16
- Reconciled state or `BLOCKED` when the last trustworthy boundary cannot be proven.
17
-
18
- ## Framework boundary
16
+ Examples include ledger sync, accepted-spec adoption, ticket registration, implementation-start adoption, PASS-verification adoption, review-result adoption, acceptance invalidation, and project completion sync.
19
17
 
20
- Reconciliation is forbidden when the observed framework integrity status is not `HEALTHY`. Return the typed framework stop without changing ticket/project lifecycle state. A contradiction among canonical framework contracts is `FRAMEWORK_CONTRACT_INCONSISTENCY`; do not resolve it by editing the governing files.
21
-
22
- Reviewer-owned acceptance results are applied to `state.json` by Orchestrator only after the immutable review artifact is fresh and valid. Orchestrator records exactly the target implied by the review result and never invents an acceptance result.
18
+ ## Output
19
+ One reconciled mutation or a typed blocker. No semantic product/engineering/implementation/acceptance judgment is invented here.
@@ -4,18 +4,15 @@
4
4
  Resume safely after context/session failure without duplicating already-completed work.
5
5
 
6
6
  ## Inputs
7
- Active/recent artifact, state claims, runtime caches, repository identity/history/diff, verification/review evidence.
7
+ Reconciled state, durable artifacts, implementation-start/verification evidence, reviews, and repository identity.
8
8
 
9
9
  ## Procedure
10
- 1. Discard stale runtime handoffs/snapshots.
11
- 2. Identify the last trustworthy completed boundary.
12
- 3. If implementation exists, prefer verification/review over reimplementation when evidence supports it.
13
- 4. Reconcile only via legal transitions with provenance.
14
- 5. If the boundary cannot be proven, return `BLOCKED` with exact missing evidence.
15
- 6. Return control to `orchestration.route` for normal next-action selection.
10
+ 1. Discard stale runtime caches/handoffs.
11
+ 2. Identify the last trustworthy durable boundary.
12
+ 3. For `IN_PROGRESS`: current PASS verification is reconciled to review; valid start evidence without PASS verification routes to `implementation.verify-ticket`; missing start evidence requires explicit recovery/blocking proof.
13
+ 4. Never rerun full implementation merely because a worker response disappeared.
14
+ 5. A source-current review artifact is adopted before another Reviewer dispatch.
15
+ 6. Use only legal transitions with provenance; if the boundary cannot be proven, return `BLOCKED`.
16
16
 
17
- Never repeat destructive work merely because a context ended.
18
-
19
- ## Acceptance recovery
20
-
21
- A source-current stale `PASS` is recovered through `REVIEW_REQUIRED`. Do not dispatch Planner unless contract invalidation is independently proven.
17
+ ## Output
18
+ A safe next boundary or exact blocker, then control returns to `orchestration.route`.
@@ -1,34 +1,27 @@
1
1
  # Orchestration main loop
2
2
 
3
3
  ## Purpose
4
- Continuously restore project reality and execute one safe canonical workflow at a time until a true stop condition.
4
+ Continuously restore project reality and execute one safe canonical workflow at a time until the active intent is satisfied or a real stop occurs.
5
5
 
6
6
  ## Deterministic preparation
7
- Normal routing uses one command per basis:
8
-
7
+ For normal continuation:
9
8
  ```text
10
9
  node .yaaw-core/system/tools/orchestration-runtime.mjs --workspace <WORKSPACE_ROOT>
11
10
  ```
12
11
 
13
- This command performs framework integrity, canonical repository identity, durable metadata inspection, route selection, and handoff construction together. Do not separately reconstruct those stages in shell/Python/model reasoning.
12
+ For a public shortcut:
13
+ ```text
14
+ node .yaaw-core/system/tools/orchestration-runtime.mjs --workspace <WORKSPACE_ROOT> --invoke-skill <skill-id>
15
+ ```
14
16
 
15
17
  ## Procedure
16
18
  Repeat:
17
19
  1. run deterministic preparation once;
18
- 2. on `FRAMEWORK_STOP`, invalidate executable handoffs and stop with the typed framework failure;
19
- 3. on `RECONCILE_REQUIRED`, execute `orchestration.reconcile-state` only, then return to step 1;
20
- 4. on `ROOT_ACTION`, execute the returned Orchestrator workflow only, then return to step 1;
21
- 5. on `TERMINAL` or `BLOCKED`, stop;
22
- 6. on `DISPATCH_READY`, execute `orchestration.dispatch` for the persisted handoff;
23
- 7. require the dispatched execution to persist its authorized durable output or legal typed prerequisite/stop result;
24
- 8. whether dispatch reports success, failure, interruption, or no response, return to step 1 before another semantic workflow.
25
-
26
- `orchestration.inspect-state` and `orchestration.determine-next-action` remain canonical compatibility/debug workflows, but the normal loop does not execute them as separate model-driven reconstruction passes.
27
-
28
- There is no direct `worker A result -> worker B` authority chain. Reality reconstruction always sits between authority-role dispatches.
29
-
30
- ## Loop safety
31
- If the same repository basis, lifecycle state, route, and expected output repeat without durable mutation/evidence change, stop as `BLOCKED` with `no_progress` rather than spinning.
32
-
33
- ## Stop conditions
34
- Framework integrity unavailable/unhealthy; framework contract inconsistency; Human product/engineering answer required; evidence/permission unavailable; target workflow requires repository `IDENTITY` but status is not `READY`; active host/runtime policy blocks required isolation/profile fidelity; host requires approval for consequential action; or accepted scope is terminal `COMPLETE`.
20
+ 2. on `FRAMEWORK_STOP`, stop without lifecycle mutation;
21
+ 3. on `RECONCILE_REQUIRED`, apply exactly one reconciliation with `--reconcile-one`, then observe again;
22
+ 4. on `ROOT_ACTION`, execute only the returned Orchestrator recovery workflow, then observe again;
23
+ 5. on `DISPATCH_READY`, execute exactly the persisted handoff once;
24
+ 6. after any worker outcome or disappearance, discard worker text as authority and observe durable reality again;
25
+ 7. on `INTENT_COMPLETE`, `TERMINAL`, `BLOCKED`, or human input, stop.
26
+
27
+ No worker-to-worker authority chain exists. Every semantic successor is selected after reality reconstruction.
@@ -16,3 +16,6 @@ Current frontier readiness is `PASS`; its product/engineering revisions remain c
16
16
 
17
17
  ## Output
18
18
  One current accepted spec or an explicit planning gap.
19
+
20
+ ## Adoption
21
+ Planner writes the accepted spec only. Orchestrator detects the unique current accepted spec and adopts it into state on the next observation. Planner never writes `state.json`.
@@ -18,3 +18,6 @@ Source spec is `ACCEPTED`, product/engineering revisions remain current, and rep
18
18
 
19
19
  ## Output
20
20
  Dependency-aware tickets requiring no planning-chat memory and preserving focused, reviewable change boundaries.
21
+
22
+ ## Registration
23
+ Planner writes ticket artifacts only. Orchestrator registers current tickets into `state.json` one reconciliation at a time, preventing duplicate ticket creation when Planner output text is lost.
@@ -28,3 +28,6 @@ Assign/update a stable frontier ID. Only current-frontier decisions/research/pro
28
28
 
29
29
  ## Output
30
30
  Durable bounded frontier plus zero or more admitted research artifacts. The next route is research, question-round, PRD, readiness, or READY as the persisted partition requires.
31
+
32
+ ## Scope completion signal
33
+ Maintain `engineering.scope_status` on every meaningful frontier update. Use `UNKNOWN` when completion is not proven, `OPEN` when accepted product scope remains after this frontier, and `COMPLETE` only when durable product/planning evidence proves no accepted scope remains. Future ideas/non-goals do not keep accepted scope open.
@@ -20,3 +20,5 @@ Current engineering contract plus updated downstream admission state.
20
20
  ## Admission guard
21
21
 
22
22
  Repository identity change alone is not sufficient reason to replan. Require stale source/contract revisions or Reviewer `REPLAN` evidence.
23
+
24
+ Planner may revise engineering/spec/ticket artifacts but never writes lifecycle state directly. Orchestrator observes the durable revised contract and applies legal admission/invalidation transitions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yaaw-se",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "Artifact-first autonomous software engineering workflow installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,14 +20,15 @@
20
20
  "build:payload": "node scripts/build_npm_payload.mjs",
21
21
  "verify:payload": "node scripts/verify_npm_payload.mjs",
22
22
  "build": "npm run clean && npm run build:ts && npm run build:payload && npm run verify:payload",
23
- "validate:core": "python scripts/validate_core.py && python scripts/validate_behavior.py && python scripts/behavior_oracle.py",
23
+ "validate:core": "npm run validate:schemas && python scripts/validate_core.py && python scripts/validate_behavior.py && node scripts/run_lifecycle_cases.mjs",
24
24
  "validate:distribution": "python scripts/validate_distribution.py",
25
25
  "test:python": "python -m unittest discover -s tests -v",
26
26
  "test:cli": "npm run build:payload && vitest run tests/cli",
27
27
  "test": "npm run validate:core && npm run validate:distribution && npm run test:python && npm run test:cli",
28
28
  "prepack": "npm run test && npm run build",
29
29
  "smoke:tarball": "npm run build && node scripts/smoke_npm_tarball.mjs",
30
- "smoke:update": "npm run build && node scripts/smoke_npm_update.mjs"
30
+ "smoke:update": "npm run build && node scripts/smoke_npm_update.mjs",
31
+ "validate:schemas": "node scripts/validate_schemas.mjs"
31
32
  },
32
33
  "dependencies": {
33
34
  "@clack/prompts": "1.8.1",