musubix3 0.1.6 → 0.1.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 (51) hide show
  1. package/.github/plugin/marketplace.json +2 -2
  2. package/.github/skills/sdd-change/SKILL.md +27 -28
  3. package/.github/skills/sdd-design/SKILL.md +7 -1
  4. package/.github/skills/sdd-implementation/SKILL.md +4 -2
  5. package/.github/skills/sdd-quality/SKILL.md +11 -11
  6. package/.github/skills/sdd-requirements/SKILL.md +22 -8
  7. package/CHANGELOG.md +48 -0
  8. package/README-ja.md +54 -8
  9. package/README.md +59 -8
  10. package/dist/packages/analysis/src/adapters.d.ts +1 -1
  11. package/dist/packages/analysis/src/approval-record.d.ts +6 -0
  12. package/dist/packages/analysis/src/approval-record.js +43 -0
  13. package/dist/packages/analysis/src/approval-record.js.map +1 -0
  14. package/dist/packages/analysis/src/approval.d.ts +44 -0
  15. package/dist/packages/analysis/src/approval.js +136 -0
  16. package/dist/packages/analysis/src/approval.js.map +1 -0
  17. package/dist/packages/analysis/src/attestation.js +2 -6
  18. package/dist/packages/analysis/src/attestation.js.map +1 -1
  19. package/dist/packages/analysis/src/config.d.ts +6 -1
  20. package/dist/packages/analysis/src/config.js +27 -9
  21. package/dist/packages/analysis/src/config.js.map +1 -1
  22. package/dist/packages/analysis/src/files.d.ts +2 -0
  23. package/dist/packages/analysis/src/files.js +9 -0
  24. package/dist/packages/analysis/src/files.js.map +1 -1
  25. package/dist/packages/analysis/src/gate.d.ts +2 -0
  26. package/dist/packages/analysis/src/gate.js +33 -9
  27. package/dist/packages/analysis/src/gate.js.map +1 -1
  28. package/dist/packages/analysis/src/graph.js +13 -4
  29. package/dist/packages/analysis/src/graph.js.map +1 -1
  30. package/dist/packages/analysis/src/index.d.ts +3 -0
  31. package/dist/packages/analysis/src/index.js +3 -0
  32. package/dist/packages/analysis/src/index.js.map +1 -1
  33. package/dist/packages/analysis/src/mutation.d.ts +1 -1
  34. package/dist/packages/analysis/src/mutation.js +10 -1
  35. package/dist/packages/analysis/src/mutation.js.map +1 -1
  36. package/dist/packages/analysis/src/tdd.d.ts +2 -8
  37. package/dist/packages/analysis/src/tdd.js +18 -15
  38. package/dist/packages/analysis/src/tdd.js.map +1 -1
  39. package/dist/packages/analysis/src/test-report.d.ts +8 -0
  40. package/dist/packages/analysis/src/test-report.js +2 -0
  41. package/dist/packages/analysis/src/test-report.js.map +1 -0
  42. package/dist/packages/analysis/src/trace.d.ts +4 -0
  43. package/dist/packages/analysis/src/trace.js +16 -3
  44. package/dist/packages/analysis/src/trace.js.map +1 -1
  45. package/dist/packages/analysis/src/workflow.js +1 -1
  46. package/dist/packages/cli/src/main.js +61 -5
  47. package/dist/packages/cli/src/main.js.map +1 -1
  48. package/dist/packages/domain/src/requirements.js +43 -5
  49. package/dist/packages/domain/src/requirements.js.map +1 -1
  50. package/package.json +1 -1
  51. package/plugin.json +1 -1
@@ -3,13 +3,13 @@
3
3
  "owner": { "name": "nahisaho" },
4
4
  "metadata": {
5
5
  "description": "GitHub Copilot CLI specification-driven development skills",
6
- "version": "0.1.6"
6
+ "version": "0.1.8"
7
7
  },
8
8
  "plugins": [
9
9
  {
10
10
  "name": "musubix3",
11
11
  "source": ".",
12
- "version": "0.1.6",
12
+ "version": "0.1.8",
13
13
  "description": "Evidence-driven SDD without duplicating native Copilot capabilities."
14
14
  }
15
15
  ]
@@ -3,34 +3,33 @@ name: sdd-change
3
3
  description: "Use as the MANDATORY first Skill for requests to develop, build, create, implement, add, change, or fix software, including 「開発」「作成」「実装」. Start requirements and design before code, then propagate through tests, traceability, and quality evidence. ソフトウェア開発依頼では実装前に必ず要求定義・設計から開始。"
4
4
  ---
5
5
  # Integrated change workflow / 統合変更ワークフロー
6
- Mandatory entrypoint: never start implementation for a natural-language development request before eliciting and validating requirements and design; skip only for explicitly requested implementation of verified, approved artifacts.
6
+ /* @id CODE-SESSION-SCOPED-DEVELOPMENT-001
7
+ * @implements REQ-SESSION-SCOPED-DEVELOPMENT-001 REQ-SESSION-SCOPED-DEVELOPMENT-002
8
+ * @design DES-SESSION-SCOPED-DEVELOPMENT-001
9
+ */
10
+ Mandatory entrypoint: every new natural-language development request is a new change, even in an existing Copilot session; never reuse prior requirements, approvals, TDD, or change evidence unless the user explicitly names the existing change ID and asks to continue it. never start implementation before validating requirements/design; skip only for verified approved artifacts of that explicitly continued change.
11
+ Never infer approval; show `approval prepare <stage>` and record only its reviewed hash with `approval record <stage> --approver <name> --artifact-sha256 <hash> --confirm`.
7
12
  Follow the user's input language. Use native Copilot planning, editing, research, review, security review and subagents.
8
- Record exactly one final invocation outcome with `npx musubix3 workflow-record
9
- sdd-change complete --status <status>`; `change-record` separately proves phases.
13
+ Record exactly one final invocation outcome with `npx musubix3 workflow-record sdd-change complete --status <status>`; `change-record` separately proves phases.
10
14
  Run `workflow-sanitize <copilot.jsonl> <safe.jsonl>` before review, then
11
15
  `workflow-verify <safe.jsonl>`; it validates source-order lifecycles without
12
16
  assuming globally monotonic clocks unless `maxEventSkewMs` is explicitly set.
13
- For large logs, baseline-protect transcript total/line byte limits; never truncate or edit to bypass them.
17
+ Baseline-protect transcript byte limits; never truncate/edit to bypass them.
14
18
  For strict evidence, bind an expected UUID; GitHub origin needs strict OIDC.
15
19
  Never record multiple declarations per invocation; use only the configured CLI.
16
- For broad work, use short stages: initialize, requirements, design, real Red,
17
- Green, integration, trace/formal, quality. Report each result before the next prompt.
18
- For a staged change, run `change-record <CHANGE-ID> <phase> --requirement
19
- <REQ-ID...>` after each phase in this exact order: `impact`, `requirements`,
20
- `design`, `red`, `implementation`, `green`, `quality`.
21
- List only requirements whose statement or acceptance changes, classify each as
22
- functional/non-functional, and document other impacts separately. Each listed
23
- requirement needs fresh Red after `requirements` and Green after `implementation`.
20
+ For broad work, use short stages: initialize, requirements, requirements approval, design, design approval, real Red, Green, integration, trace/formal, quality, release approval. Report each result before the next prompt.
21
+ For a staged change, run `change-record <CHANGE-ID> <phase> --requirement <REQ-ID...>` after each phase in this exact order: `impact`, `requirements`, `design`, `red`, `implementation`, `green`, `quality`.
22
+ List only requirements whose statement/acceptance changes, classify each, and
23
+ document other impacts separately. Each needs fresh Red and Green.
24
24
  The CHANGE document must contain `Requirements:` with exactly those normative IDs.
25
25
  Persisted monotonic order, not wall-clock time, proves these phase boundaries.
26
26
  ## 1. Classify and inspect / 分類と事前確認
27
27
  1. Classify the request as a feature, behavior change, defect correction,
28
- refactoring, or documentation-only change.
29
- 2. Read the constitution and relevant requirements, designs, ADRs, code and tests.
30
- 3. Run `npx musubix3 trace impact <id-or-path> --json` and, when code exists,
31
- `graph index` plus `graph impact <symbol-or-path> --json`.
32
- 4. Separate confirmed intent, assumptions and open questions. When material context is missing, ask exactly one highest-priority question, wait for its answer, then repeat; never batch questions or finalize requirements, design or code while blockers remain.
33
-
28
+ refactoring, or documentation-only change. For a new program/feature, create
29
+ a fresh feature slug and CHANGE artifact; prior session context is not approval.
30
+ 2. Read the constitution and relevant requirements, designs, ADRs, code and tests, but treat prior-session artifacts as historical context unless continuation is explicit.
31
+ 3. Run `trace impact`; when code exists run `graph index` and `graph impact`.
32
+ 4. Separate confirmed intent, assumptions and open questions. When material context is missing, ask exactly one highest-priority question, wait, then repeat; never batch questions or finalize requirements, design or code while blockers remain.
34
33
  ## 2. Update specifications first / 仕様を先に更新
35
34
  1. For new or changed observable behavior, add or revise EARS requirements and
36
35
  measurable acceptance criteria before implementation. Preserve stable IDs
@@ -38,10 +37,11 @@ Persisted monotonic order, not wall-clock time, proves these phase boundaries.
38
37
  2. For a bug where implementation violates an existing requirement, keep that
39
38
  requirement and record that no specification change is needed. Never rewrite
40
39
  a requirement merely to make incorrect behavior appear compliant.
41
- 3. Update design responsibilities, interfaces, constraints and requirement links.
42
- Add or supersede an ADR only for a real architectural or trade-off decision.
40
+ 3. Update design responsibilities/interfaces/constraints/links and ADRs for real decisions.
43
41
  4. Run requirements, constitution and design validation. Stop on invalid
44
42
  artifacts instead of continuing with unapproved assumptions.
43
+ 5. Stop before design for explicit current `requirements` approval; stop before
44
+ Red/implementation for explicit current `design` approval. Changes re-open approval.
45
45
  ## 3. Implement and prove coverage / 実装と網羅性
46
46
  1. For observable behavior changes and defect fixes, write the smallest meaningful
47
47
  test first. Include its `TEST-*` ID in the test name/output and link it to the
@@ -57,10 +57,8 @@ Persisted monotonic order, not wall-clock time, proves these phase boundaries.
57
57
  3. Implement the smallest complete change, preserving the test, then run
58
58
  `tdd green` with the same IDs and command. Refactor only after Green and record
59
59
  `tdd refactor` after the refactored code passes.
60
- 4. Maintain unique `CODE-*` / `TEST-*` IDs and `@implements`, `@design`,
61
- `@verifies` annotations in the authoritative implementation and test files.
62
- Never create proxy or placeholder source files solely to satisfy trace coverage.
63
- Links are evidence locations, not proof by themselves.
60
+ 4. Maintain unique IDs and trace annotations in authoritative files; never add
61
+ proxies for coverage. Links locate evidence, not proof.
64
62
  5. Run focused tests, then configured typecheck, build and complete test commands.
65
63
  Documentation/prototypes may omit TDD only when policy allows; record the reason.
66
64
  ## 4. Rebuild evidence and finish / 根拠更新と完了
@@ -71,7 +69,8 @@ Documentation/prototypes may omit TDD only when policy allows; record the reason
71
69
  A required `formal` check enforces modeled fraction and configured solver.
72
70
  3. Run `gate --changed --json` and `status --json`. Repair failures, dangling
73
71
  links and stale evidence; never weaken requirements or policy to obtain green.
74
- 4. Complete only when required checks pass and `status.gate.ready` is true.
75
- Otherwise report the exact blocker and which artifacts remain incomplete.
76
- If the user limits the task to one phase, state which downstream work remains;
77
- never treat an implementation-only change as a complete SDD change.
72
+ 4. Treat the first otherwise-passing gate as the release candidate. Before any
73
+ release operation, prepare/show its exact hash, ask one human approve/reject
74
+ question and wait; record only that hash, then rerun gate/status.
75
+ 5. Complete only when required checks pass and `status.gate.ready` is true;
76
+ otherwise report blockers. One-phase work must state downstream work.
@@ -11,6 +11,8 @@ After the work, run `npx musubix3 workflow-record sdd-design complete --status
11
11
  completed` exactly once.
12
12
 
13
13
  1. Read requirements and constitution; identify requirement IDs before designing.
14
+ Run `approval validate` and stop unless current `requirements` approval is
15
+ explicitly recorded when required. A passing validator is not approval.
14
16
  2. Edit `.musubix/features/<slug>/design.md` with `## DES-FEATURE-001: Title`.
15
17
  Each component needs `Responsibilities:`, `Interfaces:`, `Constraints:`,
16
18
  `Requirements: REQ-FEATURE-001`, and `ADRs: ADR-0001`. Use `Depends-On:` for
@@ -23,4 +25,8 @@ completed` exactly once.
23
25
  5. Run `npx musubix3 trace build` then `npx musubix3 trace check`.
24
26
  Do not hand-edit `trace.json`. Ask native review to inspect coupling and
25
27
  coverage; use `sdd-formal-codegraph` for compiler-based impact checks.
26
- 6. Hand off responsibilities, interfaces, constraints and IDs to implementation.
28
+ 6. Before implementation or Red, run `approval prepare design`, show its exact
29
+ artifacts/hash, ask one explicit approve/reject question, then wait. On approval
30
+ only, record that hash with `approval record design --approver <name>
31
+ --artifact-sha256 <hash> --confirm`; rejection or changes require renewed review.
32
+ 7. Hand off responsibilities, interfaces, constraints and IDs to implementation.
@@ -13,9 +13,11 @@ After the work, run `npx musubix3 workflow-record sdd-implementation complete
13
13
  --status completed` exactly once.
14
14
 
15
15
  1. Before editing implementation code, verify that approved requirements and
16
- design artifacts exist and both validators pass. If either is absent or invalid,
16
+ design artifacts exist, both validators pass, and `approval validate` reports
17
+ current requirements and design approval. If either is absent, stale, or invalid,
17
18
  stop and return to `sdd-change`, invoking `sdd-requirements` and `sdd-design`
18
- as needed. Do not infer approval from a natural-language request such as
19
+ as needed. `tdd red` also enforces design approval. Do not infer approval from
20
+ validation or a natural-language request such as
19
21
  "develop", "build", 「開発」, 「作成」, or 「実装」.
20
22
  2. For behavior changes and bug fixes, write a meaningful failing test before
21
23
  implementation. Configure the selected command with `tddArgs` containing
@@ -3,15 +3,11 @@ name: sdd-quality
3
3
  description: "Use when deciding release readiness from actual checks, measurable policy, architecture and trace evidence, including incremental change checks. 品質ゲート・リリース判定時に使用。"
4
4
  ---
5
5
  # Quality / 品質
6
- Follow the user's input language (日本語 / English). Use native Copilot review and
7
- security review for their specialist reasoning; this skill does not replace them.
6
+ Follow the user's input language. Native review/security review remain separate.
8
7
  After the work, run `npx musubix3 workflow-record sdd-quality complete --status
9
8
  completed` exactly once.
10
- 1. Inspect `.musubix/config.json` and `.musubix/policy-baseline.json` before
11
- running commands. Only execute trusted project configuration. Commands are
12
- executable/argument arrays, not shell text. Never edit the baseline without
13
- explicit independent approval. Use only the exact `musubix3` CLI; never
14
- substitute similarly named npm packages.
9
+ 1. Inspect config/baseline first. Execute only trusted argument-array commands;
10
+ never edit baseline without independent approval or substitute another CLI.
15
11
  2. Configure real tests/build/typecheck commands and timeouts. Use an explicit
16
12
  custom report or a built-in Vitest/Jest, pytest, Go test, Cargo, JUnit or .NET
17
13
  adapter. Require executable native adapter contracts in CI; JUnit targets use
@@ -64,8 +60,9 @@ completed` exactly once.
64
60
  Treat zero executed or non-passing tests as incomplete evidence after exit zero; run `mutation doctor`;
65
61
  musubix3 validates evidence and does not bundle a mutation engine.
66
62
  Missing required tools, commands, artifacts or evidence block readiness.
67
- 5. Use native review/security-review as needed, recording their findings
68
- separately from machine evidence. Never fabricate review or test results.
63
+ A candidate gate may fail only because release approval is missing; that is
64
+ not final readiness and must not be described as pass.
65
+ 5. Record native review/security findings separately; never fabricate evidence.
69
66
  6. For static CI provenance, configure trusted Ed25519 public keys, freshness
70
67
  bounds and `ci-required`; sign `attestation payload` outside musubix3. For
71
68
  GitHub Actions identity, opt into strict `githubOidc`, derive the key-bound
@@ -74,5 +71,8 @@ completed` exactly once.
74
71
  check all configured claims; offline strict verification fails closed.
75
72
  Ensure the baseline protects CI-required mode, strict OIDC and key binding.
76
73
  Never store a private key or overstate OIDC as proof of arbitrary runner work.
77
- 7. Run `npx musubix3 status --json`; stale evidence must be refreshed. Report
78
- limitations and residual risks before handoff; no resident watcher or REPL.
74
+ 7. After required non-approval checks pass, run `approval prepare release`, show
75
+ its exact hash and residual risks, ask one approve/reject question, then wait.
76
+ On approval only record that hash with `approval record release --approver
77
+ <name> --artifact-sha256 <hash> --confirm`; rejection stops. Rerun gate/status;
78
+ stale approval blocks commit/push/publish/deploy; no resident watcher or REPL.
@@ -3,16 +3,23 @@ name: sdd-requirements
3
3
  description: "Use when eliciting, refining, or validating EARS requirements and measurable constitution rules for specification-driven development. 要求定義・EARS検証・憲章策定に使用。"
4
4
  ---
5
5
  # Requirements / 要求
6
-
6
+ /* @id CODE-SESSION-SCOPED-DEVELOPMENT-002
7
+ * @implements REQ-SESSION-SCOPED-DEVELOPMENT-001 REQ-SESSION-SCOPED-DEVELOPMENT-002
8
+ * @design DES-SESSION-SCOPED-DEVELOPMENT-002
9
+ */
7
10
  Respond and generate guidance in the user's input language (日本語 / English).
8
11
  Use Copilot's native planning, questions, research and editing; do not create an
9
12
  interview engine or research agent framework.
10
13
  After the work, run `npx musubix3 workflow-record sdd-requirements complete
11
14
  --status completed` exactly once.
12
15
 
13
- 1. Inspect `.musubix/constitution.md` and the feature's existing requirements.
14
- If absent, preview `npx musubix3 init --dry-run` before installing.
15
- 2. Use native planning to clarify scope, stakeholders, measurable acceptance and
16
+ 1. For every new natural-language development request, create/use a fresh
17
+ `.musubix/features/<new-slug>/requirements.md`; do not edit or reuse a prior
18
+ session's feature, approval, or change evidence unless continuation is explicit.
19
+ Inspect `.musubix/constitution.md` and relevant existing requirements only as
20
+ context. If absent, preview `npx musubix3 init --dry-run` before installing.
21
+ 2. Treat a request such as 「○○を開発」/"develop ○○" as requirements elicitation,
22
+ not permission to start coding. Use native planning to clarify scope, stakeholders, measurable acceptance and
16
23
  failure behavior. Separate assumptions from confirmed requirements. If required
17
24
  context is missing, use native elicitation to ask exactly one highest-priority
18
25
  question and wait for the answer before asking the next. Never batch questions.
@@ -23,12 +30,14 @@ After the work, run `npx musubix3 workflow-record sdd-requirements complete
23
30
  unique. Keep one obligation per entry; add `Acceptance: ...`.
24
31
  Acceptance must be non-placeholder and measurably testable. For semantics
25
32
  that must enter formal coverage, add strict one-line `Formal:` JSON using
26
- branch-scoped `conditional`, integer `numeric`, `temporal` with required
27
- `withinMs` and optional nonnegative `afterMs`, or deterministic `transition`.
33
+ branch-scoped `conditional` (`condition`/`consequence`), integer `numeric`
34
+ (`metric`/`operator` one of `<`,`<=`,`=`,`>=`,`>`/`value`), `temporal`
35
+ (`trigger`/`response`/required `withinMs`/optional nonnegative `afterMs`), or
36
+ deterministic `transition` (`from`/`event`/`to`).
28
37
  For numeric constraints, use compatible duration (`ms`/`s`/`min`) or size
29
38
  (`bytes`/`kib`/`mib`) units when conversion is intended; never translate
30
39
  arbitrary prose or incompatible dimensions by guesswork. A non-functional deterministic
31
- budget uses `Performance:` with `counter`, integer `max`, and `testId`.
40
+ budget uses strict one-line `Performance:` JSON with `counter`, integer `max`, and `testId`.
32
41
  4. Use all six controlled EARS forms as appropriate:
33
42
  - The system shall respond.
34
43
  - When an event occurs, the system shall respond.
@@ -41,5 +50,10 @@ After the work, run `npx musubix3 workflow-record sdd-requirements complete
41
50
  5. Validate with `npx musubix3 requirements validate <file> --json` and
42
51
  `npx musubix3 constitution validate --json`. Rules use `PRINC-001`, `RULE-001`,
43
52
  a supported `Metric:` and numeric `Limit:`. Validation is not execution evidence.
44
- 6. Hand off confirmed IDs and unresolved assumptions to `sdd-design`; use native
53
+ 6. Validation is not human approval. Before design, run `approval prepare
54
+ requirements`, show its exact artifacts/hash, ask one explicit approve/reject
55
+ question, then wait. On approval only, record that hash with `approval record
56
+ requirements --approver <name> --artifact-sha256 <hash> --confirm`; rejection
57
+ or any intervening artifact change stops and requires renewed review.
58
+ 7. Hand off confirmed IDs and unresolved assumptions to `sdd-design`; use native
45
59
  review for semantic completeness, not merely syntactic conformance.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,54 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.1.8 - 2026-09-09
6
+
7
+ - Treat every new natural-language development request as a fresh change, even within an existing Copilot session.
8
+ - Reuse requirements, approvals, TDD, and change evidence only when the user explicitly names the existing CHANGE ID and asks to continue it.
9
+ - Trace musubix3 Skill contracts without leaking installed Skill annotations into consumer project trace graphs.
10
+ - Add regression coverage for fresh-change routing and explicit continuation.
11
+
12
+ ## 0.1.7 - 2026-09-08
13
+
14
+ - Add artifact-bound human approval gates for requirements, design, and release.
15
+ `approval prepare` displays the exact review manifest/hash and `approval record`
16
+ requires that still-current hash plus explicit confirmation. Requirements
17
+ approval gates design validation, design approval gates TDD Red, and release
18
+ recording recomputes all required non-approval checks instead of trusting cached
19
+ quality evidence. Ordinary JSONL project inputs remain bound while recognized
20
+ logs are excluded. Status exposes every stage, Skills stop for one native human
21
+ decision, legacy configs remain compatible, and local approver text is documented
22
+ as non-authenticated.
23
+ - Fix TDD test fingerprints for non-TypeScript sources: an indented single-line
24
+ block annotation such as ` /* @id TEST-APP-001 */` hashed an empty slice, so
25
+ test mutation after Red and `TDD_TEST_STALE` went undetected in PHP, Java, Go,
26
+ Rust, Python and every other generic-comment language.
27
+ - Report the concrete cause of `REQ_FORMAL_SCHEMA` failures (unknown kind,
28
+ unexpected keys, missing keys, or the invalid field with its expected type)
29
+ instead of one opaque sentence.
30
+ - Explain in `REQ_EARS` when a statement declares more than one obligation, and
31
+ list the valid pattern vocabulary in `REQ_PATTERN`.
32
+ - List the known keys when configuration rejects an unknown key.
33
+ - Add `mutation identity` so deterministic `MUT-*` values no longer require a
34
+ two-pass gate-and-scrape workflow, and say where `mutation validate` looks for
35
+ evidence instead of silently passing when none is present.
36
+ - Report `TDD_EVIDENCE_REUSED` from the structured report hash rather than console
37
+ output, so quiet runners such as PHPUnit no longer produce false positives while
38
+ genuinely duplicated reports are still rejected.
39
+ - Detect Composer projects in `mutation doctor` and recommend Infection together
40
+ with the coverage driver it requires.
41
+ - Resolve PHP same-namespace trait composition and grouped `use A, B;` lists as
42
+ internal imports instead of reporting external dependencies, and drop
43
+ self-referencing trait edges.
44
+ - Name the concrete remedy in TDD legacy/Red/Green diagnostics: move
45
+ `.musubix/evidence/tdd.json` aside and re-record every cycle; there is no
46
+ partial prune and hand-editing is unsupported.
47
+ - Document the `musubix-json` report schema, that the `junit` adapter drives the
48
+ Java JUnit Platform Console launcher and not JUnit-XML producers such as
49
+ PHPUnit, and that PHP annotations must use `/* */` rather than PHPDoc because
50
+ PHPDoc reserves `@implements`. Align the `sdd-requirements` Skill with the
51
+ strict JSON `Formal:`/`Performance:` formats and their exact keys.
52
+
5
53
  ## 0.1.6 - 2026-09-08
6
54
 
7
55
  - Make `sdd-change` the mandatory first Skill for natural-language software
package/README-ja.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # musubix3
2
2
 
3
- **最新リリース v0.1.4 · GitHub Copilot CLI 専用 · Node.js ≥20 · TypeScript · MIT**
3
+ **最新リリース v0.1.8 · GitHub Copilot CLI 専用 · Node.js ≥20 · TypeScript · MIT**
4
4
 
5
5
  [English](README.md)
6
6
 
@@ -168,20 +168,27 @@ Copilot の提案を記号的検査で制約する構成であり、独自の「
168
168
  要求を確定しません。
169
169
 
170
170
  1. ネイティブ計画・調査で意図と測定可能な受入条件を明確化。
171
- 2. `change-record CHANGE-ID impact` を記録してから要求を編集・検証し、
172
- `requirements` checkpointを記録。
173
- 3. コンポーネントとADRを更新して `design` checkpointを記録。
171
+ 2. `change-record CHANGE-ID impact` を記録して要求を編集・検証し、
172
+ `requirements` checkpoint後、設計前にartifact-boundな人間の
173
+ `requirements`承認を明示的に記録。
174
+ 3. コンポーネントとADRを更新して `design` checkpointを記録し、
175
+ 実装前にartifact-boundな人間の`design`承認を明示的に記録。
174
176
  4. 注釈付きテストを作成し、構造化結果を伴う `tdd red` と変更の `red` を記録。
175
177
  5. 最小実装後に `implementation`、成功する `tdd green`、変更の `green` を記録。
176
178
  6. 注釈とグラフを更新して変更影響・網羅性を確認。
177
- 7. 実コマンドを設定して品質ゲートを実行。必要なレビューとセキュリティレビューは
178
- 別途ネイティブ機能で行い、未実施を成功扱いしない。
179
+ 7. 実コマンドで候補品質ゲートを実行。承認以外の必須checkがすべて合格した後、
180
+ 人間が`release`承認を記録してgate/statusを再実行し、その後だけ
181
+ commit・push・publish・deployへ進む。検証結果や自然言語から承認を推測しない。
179
182
 
180
183
  ```sh
181
184
  npx musubix3 requirements validate .musubix/features/example/requirements.md --json
182
185
  npx musubix3 constitution validate --json
186
+ npx musubix3 approval prepare requirements --json
187
+ npx musubix3 approval record requirements --approver "要求責任者" --artifact-sha256 "$REVIEWED_HASH" --confirm
183
188
  npx musubix3 design validate .musubix/features/example/design.md --json
184
189
  npx musubix3 design c4 .musubix/features/example/design.md
190
+ npx musubix3 approval prepare design --json
191
+ npx musubix3 approval record design --approver "設計責任者" --artifact-sha256 "$REVIEWED_HASH" --confirm
185
192
  npx musubix3 change-record CHANGE-0001 design --requirement REQ-EXAMPLE-001
186
193
  npx musubix3 tdd red TEST-EXAMPLE-001 --requirement REQ-EXAMPLE-001 --command test
187
194
  # テストを変更せず、最小限の振る舞いを実装
@@ -192,6 +199,10 @@ npx musubix3 trace check --strict --json
192
199
  npx musubix3 graph index
193
200
  npx musubix3 graph impact src/service.ts
194
201
  npx musubix3 gate --changed --json
202
+ npx musubix3 approval prepare release --json
203
+ npx musubix3 approval record release --approver "リリース責任者" --artifact-sha256 "$REVIEWED_HASH" --confirm
204
+ npx musubix3 gate --changed --json
205
+ npx musubix3 approval validate --json
195
206
  npx musubix3 status --json
196
207
  ```
197
208
 
@@ -210,6 +221,9 @@ npx musubix3 status --json
210
221
  | `constitution validate [file]` | 版・原則・測定可能な規則の定義検査 |
211
222
  | `design validate <file>` | 必須項目・要求ID・既存ADRの参照検査 |
212
223
  | `design c4 <file>` | 明示的なコンポーネントと依存から Mermaid 図 |
224
+ | `approval prepare <requirements\|design\|release>` | 人間が確認する決定的manifestとhashを表示 |
225
+ | `approval record <stage> --approver <name> --artifact-sha256 <hash> --confirm` | 確認済みhashが現在も一致するときだけ承認を記録 |
226
+ | `approval validate` | 各承認をapproved・missing・staleとして表示し、検証結果から承認を推測しない |
213
227
  | `trace build` | リポジトリ全体のグラフと機能別コピーを生成 |
214
228
  | `trace check [--strict]` | 未解決ID、陳腐化、必須要求の網羅性 |
215
229
  | `trace impact <id-or-path>` | 説明経路付きの双方向探索 |
@@ -226,6 +240,7 @@ npx musubix3 status --json
226
240
  | `model-correspondence validate` | Formal JSON→生成trace→正本passing testの証拠を再検証 |
227
241
  | `evidence refresh [--changed]` | 同じfail-closed gate pipelineで派生証拠を再生成 |
228
242
  | `mutation validate` | 要求scopeのschema-v1 killed-mutant証拠を再検証 |
243
+ | `mutation identity <REQ-ID> <TEST-ID> <sourcePath> <operator> <line> <column>` | mutation reportが宣言すべき決定的な`MUT-*`識別子を出力 |
229
244
  | `tdd validate` | 保存済みRed/Green/Refactorの順序、指紋、実行時間、hash-chainを検証 |
230
245
  | `tdd red\|green\|refactor <TEST-ID> --requirement <REQ-ID> --command <name>` | 検証可能なTDDフェーズを実行・記録 |
231
246
  | `workflow-record <skill> <phase> --status <status>` | 自己申告のworkflow宣言を記録 |
@@ -333,6 +348,9 @@ apostrophe commentを扱います。これらは文字列中の記載をリン
333
348
  その他の言語では対応する行commentまたはblock commentを使用します。
334
349
  Pythonは連続した`#` commentを使用してください。docstring内のannotationは無視され、
335
350
  `TRACE_ANNOTATION_IN_PYTHON_DOCSTRING`で配置変更を案内します。
351
+ PHPでは`/** ... */`のPHPDocではなく素の`/* ... */`を使用してください。PHPDocは
352
+ `@implements`をgeneric型宣言に予約しているため、要求IDの列挙はPHPStan/Psalmで
353
+ `phpDoc.parseError`になります。musubix3はどちらの形式も読み取ります。
336
354
  網羅率だけを満たす代理JS/TSファイルは作成しません。
337
355
 
338
356
  ```ts
@@ -396,6 +414,7 @@ version: 1.0.0
396
414
  "formal": { "solver": "none", "minModeledFraction": 0, "timeoutMs": 12000 },
397
415
  "mutation": { "mode": "compatible" },
398
416
  "tdd": { "redPreflightCommands": [] },
417
+ "approval": { "mode": "required" },
399
418
  "workflow": {
400
419
  "mode": "compatible",
401
420
  "maxAgeSeconds": 3600,
@@ -427,6 +446,18 @@ glob は `*` / `**` / `?` に対応し、外部依存は `npm:` 接頭辞で表
427
446
  `recommended`はstrict Code Graph、TDD、構造化test identityも要求し、
428
447
  `release`はformal、mutation、workflow、変更、performance、CI attestationを
429
448
  含む完全なrelease checkを要求します。不足設定や弱い設定を証拠で補ったことにはしません。
449
+ 新規初期化projectの`approval.mode`は`required`で、requirements・design・releaseの
450
+ 現在の承認を要求します。`approval`を省略した既存schema-v1 configは`compatible`として
451
+ 読み込みます。`approval prepare`で確認対象のmanifest/hashを表示し、その同じhashを
452
+ `approval record`へ渡します。途中変更は拒否され、記録後の対象artifact変更はstaleに
453
+ なります。承認fileはstage、approver、`approvedAt`、artifactごとのSHA-256、決定的
454
+ manifest SHA-256を保持します。release記録はcache済みquality evidenceを信頼せずgateを
455
+ 再計算し、承認以外の必須checkがすべてpassした場合だけ成功します。
456
+ approver文字列は明示的なlocal証拠であり、認証済みidentityではありません。
457
+ 独立identityが必要なrepositoryではprotected review、CODEOWNERS、CI/OIDCも併用します。
458
+ local承認証拠は明示的な意思を記録しますが、承認者の暗号学的な本人確認ではありません。
459
+ release権限はrepository review、CODEOWNERS/branch protection、またはCI/OIDC attestationで
460
+ 保護してください。
430
461
  `tdd.redPreflightCommands`にはformatter等のplain command名を指定でき、
431
462
  Redのtest fingerprintを取得する前に成功が必須です。
432
463
  通常ファイルの`pyvenv.cfg`を含む`.venv`と`venv`に加え、生成された
@@ -454,7 +485,7 @@ command reportでpassしたことを要求します。欠落・改変・stale・
454
485
  機械診断コードと詳細は英語、主要な状態表示は日英併記です。
455
486
 
456
487
  `.musubix/policy-baseline.json` は必須チェック、閾値、アーキテクチャ、
457
- Formalポリシー、mutation mode、workflow strict/session/freshness、CI必須attestation、
488
+ Formalポリシー、mutation/approval mode、workflow strict/session/freshness、CI必須attestation、
458
489
  strict OIDC identity/key binding、必須コマンド名の最低条件です。Red preflightを
459
490
  要求するbaselineは正規化済み`commands`定義も保持し、同名formatterへの
460
491
  すり替えを拒否します。弱体化は拒否され、
@@ -471,6 +502,13 @@ strict OIDC identity/key binding、必須コマンド名の最低条件です。
471
502
  TDD用コマンドには明示的な`tddArgs`と`tddReport`、または組込みの
472
503
  `vitest`、`jest`、`pytest`、`go-test`、`cargo`、`junit`、`dotnet` adapterが必要です。
473
504
  明示設定を優先し、adapterは対象引数を導出してnative JSON/JSONL/XMLを正規化します。
505
+ `junit` adapterはJava JUnit Platform Console launcherを駆動するものであり、
506
+ JUnit XMLを出力するだけのrunner(PHPUnit等)には使えません。その場合は
507
+ `tddArgs`/`tddReport`(および`testReport`)を明示設定してください。
508
+ custom `musubix-json` reportは
509
+ `{"schemaVersion":1,"tests":[{"id":"TEST-APP-001","status":"passed"}]}`形式で、
510
+ `status`は`passed`/`failed`/`skipped`/`error`、任意の`"operations":{"counter":12}`が
511
+ 決定的な性能counterを保持します。
474
512
  Vitest/Jestの無関係なskipped結果は対象TDDから除外します。pytestにはJSON pluginと
475
513
  `test_TEST_APP_001`形式、Goには`TEST-*`名のsubtest、Cargoには`test_app_001`形式、
476
514
  JUnitには正確な`@Tag("TEST-APP-001")`と、IDを含むmethod名または`@DisplayName`を推奨します。
@@ -487,7 +525,15 @@ Green前にはテスト以外のプロジェクト入力が変更されている
487
525
  TDDと変更checkpointは共通の単調order ledgerを持ち、Red/Green境界ではこれを
488
526
  正本とし、wall-clock時刻は情報用途に限定します。orderを持たない旧chronologyは
489
527
  明示的なmigration診断で失敗します。欠落・並べ替え・改変・孤立レコードは
490
- 証拠を無効にします。
528
+ 証拠を無効にします。旧cycleは新しい記録では置き換えられません。test scope付き
529
+ provenanceや有効なRed/Greenを欠くcycleがある場合は、`.musubix/evidence/tdd.json`を
530
+ 退避し、全cycleをclean Red baselineから再記録してください。部分的なprune commandは
531
+ 意図的に提供せず、証拠の手編集は未対応です。
532
+
533
+ 決定的なmutant識別子は`musubix3 mutation identity <REQ-ID> <TEST-ID> <sourcePath>
534
+ <operator> <line> <column>`で取得できます。`mutation validate`は
535
+ `.musubix/evidence/mutation.json`を読み取り、設定した`mutationReport`はgateがこの
536
+ ファイルへ変換するため、gate実行前の検証は「証拠なし」を報告します。
491
537
 
492
538
  CIではVitest、Jest、
493
539
  `pytest-json-report`付きpytest、Go test、Cargo test、固定版JUnit Platform Consoleの
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # musubix3
2
2
 
3
- **Latest release v0.1.4 · GitHub Copilot CLI only · Node.js ≥20 · TypeScript · MIT**
3
+ **Latest release v0.1.8 · GitHub Copilot CLI only · Node.js ≥20 · TypeScript · MIT**
4
4
 
5
5
  [日本語](README-ja.md)
6
6
 
@@ -172,22 +172,29 @@ question at a time and waits for the answer; it does not batch questions or
172
172
  finalize requirements while blockers remain.
173
173
 
174
174
  1. Use native planning/research to establish intent and measurable acceptance.
175
- 2. Record `change-record CHANGE-ID impact`, then edit/validate requirements and
176
- record the `requirements` checkpoint.
177
- 3. Design explicit components, record trade-offs in ADRs, then record `design`.
175
+ 2. Record `change-record CHANGE-ID impact`, edit/validate requirements, record
176
+ the `requirements` checkpoint, then obtain explicit artifact-bound human
177
+ `requirements` approval before design.
178
+ 3. Design explicit components, record trade-offs in ADRs, record `design`, then
179
+ obtain explicit artifact-bound human `design` approval before implementation.
178
180
  4. Write an annotated behavior test, record a structured failing `tdd red`, then
179
181
  record the change `red` checkpoint.
180
182
  5. Implement the minimum change, record `implementation`, run passing `tdd green`,
181
183
  then record `green` and refactor.
182
184
  6. Add trace annotations, build graphs, inspect impact and fix missing coverage.
183
- 7. Configure real checks, run `gate --changed`, use native review/security review,
184
- and inspect status before release. Do not weaken policy simply to pass.
185
+ 7. Configure real checks and run the candidate `gate --changed`. After every
186
+ required non-approval check passes, obtain explicit human `release` approval,
187
+ rerun the gate/status, and only then commit, push, publish, or deploy.
185
188
 
186
189
  ```sh
187
190
  npx musubix3 requirements validate .musubix/features/example/requirements.md --json
188
191
  npx musubix3 constitution validate --json
192
+ npx musubix3 approval prepare requirements --json
193
+ npx musubix3 approval record requirements --approver "Requirements Owner" --artifact-sha256 "$REVIEWED_HASH" --confirm
189
194
  npx musubix3 design validate .musubix/features/example/design.md --json
190
195
  npx musubix3 design c4 .musubix/features/example/design.md
196
+ npx musubix3 approval prepare design --json
197
+ npx musubix3 approval record design --approver "Design Owner" --artifact-sha256 "$REVIEWED_HASH" --confirm
191
198
  npx musubix3 change-record CHANGE-0001 design --requirement REQ-EXAMPLE-001
192
199
  npx musubix3 tdd red TEST-EXAMPLE-001 --requirement REQ-EXAMPLE-001 --command test
193
200
  # Implement the minimum behavior without changing the test.
@@ -198,6 +205,10 @@ npx musubix3 trace check --strict --json
198
205
  npx musubix3 graph index
199
206
  npx musubix3 graph impact src/service.ts
200
207
  npx musubix3 gate --changed --json
208
+ npx musubix3 approval prepare release --json
209
+ npx musubix3 approval record release --approver "Release Owner" --artifact-sha256 "$REVIEWED_HASH" --confirm
210
+ npx musubix3 gate --changed --json
211
+ npx musubix3 approval validate --json
201
212
  npx musubix3 status --json
202
213
  ```
203
214
 
@@ -217,6 +228,9 @@ validation/gate or requested solver failure, **2** usage, I/O or malformed confi
217
228
  | `constitution validate [file]` | Versioned principles and measurable rule definitions |
218
229
  | `design validate <file>` | Fields, global requirement IDs, existing ADR references |
219
230
  | `design c4 <file>` | Mermaid component/dependency diagram from explicit fields |
231
+ | `approval prepare <requirements\|design\|release>` | Display the exact deterministic manifest and hash for human review |
232
+ | `approval record <stage> --approver <name> --artifact-sha256 <hash> --confirm` | Record approval only if the reviewed hash is still current |
233
+ | `approval validate` | Report each approval as approved, missing, or stale; never infer approval from validation |
220
234
  | `trace build` | Generate global trace snapshot and feature copies |
221
235
  | `trace check [--strict]` | Dangling IDs, stale inputs/paths, mandatory coverage |
222
236
  | `trace impact <id-or-path>` | Bidirectional breadth-first traversal with explanation paths |
@@ -233,6 +247,7 @@ validation/gate or requested solver failure, **2** usage, I/O or malformed confi
233
247
  | `model-correspondence validate` | Revalidate Formal JSON → generated trace → authoritative passing test evidence |
234
248
  | `evidence refresh [--changed]` | Regenerate derived evidence through the same fail-closed gate pipeline |
235
249
  | `mutation validate` | Revalidate requirement-scoped schema-v1 killed-mutant evidence |
250
+ | `mutation identity <REQ-ID> <TEST-ID> <sourcePath> <operator> <line> <column>` | Print the deterministic `MUT-*` identity a mutation report must declare |
236
251
  | `tdd validate` | Validate persisted Red/Green/Refactor order, fingerprints, durations, and hash-chain evidence |
237
252
  | `tdd red\|green\|refactor <TEST-ID> --requirement <REQ-ID> --command <name>` | Execute and record a verified TDD phase |
238
253
  | `workflow-record <skill> <phase> --status <status>` | Record a compact self-reported workflow declaration |
@@ -347,6 +362,9 @@ export function guard() { /* actual implementation */ }
347
362
  ```
348
363
 
349
364
  One block comment per entity; comma/space-separated targets. `@design` is optional.
365
+ In PHP, use plain `/* ... */` blocks rather than `/** ... */` PHPDoc: PHPDoc reserves
366
+ `@implements` for generic type declarations, so PHPStan/Psalm report `phpDoc.parseError`
367
+ on requirement-ID lists inside doc comments. musubix3 reads either form.
350
368
  Mandatory implementation coverage may be direct or through a linked design;
351
369
  tests must directly verify a requirement. Links alone are not semantic proof.
352
370
  Each feature's `trace.json` holds the complete repository snapshot, including
@@ -396,6 +414,7 @@ Example `.musubix/config.json` (adapt command arguments to your own project):
396
414
  "formal": { "solver": "none", "minModeledFraction": 0, "timeoutMs": 12000 },
397
415
  "mutation": { "mode": "compatible" },
398
416
  "tdd": { "redPreflightCommands": [] },
417
+ "approval": { "mode": "required" },
399
418
  "workflow": {
400
419
  "mode": "compatible",
401
420
  "maxAgeSeconds": 3600,
@@ -428,6 +447,20 @@ commands fail closed. Globs support `*`, `**`, `?`; external imports use `npm:`.
428
447
  identities, and `release` requires the complete formal, mutation, workflow,
429
448
  change, performance and CI-attestation checks. Stronger profiles reject missing
430
449
  or weakened settings rather than silently filling in evidence.
450
+ `approval.mode` is `required` in newly initialized projects and requires current
451
+ requirements, design, and release approvals. Existing schema-v1 configs that
452
+ omit `approval` load in `compatible` mode. Approval files store the stage,
453
+ approver, `approvedAt`, per-artifact SHA-256 values, and a deterministic manifest
454
+ SHA-256. Run `approval prepare` before review and pass that exact hash to
455
+ `approval record`; an intervening change is rejected and later changes become
456
+ stale. Release recording recomputes the gate and requires every required
457
+ non-approval check to pass rather than trusting cached quality evidence.
458
+ The approver string is explicit local evidence, not authenticated identity;
459
+ repositories that require independent identity must also use protected review,
460
+ CODEOWNERS, or CI/OIDC controls.
461
+ Local approval evidence records explicit intent but does not cryptographically
462
+ authenticate the approver; protect release authorization with repository review,
463
+ CODEOWNERS/branch protection, or CI/OIDC attestation.
431
464
  Use `tdd.redPreflightCommands` to reference plain configured formatter commands;
432
465
  they must pass before Red captures the authoritative test fingerprint.
433
466
  Conventional `.venv` and `venv` Python environments containing a regular
@@ -460,7 +493,7 @@ unchanged test file. Test names/output must contain their `TEST-*` ID.
460
493
  diagnostic codes are stable English; human status labels include Japanese.
461
494
 
462
495
  `.musubix/policy-baseline.json` records minimum required checks, coverage,
463
- architecture, formal policy, mutation mode, workflow strict/session/freshness settings,
496
+ architecture, formal policy, mutation and approval modes, workflow strict/session/freshness settings,
464
497
  CI-required attestation and strict OIDC identity/key binding, and required
465
498
  command names. A baseline that requires TDD Red preflights must also include
466
499
  their normalized `commands` definitions, which prevents replacing a trusted
@@ -477,6 +510,13 @@ nonblocking unless a constitution rule rejects the measured count. No configured
477
510
  commands is skipped, not passed.
478
511
  TDD commands require either command-specific `tddArgs` plus a `tddReport`, or a
479
512
  built-in `vitest`, `jest`, `pytest`, `go-test`, `cargo`, `junit`, or `dotnet` adapter.
513
+ The `junit` adapter drives the Java JUnit Platform Console launcher, not arbitrary
514
+ JUnit-XML producers; runners such as PHPUnit that only emit JUnit XML need explicit
515
+ `tddArgs`/`tddReport` (or `testReport`) configuration instead. A custom
516
+ `musubix-json` report is a single-line-safe JSON document
517
+ `{"schemaVersion":1,"tests":[{"id":"TEST-APP-001","status":"passed"}]}` where
518
+ `status` is `passed`, `failed`, `skipped` or `error`, and an optional
519
+ `"operations":{"counter":12}` map carries deterministic performance counters.
480
520
  Explicit custom configuration takes precedence. Adapters derive targeted
481
521
  arguments and normalize native JSON/JSONL/XML into `musubix-json`. Vitest/Jest
482
522
  reports may contain unrelated skipped tests; targeted TDD selects only the
@@ -501,7 +541,18 @@ change checkpoints additionally share a persisted monotonic order ledger, which
501
541
  is authoritative for Red/Green boundaries; wall-clock timestamps are
502
542
  informational. Legacy chronology without order evidence fails with an explicit
503
543
  migration diagnostic. Missing, reordered, altered or orphaned records invalidate
504
- the evidence.
544
+ the evidence. Superseded cycles are never replaced by a newer recording: if any
545
+ cycle lacks test-scoped provenance or a valid Red/Green, move
546
+ `.musubix/evidence/tdd.json` aside and re-record every cycle from a clean Red
547
+ baseline. There is deliberately no partial prune command, and hand-editing the
548
+ evidence is unsupported.
549
+
550
+ Deterministic mutant identities come from `musubix3 mutation identity
551
+ <REQ-ID> <TEST-ID> <sourcePath> <operator> <line> <column>`, which prints the
552
+ exact `MUT-*` value a schema-v1 mutation report must declare. `mutation
553
+ validate` reads `.musubix/evidence/mutation.json`; a configured `mutationReport`
554
+ is converted into that file by the gate, so validating before a gate run reports
555
+ absent rather than passing evidence.
505
556
 
506
557
  CI executes isolated native contracts for Vitest, Jest,
507
558
  pytest with `pytest-json-report`, Go test, Cargo test, and the pinned JUnit
@@ -1,5 +1,5 @@
1
1
  import type { CommandConfig } from './config.js';
2
- import type { MusubixTestReport } from './tdd.js';
2
+ import type { MusubixTestReport } from './test-report.js';
3
3
  export type TestAdapter = NonNullable<CommandConfig['adapter']>;
4
4
  export interface AdapterInvocation {
5
5
  args: string[];
@@ -0,0 +1,6 @@
1
+ import { type ApprovalEvidence, type ApprovalStage } from './approval.js';
2
+ /** @id CODE-HUMAN-APPROVAL-GATES-002
3
+ * @implements REQ-HUMAN-APPROVAL-GATES-001 REQ-HUMAN-APPROVAL-GATES-006
4
+ * @design DES-APPROVAL-002 DES-APPROVAL-003
5
+ */
6
+ export declare function recordApproval(root: string, stage: ApprovalStage, approver: string, expectedArtifactSha256: string): Promise<ApprovalEvidence>;