@sun-asterisk/sungen 3.2.35 → 3.3.0-alpha.10
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.
- package/dist/basis/anchor-grammar.d.ts +32 -0
- package/dist/basis/anchor-grammar.d.ts.map +1 -0
- package/dist/basis/anchor-grammar.js +82 -0
- package/dist/basis/anchor-grammar.js.map +1 -0
- package/dist/basis/anchor-hash.d.ts +6 -0
- package/dist/basis/anchor-hash.d.ts.map +1 -0
- package/dist/basis/anchor-hash.js +28 -0
- package/dist/basis/anchor-hash.js.map +1 -0
- package/dist/basis/bm51-tables.d.ts +20 -0
- package/dist/basis/bm51-tables.d.ts.map +1 -0
- package/dist/basis/bm51-tables.js +71 -0
- package/dist/basis/bm51-tables.js.map +1 -0
- package/dist/basis/extract-spec-anchors.d.ts +39 -0
- package/dist/basis/extract-spec-anchors.d.ts.map +1 -0
- package/dist/basis/extract-spec-anchors.js +81 -0
- package/dist/basis/extract-spec-anchors.js.map +1 -0
- package/dist/basis/migration-sentinel.d.ts +47 -0
- package/dist/basis/migration-sentinel.d.ts.map +1 -0
- package/dist/basis/migration-sentinel.js +219 -0
- package/dist/basis/migration-sentinel.js.map +1 -0
- package/dist/basis/spec-frontmatter.d.ts +18 -0
- package/dist/basis/spec-frontmatter.d.ts.map +1 -0
- package/dist/basis/spec-frontmatter.js +55 -0
- package/dist/basis/spec-frontmatter.js.map +1 -0
- package/dist/basis/spec-sections.d.ts +18 -0
- package/dist/basis/spec-sections.d.ts.map +1 -0
- package/dist/basis/spec-sections.js +27 -0
- package/dist/basis/spec-sections.js.map +1 -0
- package/dist/basis/test-basis-schema.d.ts +28 -0
- package/dist/basis/test-basis-schema.d.ts.map +1 -0
- package/dist/basis/test-basis-schema.js +141 -0
- package/dist/basis/test-basis-schema.js.map +1 -0
- package/dist/capabilities/discover.d.ts +4 -0
- package/dist/capabilities/discover.d.ts.map +1 -1
- package/dist/capabilities/discover.js +16 -2
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/capabilities/registry.d.ts +15 -0
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/cli/case-triage-hint.d.ts +14 -0
- package/dist/cli/case-triage-hint.d.ts.map +1 -0
- package/dist/cli/case-triage-hint.js +23 -0
- package/dist/cli/case-triage-hint.js.map +1 -0
- package/dist/cli/commands/audit.js +1 -1
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/contract-derive-command.d.ts +12 -0
- package/dist/cli/commands/contract-derive-command.d.ts.map +1 -0
- package/dist/cli/commands/contract-derive-command.js +113 -0
- package/dist/cli/commands/contract-derive-command.js.map +1 -0
- package/dist/cli/commands/contract.d.ts +20 -0
- package/dist/cli/commands/contract.d.ts.map +1 -0
- package/dist/cli/commands/contract.js +195 -0
- package/dist/cli/commands/contract.js.map +1 -0
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +109 -19
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/gate.d.ts.map +1 -1
- package/dist/cli/commands/gate.js +2 -1
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +17 -3
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/journey.d.ts.map +1 -1
- package/dist/cli/commands/journey.js +47 -17
- package/dist/cli/commands/journey.js.map +1 -1
- package/dist/cli/commands/next.d.ts +13 -0
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +98 -9
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/triage.d.ts +2 -1
- package/dist/cli/commands/triage.d.ts.map +1 -1
- package/dist/cli/commands/triage.js +45 -3
- package/dist/cli/commands/triage.js.map +1 -1
- package/dist/cli/commands/update.d.ts +11 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +37 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +24 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/json-error-on-exit.d.ts +34 -0
- package/dist/cli/json-error-on-exit.d.ts.map +1 -0
- package/dist/cli/json-error-on-exit.js +63 -0
- package/dist/cli/json-error-on-exit.js.map +1 -0
- package/dist/cli/project-sungen-invocation.d.ts +13 -0
- package/dist/cli/project-sungen-invocation.d.ts.map +1 -0
- package/dist/cli/project-sungen-invocation.js +95 -0
- package/dist/cli/project-sungen-invocation.js.map +1 -0
- package/dist/cli/run-command-hints.d.ts +9 -0
- package/dist/cli/run-command-hints.d.ts.map +1 -0
- package/dist/cli/run-command-hints.js +84 -0
- package/dist/cli/run-command-hints.js.map +1 -0
- package/dist/cli/waiting-for-you-block.d.ts +18 -0
- package/dist/cli/waiting-for-you-block.d.ts.map +1 -0
- package/dist/cli/waiting-for-you-block.js +22 -0
- package/dist/cli/waiting-for-you-block.js.map +1 -0
- package/dist/contract/accept-opaque-steps.d.ts +3 -0
- package/dist/contract/accept-opaque-steps.d.ts.map +1 -0
- package/dist/contract/accept-opaque-steps.js +114 -0
- package/dist/contract/accept-opaque-steps.js.map +1 -0
- package/dist/contract/approve-contract.d.ts +38 -0
- package/dist/contract/approve-contract.d.ts.map +1 -0
- package/dist/contract/approve-contract.js +93 -0
- package/dist/contract/approve-contract.js.map +1 -0
- package/dist/contract/assertion-matcher-vocabulary.d.ts +24 -0
- package/dist/contract/assertion-matcher-vocabulary.d.ts.map +1 -0
- package/dist/contract/assertion-matcher-vocabulary.js +100 -0
- package/dist/contract/assertion-matcher-vocabulary.js.map +1 -0
- package/dist/contract/build-contract-verdict.d.ts +32 -0
- package/dist/contract/build-contract-verdict.d.ts.map +1 -0
- package/dist/contract/build-contract-verdict.js +123 -0
- package/dist/contract/build-contract-verdict.js.map +1 -0
- package/dist/contract/build-trace-conformance.d.ts +22 -0
- package/dist/contract/build-trace-conformance.d.ts.map +1 -0
- package/dist/contract/build-trace-conformance.js +151 -0
- package/dist/contract/build-trace-conformance.js.map +1 -0
- package/dist/contract/classify-contract-change.d.ts +24 -0
- package/dist/contract/classify-contract-change.d.ts.map +1 -0
- package/dist/contract/classify-contract-change.js +98 -0
- package/dist/contract/classify-contract-change.js.map +1 -0
- package/dist/contract/classify-contract-unit.d.ts +18 -0
- package/dist/contract/classify-contract-unit.d.ts.map +1 -0
- package/dist/contract/classify-contract-unit.js +49 -0
- package/dist/contract/classify-contract-unit.js.map +1 -0
- package/dist/contract/classify-trace-conformance.d.ts +47 -0
- package/dist/contract/classify-trace-conformance.d.ts.map +1 -0
- package/dist/contract/classify-trace-conformance.js +164 -0
- package/dist/contract/classify-trace-conformance.js.map +1 -0
- package/dist/contract/contract-git.d.ts +24 -0
- package/dist/contract/contract-git.d.ts.map +1 -0
- package/dist/contract/contract-git.js +144 -0
- package/dist/contract/contract-git.js.map +1 -0
- package/dist/contract/contract-hash.d.ts +7 -0
- package/dist/contract/contract-hash.d.ts.map +1 -0
- package/dist/contract/contract-hash.js +38 -0
- package/dist/contract/contract-hash.js.map +1 -0
- package/dist/contract/contract-report-file.d.ts +4 -0
- package/dist/contract/contract-report-file.d.ts.map +1 -0
- package/dist/contract/contract-report-file.js +60 -0
- package/dist/contract/contract-report-file.js.map +1 -0
- package/dist/contract/contract-schema.d.ts +92 -0
- package/dist/contract/contract-schema.d.ts.map +1 -0
- package/dist/contract/contract-schema.js +124 -0
- package/dist/contract/contract-schema.js.map +1 -0
- package/dist/contract/contract-units.d.ts +12 -0
- package/dist/contract/contract-units.d.ts.map +1 -0
- package/dist/contract/contract-units.js +96 -0
- package/dist/contract/contract-units.js.map +1 -0
- package/dist/contract/contracts-lock-file.d.ts +24 -0
- package/dist/contract/contracts-lock-file.d.ts.map +1 -0
- package/dist/contract/contracts-lock-file.js +141 -0
- package/dist/contract/contracts-lock-file.js.map +1 -0
- package/dist/contract/data-normalize.d.ts +10 -0
- package/dist/contract/data-normalize.d.ts.map +1 -0
- package/dist/contract/data-normalize.js +110 -0
- package/dist/contract/data-normalize.js.map +1 -0
- package/dist/contract/derive-free-feature.d.ts +49 -0
- package/dist/contract/derive-free-feature.d.ts.map +1 -0
- package/dist/contract/derive-free-feature.js +183 -0
- package/dist/contract/derive-free-feature.js.map +1 -0
- package/dist/contract/field-semantic-redaction.d.ts +21 -0
- package/dist/contract/field-semantic-redaction.d.ts.map +1 -0
- package/dist/contract/field-semantic-redaction.js +118 -0
- package/dist/contract/field-semantic-redaction.js.map +1 -0
- package/dist/contract/free-feature-blocks.d.ts +10 -0
- package/dist/contract/free-feature-blocks.d.ts.map +1 -0
- package/dist/contract/free-feature-blocks.js +94 -0
- package/dist/contract/free-feature-blocks.js.map +1 -0
- package/dist/contract/lock-secret-guard.d.ts +22 -0
- package/dist/contract/lock-secret-guard.d.ts.map +1 -0
- package/dist/contract/lock-secret-guard.js +134 -0
- package/dist/contract/lock-secret-guard.js.map +1 -0
- package/dist/contract/lock-vs-git-head.d.ts +26 -0
- package/dist/contract/lock-vs-git-head.d.ts.map +1 -0
- package/dist/contract/lock-vs-git-head.js +28 -0
- package/dist/contract/lock-vs-git-head.js.map +1 -0
- package/dist/contract/normalize-contract-step.d.ts +21 -0
- package/dist/contract/normalize-contract-step.d.ts.map +1 -0
- package/dist/contract/normalize-contract-step.js +70 -0
- package/dist/contract/normalize-contract-step.js.map +1 -0
- package/dist/contract/normalize-feature-steps.d.ts +7 -0
- package/dist/contract/normalize-feature-steps.d.ts.map +1 -0
- package/dist/contract/normalize-feature-steps.js +127 -0
- package/dist/contract/normalize-feature-steps.js.map +1 -0
- package/dist/contract/oracle-strength.d.ts +12 -0
- package/dist/contract/oracle-strength.d.ts.map +1 -0
- package/dist/contract/oracle-strength.js +88 -0
- package/dist/contract/oracle-strength.js.map +1 -0
- package/dist/contract/project-contract-blockers.d.ts +10 -0
- package/dist/contract/project-contract-blockers.d.ts.map +1 -0
- package/dist/contract/project-contract-blockers.js +75 -0
- package/dist/contract/project-contract-blockers.js.map +1 -0
- package/dist/contract/record-contract-approval.d.ts +36 -0
- package/dist/contract/record-contract-approval.d.ts.map +1 -0
- package/dist/contract/record-contract-approval.js +126 -0
- package/dist/contract/record-contract-approval.js.map +1 -0
- package/dist/contract/render-free-gherkin.d.ts +42 -0
- package/dist/contract/render-free-gherkin.d.ts.map +1 -0
- package/dist/contract/render-free-gherkin.js +147 -0
- package/dist/contract/render-free-gherkin.js.map +1 -0
- package/dist/contract/render-trace-sentence.d.ts +20 -0
- package/dist/contract/render-trace-sentence.d.ts.map +1 -0
- package/dist/contract/render-trace-sentence.js +109 -0
- package/dist/contract/render-trace-sentence.js.map +1 -0
- package/dist/contract/render-trace-target.d.ts +14 -0
- package/dist/contract/render-trace-target.d.ts.map +1 -0
- package/dist/contract/render-trace-target.js +70 -0
- package/dist/contract/render-trace-target.js.map +1 -0
- package/dist/contract/resolve-unit-trace-identities.d.ts +20 -0
- package/dist/contract/resolve-unit-trace-identities.d.ts.map +1 -0
- package/dist/contract/resolve-unit-trace-identities.js +62 -0
- package/dist/contract/resolve-unit-trace-identities.js.map +1 -0
- package/dist/contract/trace/collect-trace-evidence.d.ts +44 -0
- package/dist/contract/trace/collect-trace-evidence.d.ts.map +1 -0
- package/dist/contract/trace/collect-trace-evidence.js +219 -0
- package/dist/contract/trace/collect-trace-evidence.js.map +1 -0
- package/dist/contract/trace/identity-cache.d.ts +19 -0
- package/dist/contract/trace/identity-cache.d.ts.map +1 -0
- package/dist/contract/trace/identity-cache.js +104 -0
- package/dist/contract/trace/identity-cache.js.map +1 -0
- package/dist/contract/trace/read-file-once.d.ts +20 -0
- package/dist/contract/trace/read-file-once.d.ts.map +1 -0
- package/dist/contract/trace/read-file-once.js +135 -0
- package/dist/contract/trace/read-file-once.js.map +1 -0
- package/dist/contract/trace/scenario-id-claims.d.ts +11 -0
- package/dist/contract/trace/scenario-id-claims.d.ts.map +1 -0
- package/dist/contract/trace/scenario-id-claims.js +89 -0
- package/dist/contract/trace/scenario-id-claims.js.map +1 -0
- package/dist/contract/trace/select-final-attempt.d.ts +29 -0
- package/dist/contract/trace/select-final-attempt.d.ts.map +1 -0
- package/dist/contract/trace/select-final-attempt.js +119 -0
- package/dist/contract/trace/select-final-attempt.js.map +1 -0
- package/dist/contract/trace/snapshot-html-renderer.d.ts +31 -0
- package/dist/contract/trace/snapshot-html-renderer.d.ts.map +1 -0
- package/dist/contract/trace/snapshot-html-renderer.js +172 -0
- package/dist/contract/trace/snapshot-html-renderer.js.map +1 -0
- package/dist/contract/trace/snapshot-resolver.d.ts +21 -0
- package/dist/contract/trace/snapshot-resolver.d.ts.map +1 -0
- package/dist/contract/trace/snapshot-resolver.js +65 -0
- package/dist/contract/trace/snapshot-resolver.js.map +1 -0
- package/dist/contract/trace/snapshot-store.d.ts +66 -0
- package/dist/contract/trace/snapshot-store.d.ts.map +1 -0
- package/dist/contract/trace/snapshot-store.js +173 -0
- package/dist/contract/trace/snapshot-store.js.map +1 -0
- package/dist/contract/trace/target-identity.d.ts +74 -0
- package/dist/contract/trace/target-identity.d.ts.map +1 -0
- package/dist/contract/trace/target-identity.js +68 -0
- package/dist/contract/trace/target-identity.js.map +1 -0
- package/dist/contract/trace/test-step-join.d.ts +65 -0
- package/dist/contract/trace/test-step-join.d.ts.map +1 -0
- package/dist/contract/trace/test-step-join.js +80 -0
- package/dist/contract/trace/test-step-join.js.map +1 -0
- package/dist/contract/trace/trace-binding.d.ts +22 -0
- package/dist/contract/trace/trace-binding.d.ts.map +1 -0
- package/dist/contract/trace/trace-binding.js +91 -0
- package/dist/contract/trace/trace-binding.js.map +1 -0
- package/dist/contract/trace/trace-file-reader.d.ts +47 -0
- package/dist/contract/trace/trace-file-reader.d.ts.map +1 -0
- package/dist/contract/trace/trace-file-reader.js +137 -0
- package/dist/contract/trace/trace-file-reader.js.map +1 -0
- package/dist/contract/trace/trace-fingerprint.d.ts +22 -0
- package/dist/contract/trace/trace-fingerprint.d.ts.map +1 -0
- package/dist/contract/trace/trace-fingerprint.js +96 -0
- package/dist/contract/trace/trace-fingerprint.js.map +1 -0
- package/dist/contract/trace/trace-freshness.d.ts +27 -0
- package/dist/contract/trace/trace-freshness.d.ts.map +1 -0
- package/dist/contract/trace/trace-freshness.js +146 -0
- package/dist/contract/trace/trace-freshness.js.map +1 -0
- package/dist/contract/trace/trace-identity-resolution.d.ts +28 -0
- package/dist/contract/trace/trace-identity-resolution.d.ts.map +1 -0
- package/dist/contract/trace/trace-identity-resolution.js +87 -0
- package/dist/contract/trace/trace-identity-resolution.js.map +1 -0
- package/dist/contract/trace/trace-run-record.d.ts +32 -0
- package/dist/contract/trace/trace-run-record.d.ts.map +1 -0
- package/dist/contract/trace/trace-run-record.js +135 -0
- package/dist/contract/trace/trace-run-record.js.map +1 -0
- package/dist/contract/trace/trace-steps.d.ts +19 -0
- package/dist/contract/trace/trace-steps.d.ts.map +1 -0
- package/dist/contract/trace/trace-steps.js +79 -0
- package/dist/contract/trace/trace-steps.js.map +1 -0
- package/dist/contract/trace/trace-zip-limits.d.ts +45 -0
- package/dist/contract/trace/trace-zip-limits.d.ts.map +1 -0
- package/dist/contract/trace/trace-zip-limits.js +52 -0
- package/dist/contract/trace/trace-zip-limits.js.map +1 -0
- package/dist/contract/trace/trace-zip-reader.d.ts +10 -0
- package/dist/contract/trace/trace-zip-reader.d.ts.map +1 -0
- package/dist/contract/trace/trace-zip-reader.js +186 -0
- package/dist/contract/trace/trace-zip-reader.js.map +1 -0
- package/dist/contract/verify-approval-decisions.d.ts +5 -0
- package/dist/contract/verify-approval-decisions.d.ts.map +1 -0
- package/dist/contract/verify-approval-decisions.js +109 -0
- package/dist/contract/verify-approval-decisions.js.map +1 -0
- package/dist/decisions/append-decision.d.ts +12 -0
- package/dist/decisions/append-decision.d.ts.map +1 -0
- package/dist/decisions/append-decision.js +73 -0
- package/dist/decisions/append-decision.js.map +1 -0
- package/dist/decisions/confirmed-decision-commands.d.ts +41 -0
- package/dist/decisions/confirmed-decision-commands.d.ts.map +1 -0
- package/dist/decisions/confirmed-decision-commands.js +190 -0
- package/dist/decisions/confirmed-decision-commands.js.map +1 -0
- package/dist/decisions/decision-file.d.ts +31 -0
- package/dist/decisions/decision-file.d.ts.map +1 -0
- package/dist/decisions/decision-file.js +139 -0
- package/dist/decisions/decision-file.js.map +1 -0
- package/dist/decisions/decision-identity.d.ts +12 -0
- package/dist/decisions/decision-identity.d.ts.map +1 -0
- package/dist/decisions/decision-identity.js +78 -0
- package/dist/decisions/decision-identity.js.map +1 -0
- package/dist/decisions/decision-integrity-check.d.ts +12 -0
- package/dist/decisions/decision-integrity-check.d.ts.map +1 -0
- package/dist/decisions/decision-integrity-check.js +102 -0
- package/dist/decisions/decision-integrity-check.js.map +1 -0
- package/dist/decisions/decision-schema.d.ts +43 -0
- package/dist/decisions/decision-schema.d.ts.map +1 -0
- package/dist/decisions/decision-schema.js +76 -0
- package/dist/decisions/decision-schema.js.map +1 -0
- package/dist/decisions/decision-source.d.ts +2 -0
- package/dist/decisions/decision-source.d.ts.map +1 -0
- package/dist/decisions/decision-source.js +18 -0
- package/dist/decisions/decision-source.js.map +1 -0
- package/dist/decisions/exclusive-file-create.d.ts +3 -0
- package/dist/decisions/exclusive-file-create.d.ts.map +1 -0
- package/dist/decisions/exclusive-file-create.js +84 -0
- package/dist/decisions/exclusive-file-create.js.map +1 -0
- package/dist/decisions/git-head-trust.d.ts +19 -0
- package/dist/decisions/git-head-trust.d.ts.map +1 -0
- package/dist/decisions/git-head-trust.js +128 -0
- package/dist/decisions/git-head-trust.js.map +1 -0
- package/dist/decisions/human-confirmation.d.ts +35 -0
- package/dist/decisions/human-confirmation.d.ts.map +1 -0
- package/dist/decisions/human-confirmation.js +161 -0
- package/dist/decisions/human-confirmation.js.map +1 -0
- package/dist/decisions/legacy-waiver-migration.d.ts +38 -0
- package/dist/decisions/legacy-waiver-migration.d.ts.map +1 -0
- package/dist/decisions/legacy-waiver-migration.js +179 -0
- package/dist/decisions/legacy-waiver-migration.js.map +1 -0
- package/dist/decisions/read-decisions.d.ts +19 -0
- package/dist/decisions/read-decisions.d.ts.map +1 -0
- package/dist/decisions/read-decisions.js +90 -0
- package/dist/decisions/read-decisions.js.map +1 -0
- package/dist/decisions/viewpoint-baseline-adapter.d.ts +7 -0
- package/dist/decisions/viewpoint-baseline-adapter.d.ts.map +1 -0
- package/dist/decisions/viewpoint-baseline-adapter.js +109 -0
- package/dist/decisions/viewpoint-baseline-adapter.js.map +1 -0
- package/dist/decisions/waiver-decisions.d.ts +24 -0
- package/dist/decisions/waiver-decisions.d.ts.map +1 -0
- package/dist/decisions/waiver-decisions.js +46 -0
- package/dist/decisions/waiver-decisions.js.map +1 -0
- package/dist/exporters/csv-exporter.d.ts +11 -2
- package/dist/exporters/csv-exporter.d.ts.map +1 -1
- package/dist/exporters/csv-exporter.js +8 -4
- package/dist/exporters/csv-exporter.js.map +1 -1
- package/dist/exporters/matrix/build.d.ts +3 -0
- package/dist/exporters/matrix/build.d.ts.map +1 -1
- package/dist/exporters/matrix/build.js +10 -9
- package/dist/exporters/matrix/build.js.map +1 -1
- package/dist/exporters/matrix/export.d.ts +9 -1
- package/dist/exporters/matrix/export.d.ts.map +1 -1
- package/dist/exporters/matrix/export.js +13 -4
- package/dist/exporters/matrix/export.js.map +1 -1
- package/dist/exporters/matrix/gates.d.ts +6 -1
- package/dist/exporters/matrix/gates.d.ts.map +1 -1
- package/dist/exporters/matrix/gates.js +57 -128
- package/dist/exporters/matrix/gates.js.map +1 -1
- package/dist/exporters/matrix/render-csv.d.ts.map +1 -1
- package/dist/exporters/matrix/render-csv.js +3 -0
- package/dist/exporters/matrix/render-csv.js.map +1 -1
- package/dist/exporters/matrix/render-gate-overrides-sheet.d.ts +13 -0
- package/dist/exporters/matrix/render-gate-overrides-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-gate-overrides-sheet.js +44 -0
- package/dist/exporters/matrix/render-gate-overrides-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-xlsx.d.ts +1 -0
- package/dist/exporters/matrix/render-xlsx.d.ts.map +1 -1
- package/dist/exporters/matrix/render-xlsx.js +3 -0
- package/dist/exporters/matrix/render-xlsx.js.map +1 -1
- package/dist/exporters/matrix/types.d.ts +4 -1
- package/dist/exporters/matrix/types.d.ts.map +1 -1
- package/dist/exporters/matrix/types.js.map +1 -1
- package/dist/exporters/matrix/xlsx-cells.js +1 -1
- package/dist/exporters/matrix/xlsx-cells.js.map +1 -1
- package/dist/exporters/test-data-resolver.d.ts.map +1 -1
- package/dist/exporters/test-data-resolver.js +2 -12
- package/dist/exporters/test-data-resolver.js.map +1 -1
- package/dist/exporters/xlsx-exporter.d.ts +3 -2
- package/dist/exporters/xlsx-exporter.d.ts.map +1 -1
- package/dist/exporters/xlsx-exporter.js +4 -4
- package/dist/exporters/xlsx-exporter.js.map +1 -1
- package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
- package/dist/generators/gherkin-parser/index.js +0 -1
- package/dist/generators/gherkin-parser/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/contain-text-assertion.hbs +1 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/fill-action.hbs +1 -13
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -9
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +18 -4
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/diagnostics.d.ts +3 -9
- package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
- package/dist/generators/test-generator/diagnostics.js +3 -9
- package/dist/generators/test-generator/diagnostics.js.map +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts +0 -8
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +8 -52
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +0 -16
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +0 -59
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +2 -10
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/graph/board-human-actions.d.ts +5 -0
- package/dist/graph/board-human-actions.d.ts.map +1 -0
- package/dist/graph/board-human-actions.js +83 -0
- package/dist/graph/board-human-actions.js.map +1 -0
- package/dist/graph/evaluate-graph.d.ts +41 -0
- package/dist/graph/evaluate-graph.d.ts.map +1 -0
- package/dist/graph/evaluate-graph.js +77 -0
- package/dist/graph/evaluate-graph.js.map +1 -0
- package/dist/graph/human-action.d.ts +21 -0
- package/dist/graph/human-action.d.ts.map +1 -0
- package/dist/graph/human-action.js +3 -0
- package/dist/graph/human-action.js.map +1 -0
- package/dist/graph/locate-finding.d.ts +20 -0
- package/dist/graph/locate-finding.d.ts.map +1 -0
- package/dist/graph/locate-finding.js +137 -0
- package/dist/graph/locate-finding.js.map +1 -0
- package/dist/graph/manual-triage-decisions.d.ts +19 -0
- package/dist/graph/manual-triage-decisions.d.ts.map +1 -0
- package/dist/graph/manual-triage-decisions.js +53 -0
- package/dist/graph/manual-triage-decisions.js.map +1 -0
- package/dist/graph/node-decl.d.ts +75 -0
- package/dist/graph/node-decl.d.ts.map +1 -0
- package/dist/graph/node-decl.js +11 -0
- package/dist/graph/node-decl.js.map +1 -0
- package/dist/graph/nodes/core-node-catalog.d.ts +7 -0
- package/dist/graph/nodes/core-node-catalog.d.ts.map +1 -0
- package/dist/graph/nodes/core-node-catalog.js +13 -0
- package/dist/graph/nodes/core-node-catalog.js.map +1 -0
- package/dist/graph/nodes/test-case-contract-nodes.d.ts +21 -0
- package/dist/graph/nodes/test-case-contract-nodes.d.ts.map +1 -0
- package/dist/graph/nodes/test-case-contract-nodes.js +72 -0
- package/dist/graph/nodes/test-case-contract-nodes.js.map +1 -0
- package/dist/graph/nodes/test-case-nodes.d.ts +29 -0
- package/dist/graph/nodes/test-case-nodes.d.ts.map +1 -0
- package/dist/graph/nodes/test-case-nodes.js +95 -0
- package/dist/graph/nodes/test-case-nodes.js.map +1 -0
- package/dist/graph/nodes/unit-audit-nodes.d.ts +18 -0
- package/dist/graph/nodes/unit-audit-nodes.d.ts.map +1 -0
- package/dist/graph/nodes/unit-audit-nodes.js +96 -0
- package/dist/graph/nodes/unit-audit-nodes.js.map +1 -0
- package/dist/graph/nodes/unit-contract-node.d.ts +21 -0
- package/dist/graph/nodes/unit-contract-node.d.ts.map +1 -0
- package/dist/graph/nodes/unit-contract-node.js +96 -0
- package/dist/graph/nodes/unit-contract-node.js.map +1 -0
- package/dist/graph/nodes/unit-design-nodes.d.ts +14 -0
- package/dist/graph/nodes/unit-design-nodes.d.ts.map +1 -0
- package/dist/graph/nodes/unit-design-nodes.js +91 -0
- package/dist/graph/nodes/unit-design-nodes.js.map +1 -0
- package/dist/graph/nodes/unit-execution-nodes.d.ts +16 -0
- package/dist/graph/nodes/unit-execution-nodes.d.ts.map +1 -0
- package/dist/graph/nodes/unit-execution-nodes.js +79 -0
- package/dist/graph/nodes/unit-execution-nodes.js.map +1 -0
- package/dist/graph/test-case-identity.d.ts +13 -0
- package/dist/graph/test-case-identity.d.ts.map +1 -0
- package/dist/graph/test-case-identity.js +106 -0
- package/dist/graph/test-case-identity.js.map +1 -0
- package/dist/graph/test-case-results.d.ts +12 -0
- package/dist/graph/test-case-results.d.ts.map +1 -0
- package/dist/graph/test-case-results.js +161 -0
- package/dist/graph/test-case-results.js.map +1 -0
- package/dist/graph/test-case-satisfied.d.ts +26 -0
- package/dist/graph/test-case-satisfied.d.ts.map +1 -0
- package/dist/graph/test-case-satisfied.js +55 -0
- package/dist/graph/test-case-satisfied.js.map +1 -0
- package/dist/graph/test-case-state-shape.d.ts +73 -0
- package/dist/graph/test-case-state-shape.d.ts.map +1 -0
- package/dist/graph/test-case-state-shape.js +3 -0
- package/dist/graph/test-case-state-shape.js.map +1 -0
- package/dist/graph/test-case-states.d.ts +9 -0
- package/dist/graph/test-case-states.d.ts.map +1 -0
- package/dist/graph/test-case-states.js +116 -0
- package/dist/graph/test-case-states.js.map +1 -0
- package/dist/graph/unit-artifact-probes.d.ts +19 -0
- package/dist/graph/unit-artifact-probes.d.ts.map +1 -0
- package/dist/graph/unit-artifact-probes.js +135 -0
- package/dist/graph/unit-artifact-probes.js.map +1 -0
- package/dist/graph/unit-results-freshness.d.ts +29 -0
- package/dist/graph/unit-results-freshness.d.ts.map +1 -0
- package/dist/graph/unit-results-freshness.js +213 -0
- package/dist/graph/unit-results-freshness.js.map +1 -0
- package/dist/graph/unit-state-facts.d.ts +43 -0
- package/dist/graph/unit-state-facts.d.ts.map +1 -0
- package/dist/graph/unit-state-facts.js +87 -0
- package/dist/graph/unit-state-facts.js.map +1 -0
- package/dist/harness/audit.d.ts +14 -2
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +20 -21
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/catalog/gate-rules.yaml +647 -0
- package/dist/harness/defect-draft.d.ts.map +1 -1
- package/dist/harness/defect-draft.js +12 -2
- package/dist/harness/defect-draft.js.map +1 -1
- package/dist/harness/defects.d.ts +14 -0
- package/dist/harness/defects.d.ts.map +1 -1
- package/dist/harness/defects.js +14 -10
- package/dist/harness/defects.js.map +1 -1
- package/dist/harness/flow-check.d.ts +9 -0
- package/dist/harness/flow-check.d.ts.map +1 -1
- package/dist/harness/flow-check.js +11 -0
- package/dist/harness/flow-check.js.map +1 -1
- package/dist/harness/gates/audit-gate-terms.d.ts +41 -0
- package/dist/harness/gates/audit-gate-terms.d.ts.map +1 -0
- package/dist/harness/gates/audit-gate-terms.js +72 -0
- package/dist/harness/gates/audit-gate-terms.js.map +1 -0
- package/dist/harness/gates/audit-gate-verdict.d.ts +31 -0
- package/dist/harness/gates/audit-gate-verdict.d.ts.map +1 -0
- package/dist/harness/gates/audit-gate-verdict.js +102 -0
- package/dist/harness/gates/audit-gate-verdict.js.map +1 -0
- package/dist/harness/gates/audit-input-hash.d.ts +6 -0
- package/dist/harness/gates/audit-input-hash.d.ts.map +1 -0
- package/dist/harness/gates/audit-input-hash.js +124 -0
- package/dist/harness/gates/audit-input-hash.js.map +1 -0
- package/dist/harness/gates/audit-report-verification.d.ts +43 -0
- package/dist/harness/gates/audit-report-verification.d.ts.map +1 -0
- package/dist/harness/gates/audit-report-verification.js +241 -0
- package/dist/harness/gates/audit-report-verification.js.map +1 -0
- package/dist/harness/gates/decisions-hash.d.ts +13 -0
- package/dist/harness/gates/decisions-hash.d.ts.map +1 -0
- package/dist/harness/gates/decisions-hash.js +72 -0
- package/dist/harness/gates/decisions-hash.js.map +1 -0
- package/dist/harness/gates/delivery-checklist.d.ts +24 -0
- package/dist/harness/gates/delivery-checklist.d.ts.map +1 -0
- package/dist/harness/gates/delivery-checklist.js +161 -0
- package/dist/harness/gates/delivery-checklist.js.map +1 -0
- package/dist/harness/gates/delivery-decision-gate.d.ts +33 -0
- package/dist/harness/gates/delivery-decision-gate.d.ts.map +1 -0
- package/dist/harness/gates/delivery-decision-gate.js +116 -0
- package/dist/harness/gates/delivery-decision-gate.js.map +1 -0
- package/dist/harness/gates/delivery-decision-step.d.ts +19 -0
- package/dist/harness/gates/delivery-decision-step.d.ts.map +1 -0
- package/dist/harness/gates/delivery-decision-step.js +86 -0
- package/dist/harness/gates/delivery-decision-step.js.map +1 -0
- package/dist/harness/gates/gate-override-report.d.ts +59 -0
- package/dist/harness/gates/gate-override-report.d.ts.map +1 -0
- package/dist/harness/gates/gate-override-report.js +86 -0
- package/dist/harness/gates/gate-override-report.js.map +1 -0
- package/dist/harness/gates/gate-override-scope.d.ts +18 -0
- package/dist/harness/gates/gate-override-scope.d.ts.map +1 -0
- package/dist/harness/gates/gate-override-scope.js +98 -0
- package/dist/harness/gates/gate-override-scope.js.map +1 -0
- package/dist/harness/gates/gate-override-validation.d.ts +25 -0
- package/dist/harness/gates/gate-override-validation.d.ts.map +1 -0
- package/dist/harness/gates/gate-override-validation.js +81 -0
- package/dist/harness/gates/gate-override-validation.js.map +1 -0
- package/dist/harness/gates/gate-rule-catalog.d.ts +24 -0
- package/dist/harness/gates/gate-rule-catalog.d.ts.map +1 -0
- package/dist/harness/gates/gate-rule-catalog.js +112 -0
- package/dist/harness/gates/gate-rule-catalog.js.map +1 -0
- package/dist/harness/gates/gate-terms.d.ts +33 -0
- package/dist/harness/gates/gate-terms.d.ts.map +1 -0
- package/dist/harness/gates/gate-terms.js +41 -0
- package/dist/harness/gates/gate-terms.js.map +1 -0
- package/dist/harness/gates/in-run-decision-check.d.ts +21 -0
- package/dist/harness/gates/in-run-decision-check.d.ts.map +1 -0
- package/dist/harness/gates/in-run-decision-check.js +166 -0
- package/dist/harness/gates/in-run-decision-check.js.map +1 -0
- package/dist/harness/gates/journey-gate-inputs.d.ts +37 -0
- package/dist/harness/gates/journey-gate-inputs.d.ts.map +1 -0
- package/dist/harness/gates/journey-gate-inputs.js +81 -0
- package/dist/harness/gates/journey-gate-inputs.js.map +1 -0
- package/dist/harness/gates/migrated-waiver-import-bounds.d.ts +13 -0
- package/dist/harness/gates/migrated-waiver-import-bounds.d.ts.map +1 -0
- package/dist/harness/gates/migrated-waiver-import-bounds.js +141 -0
- package/dist/harness/gates/migrated-waiver-import-bounds.js.map +1 -0
- package/dist/harness/gates/migrated-waiver-review.d.ts +16 -0
- package/dist/harness/gates/migrated-waiver-review.d.ts.map +1 -0
- package/dist/harness/gates/migrated-waiver-review.js +114 -0
- package/dist/harness/gates/migrated-waiver-review.js.map +1 -0
- package/dist/harness/gates/resolve-rule.d.ts +59 -0
- package/dist/harness/gates/resolve-rule.d.ts.map +1 -0
- package/dist/harness/gates/resolve-rule.js +41 -0
- package/dist/harness/gates/resolve-rule.js.map +1 -0
- package/dist/harness/gates/unit-gate-overrides.d.ts +25 -0
- package/dist/harness/gates/unit-gate-overrides.d.ts.map +1 -0
- package/dist/harness/gates/unit-gate-overrides.js +122 -0
- package/dist/harness/gates/unit-gate-overrides.js.map +1 -0
- package/dist/harness/journey.d.ts +64 -1
- package/dist/harness/journey.d.ts.map +1 -1
- package/dist/harness/journey.js +258 -34
- package/dist/harness/journey.js.map +1 -1
- package/dist/harness/manifest.d.ts +12 -0
- package/dist/harness/manifest.d.ts.map +1 -1
- package/dist/harness/manifest.js +71 -43
- package/dist/harness/manifest.js.map +1 -1
- package/dist/harness/next-step.d.ts +58 -4
- package/dist/harness/next-step.d.ts.map +1 -1
- package/dist/harness/next-step.js +55 -204
- package/dist/harness/next-step.js.map +1 -1
- package/dist/harness/parse.d.ts +7 -0
- package/dist/harness/parse.d.ts.map +1 -1
- package/dist/harness/parse.js +18 -2
- package/dist/harness/parse.js.map +1 -1
- package/dist/harness/provenance.d.ts +29 -0
- package/dist/harness/provenance.d.ts.map +1 -1
- package/dist/harness/provenance.js +109 -9
- package/dist/harness/provenance.js.map +1 -1
- package/dist/harness/script-check.d.ts.map +1 -1
- package/dist/harness/script-check.js +22 -5
- package/dist/harness/script-check.js.map +1 -1
- package/dist/harness/sensors.d.ts +14 -3
- package/dist/harness/sensors.d.ts.map +1 -1
- package/dist/harness/sensors.js +41 -38
- package/dist/harness/sensors.js.map +1 -1
- package/dist/harness/triage-manual-classification.d.ts +32 -0
- package/dist/harness/triage-manual-classification.d.ts.map +1 -0
- package/dist/harness/triage-manual-classification.js +56 -0
- package/dist/harness/triage-manual-classification.js.map +1 -0
- package/dist/harness/unit-paths.d.ts +8 -0
- package/dist/harness/unit-paths.d.ts.map +1 -1
- package/dist/harness/unit-paths.js +23 -1
- package/dist/harness/unit-paths.js.map +1 -1
- package/dist/hooks/bash-read-only-segment.d.ts +9 -0
- package/dist/hooks/bash-read-only-segment.d.ts.map +1 -0
- package/dist/hooks/bash-read-only-segment.js +168 -0
- package/dist/hooks/bash-read-only-segment.js.map +1 -0
- package/dist/hooks/bash-write-targets.d.ts +25 -0
- package/dist/hooks/bash-write-targets.d.ts.map +1 -0
- package/dist/hooks/bash-write-targets.js +266 -0
- package/dist/hooks/bash-write-targets.js.map +1 -0
- package/dist/hooks/claude-hook-entry.d.ts +11 -0
- package/dist/hooks/claude-hook-entry.d.ts.map +1 -0
- package/dist/hooks/claude-hook-entry.js +137 -0
- package/dist/hooks/claude-hook-entry.js.map +1 -0
- package/dist/hooks/claude-transcript-turn.d.ts +11 -0
- package/dist/hooks/claude-transcript-turn.d.ts.map +1 -0
- package/dist/hooks/claude-transcript-turn.js +143 -0
- package/dist/hooks/claude-transcript-turn.js.map +1 -0
- package/dist/hooks/guard-delivery-contract-rule.d.ts +10 -0
- package/dist/hooks/guard-delivery-contract-rule.d.ts.map +1 -0
- package/dist/hooks/guard-delivery-contract-rule.js +152 -0
- package/dist/hooks/guard-delivery-contract-rule.js.map +1 -0
- package/dist/hooks/guard-protected-paths.d.ts +13 -0
- package/dist/hooks/guard-protected-paths.d.ts.map +1 -0
- package/dist/hooks/guard-protected-paths.js +116 -0
- package/dist/hooks/guard-protected-paths.js.map +1 -0
- package/dist/hooks/guard-rules.d.ts +20 -0
- package/dist/hooks/guard-rules.d.ts.map +1 -0
- package/dist/hooks/guard-rules.js +130 -0
- package/dist/hooks/guard-rules.js.map +1 -0
- package/dist/hooks/guard-tty-spoof-rule.d.ts +17 -0
- package/dist/hooks/guard-tty-spoof-rule.d.ts.map +1 -0
- package/dist/hooks/guard-tty-spoof-rule.js +22 -0
- package/dist/hooks/guard-tty-spoof-rule.js.map +1 -0
- package/dist/hooks/hand-back-core.d.ts +42 -0
- package/dist/hooks/hand-back-core.d.ts.map +1 -0
- package/dist/hooks/hand-back-core.js +128 -0
- package/dist/hooks/hand-back-core.js.map +1 -0
- package/dist/hooks/hook-cli-command.d.ts +9 -0
- package/dist/hooks/hook-cli-command.d.ts.map +1 -0
- package/dist/hooks/hook-cli-command.js +46 -0
- package/dist/hooks/hook-cli-command.js.map +1 -0
- package/dist/hooks/hook-registry.d.ts +10 -0
- package/dist/hooks/hook-registry.d.ts.map +1 -0
- package/dist/hooks/hook-registry.js +24 -0
- package/dist/hooks/hook-registry.js.map +1 -0
- package/dist/hooks/hook-result-contract.d.ts +50 -0
- package/dist/hooks/hook-result-contract.d.ts.map +1 -0
- package/dist/hooks/hook-result-contract.js +80 -0
- package/dist/hooks/hook-result-contract.js.map +1 -0
- package/dist/hooks/hook-toggles.d.ts +10 -0
- package/dist/hooks/hook-toggles.d.ts.map +1 -0
- package/dist/hooks/hook-toggles.js +107 -0
- package/dist/hooks/hook-toggles.js.map +1 -0
- package/dist/hooks/pre-tool-guard-hook.d.ts +10 -0
- package/dist/hooks/pre-tool-guard-hook.d.ts.map +1 -0
- package/dist/hooks/pre-tool-guard-hook.js +105 -0
- package/dist/hooks/pre-tool-guard-hook.js.map +1 -0
- package/dist/hooks/session-start-unit-state-hook.d.ts +14 -0
- package/dist/hooks/session-start-unit-state-hook.d.ts.map +1 -0
- package/dist/hooks/session-start-unit-state-hook.js +60 -0
- package/dist/hooks/session-start-unit-state-hook.js.map +1 -0
- package/dist/hooks/stop-next-step-hook.d.ts +16 -0
- package/dist/hooks/stop-next-step-hook.d.ts.map +1 -0
- package/dist/hooks/stop-next-step-hook.js +43 -0
- package/dist/hooks/stop-next-step-hook.js.map +1 -0
- package/dist/hooks/sungen-project-root.d.ts +19 -0
- package/dist/hooks/sungen-project-root.d.ts.map +1 -0
- package/dist/hooks/sungen-project-root.js +130 -0
- package/dist/hooks/sungen-project-root.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/ai-skills/command-partial-includes.d.ts +15 -0
- package/dist/orchestrator/ai-skills/command-partial-includes.d.ts.map +1 -0
- package/dist/orchestrator/ai-skills/command-partial-includes.js +106 -0
- package/dist/orchestrator/ai-skills/command-partial-includes.js.map +1 -0
- package/dist/orchestrator/ai-skills/commands.d.ts +5 -1
- package/dist/orchestrator/ai-skills/commands.d.ts.map +1 -1
- package/dist/orchestrator/ai-skills/commands.js +11 -3
- package/dist/orchestrator/ai-skills/commands.js.map +1 -1
- package/dist/orchestrator/assets-drift.d.ts +5 -0
- package/dist/orchestrator/assets-drift.d.ts.map +1 -1
- package/dist/orchestrator/assets-drift.js +12 -3
- package/dist/orchestrator/assets-drift.js.map +1 -1
- package/dist/orchestrator/claude-hooks-install.d.ts +27 -0
- package/dist/orchestrator/claude-hooks-install.d.ts.map +1 -0
- package/dist/orchestrator/claude-hooks-install.js +203 -0
- package/dist/orchestrator/claude-hooks-install.js.map +1 -0
- package/dist/orchestrator/lockstep-version.d.ts +15 -5
- package/dist/orchestrator/lockstep-version.d.ts.map +1 -1
- package/dist/orchestrator/lockstep-version.js +30 -17
- package/dist/orchestrator/lockstep-version.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts +6 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +24 -0
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/add-api.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/add-flow.md +6 -26
- package/dist/orchestrator/templates/ai-src/commands/add-screen.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/create-data-test.md +1 -0
- package/dist/orchestrator/templates/ai-src/commands/create-test.md +17 -16
- package/dist/orchestrator/templates/ai-src/commands/dashboard.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/delivery.md +4 -0
- package/dist/orchestrator/templates/ai-src/commands/design.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/feedback.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/locale.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/review.md +4 -0
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +6 -8
- package/dist/orchestrator/templates/ai-src/partials/hand-back-rule.claude.md +20 -0
- package/dist/orchestrator/templates/ai-src/partials/hand-back-rule.codex.md +20 -0
- package/dist/orchestrator/templates/ai-src/partials/hand-back-rule.copilot.md +20 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.claude.md +11 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.codex.md +11 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.copilot.md +11 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +1 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +4 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +8 -24
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +3 -4
- package/dist/orchestrator/templates/claude-hooks/sungen-hook.cjs +64 -0
- package/dist/orchestrator/templates/specs-test-data.ts +4 -22
- package/dist/utils/safe-yaml-parse.d.ts +8 -0
- package/dist/utils/safe-yaml-parse.d.ts.map +1 -0
- package/dist/utils/safe-yaml-parse.js +51 -0
- package/dist/utils/safe-yaml-parse.js.map +1 -0
- package/package.json +3 -3
- package/src/basis/anchor-grammar.ts +83 -0
- package/src/basis/anchor-hash.ts +27 -0
- package/src/basis/bm51-tables.ts +65 -0
- package/src/basis/extract-spec-anchors.ts +95 -0
- package/src/basis/migration-sentinel.ts +175 -0
- package/src/basis/spec-frontmatter.ts +68 -0
- package/src/basis/spec-sections.ts +35 -0
- package/src/basis/test-basis-schema.ts +81 -0
- package/src/capabilities/discover.ts +15 -2
- package/src/capabilities/registry.ts +16 -0
- package/src/cli/case-triage-hint.ts +31 -0
- package/src/cli/commands/audit.ts +1 -1
- package/src/cli/commands/capability.ts +1 -1
- package/src/cli/commands/contract-derive-command.ts +72 -0
- package/src/cli/commands/contract.ts +164 -0
- package/src/cli/commands/delivery.ts +106 -19
- package/src/cli/commands/gate.ts +2 -1
- package/src/cli/commands/generate.ts +16 -3
- package/src/cli/commands/journey.ts +45 -18
- package/src/cli/commands/next.ts +92 -11
- package/src/cli/commands/triage.ts +41 -3
- package/src/cli/commands/update.ts +41 -10
- package/src/cli/index.ts +24 -30
- package/src/cli/json-error-on-exit.ts +72 -0
- package/src/cli/project-sungen-invocation.ts +59 -0
- package/src/cli/run-command-hints.ts +47 -0
- package/src/cli/waiting-for-you-block.ts +27 -0
- package/src/contract/accept-opaque-steps.ts +114 -0
- package/src/contract/approve-contract.ts +101 -0
- package/src/contract/assertion-matcher-vocabulary.ts +93 -0
- package/src/contract/build-contract-verdict.ts +108 -0
- package/src/contract/build-trace-conformance.ts +103 -0
- package/src/contract/classify-contract-change.ts +92 -0
- package/src/contract/classify-contract-unit.ts +47 -0
- package/src/contract/classify-trace-conformance.ts +170 -0
- package/src/contract/contract-git.ts +106 -0
- package/src/contract/contract-hash.ts +34 -0
- package/src/contract/contract-report-file.ts +25 -0
- package/src/contract/contract-schema.ts +166 -0
- package/src/contract/contract-units.ts +52 -0
- package/src/contract/contracts-lock-file.ts +98 -0
- package/src/contract/data-normalize.ts +66 -0
- package/src/contract/derive-free-feature.ts +153 -0
- package/src/contract/field-semantic-redaction.ts +80 -0
- package/src/contract/free-feature-blocks.ts +56 -0
- package/src/contract/lock-secret-guard.ts +95 -0
- package/src/contract/lock-vs-git-head.ts +38 -0
- package/src/contract/normalize-contract-step.ts +74 -0
- package/src/contract/normalize-feature-steps.ts +93 -0
- package/src/contract/oracle-strength.ts +80 -0
- package/src/contract/project-contract-blockers.ts +38 -0
- package/src/contract/record-contract-approval.ts +110 -0
- package/src/contract/render-free-gherkin.ts +118 -0
- package/src/contract/render-trace-sentence.ts +98 -0
- package/src/contract/render-trace-target.ts +68 -0
- package/src/contract/resolve-unit-trace-identities.ts +58 -0
- package/src/contract/trace/collect-trace-evidence.ts +178 -0
- package/src/contract/trace/identity-cache.ts +61 -0
- package/src/contract/trace/read-file-once.ts +95 -0
- package/src/contract/trace/scenario-id-claims.ts +60 -0
- package/src/contract/trace/select-final-attempt.ts +77 -0
- package/src/contract/trace/snapshot-html-renderer.ts +136 -0
- package/src/contract/trace/snapshot-resolver.ts +66 -0
- package/src/contract/trace/snapshot-store.ts +151 -0
- package/src/contract/trace/target-identity.ts +104 -0
- package/src/contract/trace/test-step-join.ts +104 -0
- package/src/contract/trace/trace-binding.ts +59 -0
- package/src/contract/trace/trace-file-reader.ts +144 -0
- package/src/contract/trace/trace-fingerprint.ts +68 -0
- package/src/contract/trace/trace-freshness.ts +110 -0
- package/src/contract/trace/trace-identity-resolution.ts +77 -0
- package/src/contract/trace/trace-run-record.ts +96 -0
- package/src/contract/trace/trace-steps.ts +88 -0
- package/src/contract/trace/trace-zip-limits.ts +77 -0
- package/src/contract/trace/trace-zip-reader.ts +127 -0
- package/src/contract/verify-approval-decisions.ts +64 -0
- package/src/decisions/append-decision.ts +35 -0
- package/src/decisions/confirmed-decision-commands.ts +149 -0
- package/src/decisions/decision-file.ts +93 -0
- package/src/decisions/decision-identity.ts +73 -0
- package/src/decisions/decision-integrity-check.ts +61 -0
- package/src/decisions/decision-schema.ts +77 -0
- package/src/decisions/decision-source.ts +14 -0
- package/src/decisions/exclusive-file-create.ts +42 -0
- package/src/decisions/git-head-trust.ts +76 -0
- package/src/decisions/human-confirmation.ts +119 -0
- package/src/decisions/legacy-waiver-migration.ts +146 -0
- package/src/decisions/read-decisions.ts +61 -0
- package/src/decisions/viewpoint-baseline-adapter.ts +74 -0
- package/src/decisions/waiver-decisions.ts +56 -0
- package/src/exporters/csv-exporter.ts +12 -4
- package/src/exporters/matrix/build.ts +11 -9
- package/src/exporters/matrix/export.ts +16 -4
- package/src/exporters/matrix/gates.ts +62 -129
- package/src/exporters/matrix/render-csv.ts +3 -0
- package/src/exporters/matrix/render-gate-overrides-sheet.ts +50 -0
- package/src/exporters/matrix/render-xlsx.ts +3 -0
- package/src/exporters/matrix/types.ts +4 -1
- package/src/exporters/matrix/xlsx-cells.ts +1 -1
- package/src/exporters/test-data-resolver.ts +2 -10
- package/src/exporters/xlsx-exporter.ts +5 -4
- package/src/generators/gherkin-parser/index.ts +0 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/contain-text-assertion.hbs +1 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/fill-action.hbs +1 -13
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -9
- package/src/generators/test-generator/code-generator.ts +17 -4
- package/src/generators/test-generator/diagnostics.ts +3 -9
- package/src/generators/test-generator/patterns/types.ts +0 -2
- package/src/generators/test-generator/step-mapper.ts +9 -56
- package/src/generators/test-generator/utils/data-resolver.ts +0 -53
- package/src/generators/test-generator/utils/selector-resolver.ts +2 -10
- package/src/graph/board-human-actions.ts +80 -0
- package/src/graph/evaluate-graph.ts +97 -0
- package/src/graph/human-action.ts +33 -0
- package/src/graph/locate-finding.ts +93 -0
- package/src/graph/manual-triage-decisions.ts +55 -0
- package/src/graph/node-decl.ts +83 -0
- package/src/graph/nodes/core-node-catalog.ts +15 -0
- package/src/graph/nodes/test-case-contract-nodes.ts +90 -0
- package/src/graph/nodes/test-case-nodes.ts +100 -0
- package/src/graph/nodes/unit-audit-nodes.ts +96 -0
- package/src/graph/nodes/unit-contract-node.ts +100 -0
- package/src/graph/nodes/unit-design-nodes.ts +89 -0
- package/src/graph/nodes/unit-execution-nodes.ts +77 -0
- package/src/graph/test-case-identity.ts +75 -0
- package/src/graph/test-case-results.ts +111 -0
- package/src/graph/test-case-satisfied.ts +58 -0
- package/src/graph/test-case-state-shape.ts +67 -0
- package/src/graph/test-case-states.ts +84 -0
- package/src/graph/unit-artifact-probes.ts +79 -0
- package/src/graph/unit-results-freshness.ts +165 -0
- package/src/graph/unit-state-facts.ts +112 -0
- package/src/harness/audit.ts +31 -18
- package/src/harness/catalog/gate-rules.yaml +647 -0
- package/src/harness/defect-draft.ts +13 -2
- package/src/harness/defects.ts +22 -9
- package/src/harness/flow-check.ts +11 -0
- package/src/harness/gates/audit-gate-terms.ts +80 -0
- package/src/harness/gates/audit-gate-verdict.ts +79 -0
- package/src/harness/gates/audit-input-hash.ts +79 -0
- package/src/harness/gates/audit-report-verification.ts +206 -0
- package/src/harness/gates/decisions-hash.ts +42 -0
- package/src/harness/gates/delivery-checklist.ts +152 -0
- package/src/harness/gates/delivery-decision-gate.ts +139 -0
- package/src/harness/gates/delivery-decision-step.ts +89 -0
- package/src/harness/gates/gate-override-report.ts +114 -0
- package/src/harness/gates/gate-override-scope.ts +66 -0
- package/src/harness/gates/gate-override-validation.ts +75 -0
- package/src/harness/gates/gate-rule-catalog.ts +82 -0
- package/src/harness/gates/gate-terms.ts +59 -0
- package/src/harness/gates/in-run-decision-check.ts +124 -0
- package/src/harness/gates/journey-gate-inputs.ts +89 -0
- package/src/harness/gates/migrated-waiver-import-bounds.ts +103 -0
- package/src/harness/gates/migrated-waiver-review.ts +121 -0
- package/src/harness/gates/resolve-rule.ts +94 -0
- package/src/harness/gates/unit-gate-overrides.ts +99 -0
- package/src/harness/journey.ts +287 -39
- package/src/harness/manifest.ts +67 -43
- package/src/harness/next-step.ts +91 -193
- package/src/harness/parse.ts +20 -2
- package/src/harness/provenance.ts +99 -11
- package/src/harness/script-check.ts +20 -5
- package/src/harness/sensors.ts +47 -40
- package/src/harness/triage-manual-classification.ts +76 -0
- package/src/harness/unit-paths.ts +19 -0
- package/src/hooks/bash-read-only-segment.ts +130 -0
- package/src/hooks/bash-write-targets.ts +195 -0
- package/src/hooks/claude-hook-entry.ts +85 -0
- package/src/hooks/claude-transcript-turn.ts +96 -0
- package/src/hooks/guard-delivery-contract-rule.ts +110 -0
- package/src/hooks/guard-protected-paths.ts +80 -0
- package/src/hooks/guard-rules.ts +117 -0
- package/src/hooks/guard-tty-spoof-rule.ts +34 -0
- package/src/hooks/hand-back-core.ts +118 -0
- package/src/hooks/hook-cli-command.ts +17 -0
- package/src/hooks/hook-registry.ts +24 -0
- package/src/hooks/hook-result-contract.ts +114 -0
- package/src/hooks/hook-toggles.ts +66 -0
- package/src/hooks/pre-tool-guard-hook.ts +67 -0
- package/src/hooks/session-start-unit-state-hook.ts +59 -0
- package/src/hooks/stop-next-step-hook.ts +38 -0
- package/src/hooks/sungen-project-root.ts +80 -0
- package/src/index.ts +1 -2
- package/src/orchestrator/ai-skills/command-partial-includes.ts +72 -0
- package/src/orchestrator/ai-skills/commands.ts +17 -5
- package/src/orchestrator/assets-drift.ts +12 -5
- package/src/orchestrator/claude-hooks-install.ts +168 -0
- package/src/orchestrator/lockstep-version.ts +28 -15
- package/src/orchestrator/project-initializer.ts +22 -0
- package/src/orchestrator/templates/ai-src/commands/add-api.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/add-flow.md +6 -26
- package/src/orchestrator/templates/ai-src/commands/add-screen.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/create-data-test.md +1 -0
- package/src/orchestrator/templates/ai-src/commands/create-test.md +17 -16
- package/src/orchestrator/templates/ai-src/commands/dashboard.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/delivery.md +4 -0
- package/src/orchestrator/templates/ai-src/commands/design.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/feedback.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/locale.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/review.md +4 -0
- package/src/orchestrator/templates/ai-src/commands/run-test.md +6 -8
- package/src/orchestrator/templates/ai-src/partials/hand-back-rule.claude.md +20 -0
- package/src/orchestrator/templates/ai-src/partials/hand-back-rule.codex.md +20 -0
- package/src/orchestrator/templates/ai-src/partials/hand-back-rule.copilot.md +20 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.claude.md +11 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.codex.md +11 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.copilot.md +11 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +1 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +4 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +8 -24
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +3 -4
- package/src/orchestrator/templates/claude-hooks/sungen-hook.cjs +64 -0
- package/src/orchestrator/templates/specs-test-data.ts +4 -22
- package/src/utils/safe-yaml-parse.ts +44 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/expanded-assertion.hbs +0 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/date-picker-unsupported.hbs +0 -5
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/expanded-assertion.hbs +0 -12
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/expanded-assertion.hbs +0 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/date-picker-unsupported.hbs +0 -5
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/expanded-assertion.hbs +0 -12
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const TRIAGE_DECISION_KIND: "triage-classification";
|
|
2
|
+
export type ManualTriageClass = 'product-candidate' | 'test-defect' | 'environment';
|
|
3
|
+
/** `--as` word → the triage class it records. */
|
|
4
|
+
export declare const MANUAL_TRIAGE_AS: Readonly<Record<string, ManualTriageClass>>;
|
|
5
|
+
/** Classes that can hide a product defect: a human types a confirmation on a terminal. */
|
|
6
|
+
export declare const HUMAN_ONLY_TRIAGE: ReadonlySet<ManualTriageClass>;
|
|
7
|
+
export interface ManualClassification {
|
|
8
|
+
decision: string;
|
|
9
|
+
caseId: string;
|
|
10
|
+
class: ManualTriageClass;
|
|
11
|
+
evidence: string;
|
|
12
|
+
reason: string;
|
|
13
|
+
by: string;
|
|
14
|
+
}
|
|
15
|
+
/** The unit's classifications that can be in force, oldest first (read-decisions orders by time). */
|
|
16
|
+
export declare function manualClassifications(projectRoot: string, unitDir: string): ManualClassification[];
|
|
17
|
+
/** The latest classification of this case bound to this red, if any. */
|
|
18
|
+
export declare function manualClassificationFor(list: ManualClassification[], caseId: string, evidence: string | undefined): ManualClassification | undefined;
|
|
19
|
+
//# sourceMappingURL=manual-triage-decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-triage-decisions.d.ts","sourceRoot":"","sources":["../../src/graph/manual-triage-decisions.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,oBAAoB,EAAG,uBAAgC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,aAAa,GAAG,aAAa,CAAC;AACpF,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAA8F,CAAC;AACxK,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAA2C,CAAC;AAEzG,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAID,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CASlG;AAED,wEAAwE;AACxE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAIpJ"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HUMAN_ONLY_TRIAGE = exports.MANUAL_TRIAGE_AS = exports.TRIAGE_DECISION_KIND = void 0;
|
|
4
|
+
exports.manualClassifications = manualClassifications;
|
|
5
|
+
exports.manualClassificationFor = manualClassificationFor;
|
|
6
|
+
/**
|
|
7
|
+
* Manual triage classifications (#928) — a red `sungen triage` could not classify, or classified
|
|
8
|
+
* wrongly, judged by hand with `sungen triage --screen <u> --case <id> --as <class> --reason "…"`
|
|
9
|
+
* (harness/triage-manual-classification.ts writes them). Each is a `triage-classification` decision
|
|
10
|
+
* in the unit's `decisions/`, read here for the test-case state (test-case-results.ts):
|
|
11
|
+
*
|
|
12
|
+
* payload { case: <id>, class: product-candidate | test-defect | environment, humanConfirmed? }
|
|
13
|
+
* evidence_hash the hash of the red final attempts it judged (TestCaseState.evidence): a re-run
|
|
14
|
+
* makes a new red, and the classification no longer applies to it
|
|
15
|
+
* in force verifies (read-decisions), not superseded, bound to today's red — and, for
|
|
16
|
+
* test-defect / environment, typed by a human on a terminal (`humanConfirmed`, only
|
|
17
|
+
* ever set after the typed confirmation): those classes can hide a product defect,
|
|
18
|
+
* so an entry without it is ignored (fail closed). product-candidate is stricter than
|
|
19
|
+
* any automatic class, so anyone may record it.
|
|
20
|
+
* The latest classification in force wins over the automatic one.
|
|
21
|
+
*/
|
|
22
|
+
const read_decisions_1 = require("../decisions/read-decisions");
|
|
23
|
+
const unit_gate_overrides_1 = require("../harness/gates/unit-gate-overrides");
|
|
24
|
+
exports.TRIAGE_DECISION_KIND = 'triage-classification';
|
|
25
|
+
/** `--as` word → the triage class it records. */
|
|
26
|
+
exports.MANUAL_TRIAGE_AS = { product: 'product-candidate', 'test-defect': 'test-defect', environment: 'environment' };
|
|
27
|
+
/** Classes that can hide a product defect: a human types a confirmation on a terminal. */
|
|
28
|
+
exports.HUMAN_ONLY_TRIAGE = new Set(['test-defect', 'environment']);
|
|
29
|
+
const isClass = (v) => Object.values(exports.MANUAL_TRIAGE_AS).includes(v);
|
|
30
|
+
/** The unit's classifications that can be in force, oldest first (read-decisions orders by time). */
|
|
31
|
+
function manualClassifications(projectRoot, unitDir) {
|
|
32
|
+
const scope = (0, unit_gate_overrides_1.unitScopeOfDir)(projectRoot, unitDir);
|
|
33
|
+
if (!scope)
|
|
34
|
+
return [];
|
|
35
|
+
return (0, read_decisions_1.readDecisions)(projectRoot, scope, { kind: exports.TRIAGE_DECISION_KIND }).entries.flatMap((e) => {
|
|
36
|
+
const p = e.payload ?? {};
|
|
37
|
+
if (e.superseded_by || typeof p.case !== 'string' || !isClass(p.class) || typeof e.evidence_hash !== 'string')
|
|
38
|
+
return [];
|
|
39
|
+
if (exports.HUMAN_ONLY_TRIAGE.has(p.class) && p.humanConfirmed !== true)
|
|
40
|
+
return [];
|
|
41
|
+
return [{ decision: e.id, caseId: p.case, class: p.class, evidence: e.evidence_hash, reason: e.reason, by: e.source.by }];
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** The latest classification of this case bound to this red, if any. */
|
|
45
|
+
function manualClassificationFor(list, caseId, evidence) {
|
|
46
|
+
if (!evidence)
|
|
47
|
+
return undefined;
|
|
48
|
+
for (let i = list.length - 1; i >= 0; i--)
|
|
49
|
+
if (list[i].caseId === caseId && list[i].evidence === evidence)
|
|
50
|
+
return list[i];
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=manual-triage-decisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-triage-decisions.js","sourceRoot":"","sources":["../../src/graph/manual-triage-decisions.ts"],"names":[],"mappings":";;;AAsCA,sDASC;AAGD,0DAIC;AAtDD;;;;;;;;;;;;;;;GAeG;AACH,gEAA4D;AAC5D,8EAAsE;AAEzD,QAAA,oBAAoB,GAAG,uBAAgC,CAAC;AAErE,iDAAiD;AACpC,QAAA,gBAAgB,GAAgD,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AACxK,0FAA0F;AAC7E,QAAA,iBAAiB,GAAmC,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;AAWzG,MAAM,OAAO,GAAG,CAAC,CAAU,EAA0B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAsB,CAAC,CAAC;AAEzH,qGAAqG;AACrG,SAAgB,qBAAqB,CAAC,WAAmB,EAAE,OAAe;IACxE,MAAM,KAAK,GAAG,IAAA,oCAAc,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,IAAA,8BAAa,EAAC,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,4BAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7F,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzH,IAAI,yBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3E,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,SAAgB,uBAAuB,CAAC,IAA4B,EAAE,MAAc,EAAE,QAA4B;IAChH,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1H,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One node of the `sungen next` graph (OES-10.1) — core-internal, no SPI (red-team #10).
|
|
3
|
+
*
|
|
4
|
+
* `deriveSteps` used to be a chain of if/return in which every `return` was a blocking node that cut
|
|
5
|
+
* everything after it. Each branch is now one declaration: when it applies (`active`), when its goal
|
|
6
|
+
* is met (`satisfied`), the step it offers, and whether an open instance cuts the nodes ranked after
|
|
7
|
+
* it (`blocking`). `evaluateGraph` walks them by `rank`.
|
|
8
|
+
*
|
|
9
|
+
* Granularity: a `unit` node judges the unit's state; a `test-case` node judges one test case at a
|
|
10
|
+
* time, and the cases that need it fold into ONE step at unit level (one step per case under
|
|
11
|
+
* `sungen next <unit> --case <id>`).
|
|
12
|
+
*/
|
|
13
|
+
import type { NextStep, UnitState } from '../harness/next-step';
|
|
14
|
+
import type { HumanAction, HumanActionKind } from './human-action';
|
|
15
|
+
import type { TestCaseState } from './test-case-state-shape';
|
|
16
|
+
export type NodeActor = 'ai' | 'human' | 'deterministic';
|
|
17
|
+
export type NodeGranularity = 'unit' | 'test-case';
|
|
18
|
+
export type UnitKind = UnitState['kind'];
|
|
19
|
+
/** What a node's `step` returns; the engine adds `nodeId`, `granularity`, `gates`, `testCase`. */
|
|
20
|
+
export type StepCore = Pick<NextStep, 'kind' | 'command' | 'because'>;
|
|
21
|
+
interface NodeDeclBase {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
/** Who runs the step: an AI agent, a human (`decide`, never auto-run), or sungen itself. */
|
|
25
|
+
actor: NodeActor;
|
|
26
|
+
appliesTo: readonly UnitKind[];
|
|
27
|
+
/** Nodes that must be satisfied first. Each is a lower-ranked blocking node (pinned by a test). */
|
|
28
|
+
requires: readonly string[];
|
|
29
|
+
/** An active, unsatisfied blocking node cuts every node ranked after it. */
|
|
30
|
+
blocking: boolean;
|
|
31
|
+
rank: number;
|
|
32
|
+
/** Catalog rule ids (gate-rules.yaml) this step answers to. */
|
|
33
|
+
gates: readonly string[];
|
|
34
|
+
/** Artifacts the step produces, for a reader of the graph. */
|
|
35
|
+
produces: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* The HUMAN-ONLY actions behind an offered step ("Waiting for you", #954): what a person runs, with
|
|
38
|
+
* why. Without it a `decide` step is one action of kind `decide` and any other step is none. `cases`
|
|
39
|
+
* are the cases open at a test-case node (none for a unit node).
|
|
40
|
+
*/
|
|
41
|
+
human?(s: UnitState, step: StepCore, cases: TestCaseState[]): HumanAction[];
|
|
42
|
+
}
|
|
43
|
+
/** The `human` hook of a node whose decide step IS the human action: its command and reason, under `kind`. */
|
|
44
|
+
export declare const humanStep: (kind: HumanActionKind) => (_s: UnitState, step: StepCore) => HumanAction[];
|
|
45
|
+
export interface UnitNodeDecl extends NodeDeclBase {
|
|
46
|
+
granularity: 'unit';
|
|
47
|
+
active(s: UnitState): boolean;
|
|
48
|
+
satisfied(s: UnitState): boolean;
|
|
49
|
+
step(s: UnitState): StepCore;
|
|
50
|
+
/**
|
|
51
|
+
* Offered even when a blocking node ranked before it cut the walk — only while this holds (#940: a
|
|
52
|
+
* hard contract verdict must not hide behind a stale or failing audit). It never cuts by itself.
|
|
53
|
+
*/
|
|
54
|
+
surfacesPastCut?(s: UnitState): boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface TestCaseNodeDecl extends NodeDeclBase {
|
|
57
|
+
granularity: 'test-case';
|
|
58
|
+
/**
|
|
59
|
+
* Speaks only under `--case <id>`: the unit view already carries the decision at unit level (the
|
|
60
|
+
* contract's unit.contract-approve), so folding the cases there would say it twice.
|
|
61
|
+
*/
|
|
62
|
+
caseOnly?: true;
|
|
63
|
+
active(s: UnitState, tc: TestCaseState): boolean;
|
|
64
|
+
satisfied(s: UnitState, tc: TestCaseState): boolean;
|
|
65
|
+
/** One step for `cases` (all open at this node): a unit-level fold, or exactly one case when `single`. */
|
|
66
|
+
step(s: UnitState, cases: TestCaseState[], single: boolean): StepCore;
|
|
67
|
+
/** The cases offered even past a cut (see UnitNodeDecl.surfacesPastCut). */
|
|
68
|
+
surfacesPastCut?(s: UnitState, tc: TestCaseState): boolean;
|
|
69
|
+
}
|
|
70
|
+
export type NodeDecl = UnitNodeDecl | TestCaseNodeDecl;
|
|
71
|
+
/** `qa/<dir>/<unit>` for the unit kind, as the steps name it. */
|
|
72
|
+
export declare const unitKindDir: (kind: UnitKind) => string;
|
|
73
|
+
export declare const ALL_KINDS: readonly UnitKind[];
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=node-decl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-decl.d.ts","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,eAAe,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAEzC,kGAAkG;AAClG,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEtE,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,mGAAmG;IACnG,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAC;CAC7E;AAED,8GAA8G;AAC9G,eAAO,MAAM,SAAS,GAAI,MAAM,eAAe,MAAM,IAAI,SAAS,EAAE,MAAM,QAAQ,KAAG,WAAW,EACvC,CAAC;AAE1D,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACjC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;IACjD,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;IACpD,0GAA0G;IAC1G,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IACtE,4EAA4E;IAC5E,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;CAC5D;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAEvD,iEAAiE;AACjE,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAA6E,CAAC;AAE3H,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAA8B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ALL_KINDS = exports.unitKindDir = exports.humanStep = void 0;
|
|
4
|
+
/** The `human` hook of a node whose decide step IS the human action: its command and reason, under `kind`. */
|
|
5
|
+
const humanStep = (kind) => (_s, step) => [{ command: step.command, reason: step.because, kind }];
|
|
6
|
+
exports.humanStep = humanStep;
|
|
7
|
+
/** `qa/<dir>/<unit>` for the unit kind, as the steps name it. */
|
|
8
|
+
const unitKindDir = (kind) => (kind === 'screen' ? 'screens' : kind === 'flow' ? 'flows' : 'api');
|
|
9
|
+
exports.unitKindDir = unitKindDir;
|
|
10
|
+
exports.ALL_KINDS = ['screen', 'flow', 'api'];
|
|
11
|
+
//# sourceMappingURL=node-decl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-decl.js","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":";;;AA8CA,8GAA8G;AACvG,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAE,EAAE,CAAC,CAAC,EAAa,EAAE,IAAc,EAAiB,EAAE,CACnG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAD7C,QAAA,SAAS,aACoC;AA+B1D,iEAAiE;AAC1D,MAAM,WAAW,GAAG,CAAC,IAAc,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAA9G,QAAA,WAAW,eAAmG;AAE9G,QAAA,SAAS,GAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The core node catalog of `sungen next` (OES-10.1), in rank order. Internal to core: there is no
|
|
3
|
+
* SPI slot for driver-contributed nodes in P0 (red-team #10).
|
|
4
|
+
*/
|
|
5
|
+
import type { NodeDecl } from '../node-decl';
|
|
6
|
+
export declare const CORE_NODES: readonly NodeDecl[];
|
|
7
|
+
//# sourceMappingURL=core-node-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-node-catalog.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/core-node-catalog.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ7C,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAET,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CORE_NODES = void 0;
|
|
4
|
+
const test_case_contract_nodes_1 = require("./test-case-contract-nodes");
|
|
5
|
+
const test_case_nodes_1 = require("./test-case-nodes");
|
|
6
|
+
const unit_audit_nodes_1 = require("./unit-audit-nodes");
|
|
7
|
+
const unit_contract_node_1 = require("./unit-contract-node");
|
|
8
|
+
const unit_design_nodes_1 = require("./unit-design-nodes");
|
|
9
|
+
const unit_execution_nodes_1 = require("./unit-execution-nodes");
|
|
10
|
+
exports.CORE_NODES = [
|
|
11
|
+
...unit_design_nodes_1.UNIT_DESIGN_NODES, ...unit_audit_nodes_1.UNIT_AUDIT_NODES, ...unit_contract_node_1.UNIT_CONTRACT_NODES, ...unit_execution_nodes_1.UNIT_EXECUTION_NODES, ...test_case_nodes_1.TEST_CASE_NODES, ...test_case_contract_nodes_1.TEST_CASE_CONTRACT_NODES,
|
|
12
|
+
].sort((a, b) => a.rank - b.rank);
|
|
13
|
+
//# sourceMappingURL=core-node-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-node-catalog.js","sourceRoot":"","sources":["../../../src/graph/nodes/core-node-catalog.ts"],"names":[],"mappings":";;;AAKA,yEAAsE;AACtE,uDAAoD;AACpD,yDAAsD;AACtD,6DAA2D;AAC3D,2DAAwD;AACxD,iEAA8D;AAEjD,QAAA,UAAU,GAAwB;IAC7C,GAAG,qCAAiB,EAAE,GAAG,mCAAgB,EAAE,GAAG,wCAAmB,EAAE,GAAG,2CAAoB,EAAE,GAAG,iCAAe,EAAE,GAAG,mDAAwB;CAC5I,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Test Contract per test case (P0 phase 09, DOS-14.4–14.6) — read off each case's class in the
|
|
3
|
+
* verdict `sungen contract check` and the delivery guard rebuild (TestCaseState.contract), so the
|
|
4
|
+
* three never disagree. The unit view keeps phase 05's QA decisions (unit.contract-approve,
|
|
5
|
+
* unit.contract-proposed); these add what only a case can say:
|
|
6
|
+
*
|
|
7
|
+
* tc.contract-approve --case only approved, changed, not weaker decide approve --scenario <id>
|
|
8
|
+
* tc.contract-check --case only weaker / other target / lost check,
|
|
9
|
+
* or its lock entry is uncommitted blocked contract check
|
|
10
|
+
* tc.unproven approved free / impl:code, no admissible trace do run-test --ids (traced)
|
|
11
|
+
* tc.conformance its trace is in review: a `low` target identity do contract check --trace
|
|
12
|
+
* · its final attempt did not pass (inconclusive) do run-test --ids
|
|
13
|
+
* · a step no code can compare (opaque) decide contract check
|
|
14
|
+
* tc.contract-check (a weaker / retargeted / lost check, or an uncommitted lock entry) and tc.unproven
|
|
15
|
+
* are hard verdicts: they are offered past a stale or failing audit (the cut at unit.audit-stale /
|
|
16
|
+
* unit.gate-fail), #940; tc.contract-approve (changed, not weaker) is review and waits behind it. Exempt cases (DOS-11.2) open nothing. A proposed case (never approved) asks nothing of its own: a
|
|
17
|
+
* compiled test without a lock is never blocked, and the unit view offers the approval.
|
|
18
|
+
*/
|
|
19
|
+
import { TestCaseNodeDecl } from '../node-decl';
|
|
20
|
+
export declare const TEST_CASE_CONTRACT_NODES: readonly TestCaseNodeDecl[];
|
|
21
|
+
//# sourceMappingURL=test-case-contract-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-case-contract-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAkC,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAqDhF,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAkB/D,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TEST_CASE_CONTRACT_NODES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The Test Contract per test case (P0 phase 09, DOS-14.4–14.6) — read off each case's class in the
|
|
6
|
+
* verdict `sungen contract check` and the delivery guard rebuild (TestCaseState.contract), so the
|
|
7
|
+
* three never disagree. The unit view keeps phase 05's QA decisions (unit.contract-approve,
|
|
8
|
+
* unit.contract-proposed); these add what only a case can say:
|
|
9
|
+
*
|
|
10
|
+
* tc.contract-approve --case only approved, changed, not weaker decide approve --scenario <id>
|
|
11
|
+
* tc.contract-check --case only weaker / other target / lost check,
|
|
12
|
+
* or its lock entry is uncommitted blocked contract check
|
|
13
|
+
* tc.unproven approved free / impl:code, no admissible trace do run-test --ids (traced)
|
|
14
|
+
* tc.conformance its trace is in review: a `low` target identity do contract check --trace
|
|
15
|
+
* · its final attempt did not pass (inconclusive) do run-test --ids
|
|
16
|
+
* · a step no code can compare (opaque) decide contract check
|
|
17
|
+
* tc.contract-check (a weaker / retargeted / lost check, or an uncommitted lock entry) and tc.unproven
|
|
18
|
+
* are hard verdicts: they are offered past a stale or failing audit (the cut at unit.audit-stale /
|
|
19
|
+
* unit.gate-fail), #940; tc.contract-approve (changed, not weaker) is review and waits behind it. Exempt cases (DOS-11.2) open nothing. A proposed case (never approved) asks nothing of its own: a
|
|
20
|
+
* compiled test without a lock is never blocked, and the unit view offers the approval.
|
|
21
|
+
*/
|
|
22
|
+
const node_decl_1 = require("../node-decl");
|
|
23
|
+
const test_case_satisfied_1 = require("../test-case-satisfied");
|
|
24
|
+
const test_case_nodes_1 = require("./test-case-nodes");
|
|
25
|
+
const HARD_LADDER = new Set(['oracle-weakened', 'target-changed', 'assertion-lost']);
|
|
26
|
+
const classOf = (tc) => tc.contract?.class;
|
|
27
|
+
/** Up to three cases with the finding behind each. */
|
|
28
|
+
const withDetail = (cases) => `${cases.slice(0, 3).map((c) => (c.contract?.detail ? `${c.id}: ${c.contract.detail}` : c.id)).join('; ')}${cases.length > 3 ? '; …' : ''}`;
|
|
29
|
+
const check = (s, trace = false) => `sungen contract check --screen ${s.unit}${trace ? ' --trace' : ''}`;
|
|
30
|
+
function contractNode(id, rank, title, actor, gates, caseOnly, active, step, hard, human) {
|
|
31
|
+
return {
|
|
32
|
+
id, title, actor, granularity: 'test-case', appliesTo: node_decl_1.ALL_KINDS, blocking: false, rank, gates, step,
|
|
33
|
+
requires: caseOnly ? ['unit.gate-fail'] : ['unit.run'], produces: ['contracts.lock.yaml', 'decisions/<id>.yaml'],
|
|
34
|
+
...(caseOnly ? { caseOnly: true } : {}),
|
|
35
|
+
active: (_s, tc) => active(tc),
|
|
36
|
+
satisfied: (_s, tc) => (0, test_case_satisfied_1.exemptionOf)(tc) !== null,
|
|
37
|
+
...(hard ? { surfacesPastCut: (_s, tc) => hard(tc) } : {}),
|
|
38
|
+
...(human ? { human } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* An opaque step is cleared by a QA accepting it as it reads now, never by re-approving (#923): one
|
|
43
|
+
* `--accept-opaque` per case whose only hold is the opaque step. A case held by a `low` identity is
|
|
44
|
+
* not acceptable yet (`contract check --trace` resolves it first), so it is not offered (#954).
|
|
45
|
+
*/
|
|
46
|
+
function acceptOpaque(s, _step, cases) {
|
|
47
|
+
return cases.filter((c) => classOf(c) === 'opaque' && !c.contract?.lowIdentity).map((c) => ({
|
|
48
|
+
kind: 'accept-opaque',
|
|
49
|
+
command: `sungen contract approve --screen ${s.unit} --scenario ${c.id} --accept-opaque`,
|
|
50
|
+
reason: `${c.id} carries a step sungen cannot compare${c.contract?.detail ? ` (${c.contract.detail})` : ''} — a QA reviews it verbatim with its file:line in \`${check(s)}\`, then accepts it as it reads now; until then the contract is in review and \`sungen delivery\` waits`,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
const conformanceStep = (s, cases) => {
|
|
54
|
+
const low = cases.filter((c) => c.contract?.lowIdentity);
|
|
55
|
+
if (low.length) {
|
|
56
|
+
return { kind: 'do', command: check(s, true), because: `${low.length} free / impl:code test case(s) act on a target whose identity is only \`low\` (${(0, test_case_nodes_1.listed)(low)}) — resolve them in a real browser (needs @sungen/driver-ui). A low identity is never a match, so the contract stays in review and \`sungen delivery\` waits` };
|
|
57
|
+
}
|
|
58
|
+
const failed = cases.filter((c) => classOf(c) === 'inconclusive');
|
|
59
|
+
if (failed.length) {
|
|
60
|
+
return { kind: 'do', command: `/sungen:run-test ${s.unit}${(0, test_case_nodes_1.idsArg)(failed)}`, because: `${failed.length} approved free / impl:code test case(s) have no passing final attempt (${(0, test_case_nodes_1.listed)(failed)}) — the trace of a failed run proves nothing (contract.inconclusive): fix and triage the red, get a passing run, then \`${check(s, true)}\`` };
|
|
61
|
+
}
|
|
62
|
+
return { kind: 'decide', command: check(s), because: `${cases.length} free / impl:code test case(s) carry a step sungen cannot compare (${withDetail(cases)}) — a QA reviews it in \`sungen contract check\`; until then the contract is in review and \`sungen delivery\` waits. An agent presents this and never approves it` };
|
|
63
|
+
};
|
|
64
|
+
exports.TEST_CASE_CONTRACT_NODES = [
|
|
65
|
+
contractNode('tc.contract-approve', 106, 'Re-approve this changed case', 'human', ['contract.hash-changed'], true, (tc) => classOf(tc) === 'hash-changed' && !tc.contract?.uncommitted, (s, [c]) => ({ kind: 'decide', command: `sungen contract approve --screen ${s.unit} --scenario ${c.id}`, because: `this case changed since QA approved it, not weaker${c.contract?.detail ? ` (${c.contract.detail})` : ''} — a QA re-approves this scenario on a terminal; until then review blocks \`sungen delivery\`. An agent presents it and never approves its own edit` }), undefined, (0, node_decl_1.humanStep)('contract-approve')),
|
|
66
|
+
contractNode('tc.contract-check', 107, 'Restore the approved check of this case', 'human', ['contract.oracle-weakened', 'contract.target-changed', 'contract.assertion-lost', 'contract.lock-uncommitted'], true, (tc) => Boolean(tc.contract?.uncommitted) || HARD_LADDER.has(classOf(tc) ?? ''), (s, [c]) => ({ kind: 'blocked', command: check(s), because: c.contract?.uncommitted
|
|
67
|
+
? `its lock entry is not what QA approved and committed (contract.lock-uncommitted) — \`sungen next ${s.unit}\` names the repair; \`sungen delivery\` is blocked until then`
|
|
68
|
+
: `this case breaks its approved contract (${c.contract?.class}${c.contract?.detail ? `: ${c.contract.detail}` : ''}) — restore the approved check (in the .feature, or in the hand-written test of a free / impl:code case), or a QA approves the change on a terminal (\`sungen contract approve --screen ${s.unit} --scenario ${c.id}\`). \`sungen delivery\` is blocked until then; never weaken an expected value to go green` }), (tc) => Boolean(tc.contract?.uncommitted) || HARD_LADDER.has(classOf(tc) ?? '')),
|
|
69
|
+
contractNode('tc.unproven', 136, 'Prove the approved free cases with a trace', 'ai', ['contract.unproven'], false, (tc) => classOf(tc) === 'unproven', (s, cases) => ({ kind: 'do', command: `/sungen:run-test ${s.unit}${(0, test_case_nodes_1.idsArg)(cases)}`, because: `${cases.length} approved free / impl:code test case(s) have no trace that proves them (${withDetail(cases)}) — run them again with trace: 'on' and the sungen run-record reporter (run-test Phase 4 does), then \`${check(s, true)}\`. Until then \`sungen contract check\` fails (contract.unproven) and \`sungen delivery\` is blocked; re-approving or editing the .feature cannot prove them` }), (tc) => classOf(tc) === 'unproven'),
|
|
70
|
+
contractNode('tc.conformance', 138, 'Settle the traces in review', 'ai', ['contract.opaque-step', 'contract.inconclusive'], false, (tc) => classOf(tc) === 'opaque' || classOf(tc) === 'inconclusive', conformanceStep, undefined, acceptOpaque),
|
|
71
|
+
];
|
|
72
|
+
//# sourceMappingURL=test-case-contract-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-case-contract-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-case nodes (OES-10.3) — added after parity, as an intentional output change. Each judges one
|
|
3
|
+
* case at a time; the cases open at a node fold into ONE step at unit level ("N test case(s) …"),
|
|
4
|
+
* and `sungen next <unit> --case <id>` shows the one case's step. Satisfied semantics: DOS-11.2
|
|
5
|
+
* (test-case-satisfied.ts) — exempt cases never open a node.
|
|
6
|
+
*
|
|
7
|
+
* tc.run never run (a case added after the run) do run-test --ids
|
|
8
|
+
* tc.rerun-stale changed after the recorded run (run manifest) do run-test --change-only
|
|
9
|
+
* tc.triage red, not classified by a current triage do sungen triage
|
|
10
|
+
* tc.product-candidate triage found a product-defect candidate decide sungen defect draft
|
|
11
|
+
* tc.rerun-environment a red the environment caused (#928) decide run-test --ids, once a human confirms it is up
|
|
12
|
+
* tc.fix-test a red the test caused (#928) do run-test --ids (auto-fix)
|
|
13
|
+
* The class is `sungen triage`'s, or a manual classification in force (`sungen triage --case --as`).
|
|
14
|
+
* They sit after unit.run (which cuts a unit that never ran) and before delivery. tc.triage takes
|
|
15
|
+
* the reds the cases account for; unit.triage keeps the rest (unattributedReds), so a red no case
|
|
16
|
+
* explains — an @cases row, a renamed scenario, a nested describe title — still gets a triage step.
|
|
17
|
+
*/
|
|
18
|
+
import { TestCaseNodeDecl } from '../node-decl';
|
|
19
|
+
import type { UnitState } from '../../harness/next-step';
|
|
20
|
+
import type { TestCaseState } from '../test-case-state-shape';
|
|
21
|
+
export declare const listed: (cases: TestCaseState[]) => string;
|
|
22
|
+
/** `--ids` only names cases `sungen select` can resolve: stable ids, a short list. */
|
|
23
|
+
export declare const idsArg: (cases: TestCaseState[]) => string;
|
|
24
|
+
export declare const TEST_CASE_NODES: readonly TestCaseNodeDecl[];
|
|
25
|
+
/** Red final attempts the test cases account for (a case read without the count stands for one). */
|
|
26
|
+
export declare const attributedReds: (s: UnitState) => number;
|
|
27
|
+
/** The reds unit.triage still owns: all of them without test-case states, else those no case accounts for. */
|
|
28
|
+
export declare const unattributedReds: (s: UnitState) => number;
|
|
29
|
+
//# sourceMappingURL=test-case-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-case-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAkC,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,eAAO,MAAM,MAAM,GAAI,OAAO,aAAa,EAAE,KAAG,MAA4F,CAAC;AAC7I,sFAAsF;AACtF,eAAO,MAAM,MAAM,GAAI,OAAO,aAAa,EAAE,KAAG,MACoE,CAAC;AA6BrH,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAoCtD,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,cAAc,GAAI,GAAG,SAAS,KAAG,MACwD,CAAC;AAEvG,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,KAAG,MAAsE,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unattributedReds = exports.attributedReds = exports.TEST_CASE_NODES = exports.idsArg = exports.listed = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Test-case nodes (OES-10.3) — added after parity, as an intentional output change. Each judges one
|
|
6
|
+
* case at a time; the cases open at a node fold into ONE step at unit level ("N test case(s) …"),
|
|
7
|
+
* and `sungen next <unit> --case <id>` shows the one case's step. Satisfied semantics: DOS-11.2
|
|
8
|
+
* (test-case-satisfied.ts) — exempt cases never open a node.
|
|
9
|
+
*
|
|
10
|
+
* tc.run never run (a case added after the run) do run-test --ids
|
|
11
|
+
* tc.rerun-stale changed after the recorded run (run manifest) do run-test --change-only
|
|
12
|
+
* tc.triage red, not classified by a current triage do sungen triage
|
|
13
|
+
* tc.product-candidate triage found a product-defect candidate decide sungen defect draft
|
|
14
|
+
* tc.rerun-environment a red the environment caused (#928) decide run-test --ids, once a human confirms it is up
|
|
15
|
+
* tc.fix-test a red the test caused (#928) do run-test --ids (auto-fix)
|
|
16
|
+
* The class is `sungen triage`'s, or a manual classification in force (`sungen triage --case --as`).
|
|
17
|
+
* They sit after unit.run (which cuts a unit that never ran) and before delivery. tc.triage takes
|
|
18
|
+
* the reds the cases account for; unit.triage keeps the rest (unattributedReds), so a red no case
|
|
19
|
+
* explains — an @cases row, a renamed scenario, a nested describe title — still gets a triage step.
|
|
20
|
+
*/
|
|
21
|
+
const node_decl_1 = require("../node-decl");
|
|
22
|
+
const test_case_satisfied_1 = require("../test-case-satisfied");
|
|
23
|
+
const MAX_IDS = 10;
|
|
24
|
+
const listed = (cases) => `${cases.slice(0, 4).map((c) => c.id).join(', ')}${cases.length > 4 ? ', …' : ''}`;
|
|
25
|
+
exports.listed = listed;
|
|
26
|
+
/** `--ids` only names cases `sungen select` can resolve: stable ids, a short list. */
|
|
27
|
+
const idsArg = (cases) => (cases.length <= MAX_IDS && cases.every((c) => !c.unstableId) ? ` --ids ${cases.map((c) => c.id).join(',')}` : '');
|
|
28
|
+
exports.idsArg = idsArg;
|
|
29
|
+
const flag = (s) => (s.kind === 'api' ? '--api' : '--screen');
|
|
30
|
+
/** Up to three cases with the triage rule that judged each. */
|
|
31
|
+
const withRule = (cases) => `${cases.slice(0, 3).map((c) => `${c.id}: ${c.triage?.ruleId}`).join('; ')}${cases.length > 3 ? '; …' : ''}`;
|
|
32
|
+
function caseNode(id, need, rank, title, actor, step, produces, human) {
|
|
33
|
+
return {
|
|
34
|
+
id, title, actor, granularity: 'test-case', appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.run'], blocking: false, rank,
|
|
35
|
+
gates: [], produces, step,
|
|
36
|
+
active: (_s, tc) => (0, test_case_satisfied_1.triggerOf)(tc) === need,
|
|
37
|
+
satisfied: (_s, tc) => (0, test_case_satisfied_1.exemptionOf)(tc) !== null,
|
|
38
|
+
...(human ? { human } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A red triage left unclassified is a human's to classify (#928): test-defect and environment take it
|
|
43
|
+
* off the product-defect path, so they need a person on a terminal. One action per such case (#954).
|
|
44
|
+
*/
|
|
45
|
+
function classifyByHand(s, _step, cases) {
|
|
46
|
+
return cases.filter((c) => c.triage?.class === 'unclassified').map((c) => ({
|
|
47
|
+
kind: 'triage-classify',
|
|
48
|
+
command: `sungen triage ${flag(s)} ${s.unit} --case ${c.id} --as "<test-defect|environment>" --reason "…"`,
|
|
49
|
+
reason: `${c.id} failed and \`sungen triage\` left it unclassified — read its evidence (trace, error), then classify it: test-defect or environment take it off the product-defect path, so a human types them on a terminal (\`--as product\` anyone may record)`,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
exports.TEST_CASE_NODES = [
|
|
53
|
+
caseNode('tc.run', 'run', 131, 'Run the cases that never ran', 'ai', (s, cases) => ({
|
|
54
|
+
kind: 'do',
|
|
55
|
+
command: `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}`,
|
|
56
|
+
because: `${cases.length} test case(s) have never run (${(0, exports.listed)(cases)}) — their rows read Pending in the deliverable`,
|
|
57
|
+
}), ['specs/generated/<unit>/<unit>-test-result.json']),
|
|
58
|
+
caseNode('tc.rerun-stale', 'rerun-stale', 132, 'Re-run the cases that changed after their run', 'ai', (s, cases, single) => ({
|
|
59
|
+
kind: 'do',
|
|
60
|
+
command: single && (0, exports.idsArg)(cases) ? `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}` : `/sungen:run-test ${s.unit} --change-only`,
|
|
61
|
+
because: `${cases.length} test case(s) changed after the run that produced their result (${cases.slice(0, 3).map((c) => `${c.id}: ${c.stale}`).join('; ')}${cases.length > 3 ? '; …' : ''}) — that result no longer describes the scenario`,
|
|
62
|
+
}), ['specs/generated/<unit>/<unit>-test-result.json', '.sungen/run-manifest/<unit>.json']),
|
|
63
|
+
caseNode('tc.triage', 'triage', 133, 'Classify the red cases', 'deterministic', (s, cases) => {
|
|
64
|
+
const left = cases.filter((c) => c.triage?.class === 'unclassified').length;
|
|
65
|
+
return {
|
|
66
|
+
kind: 'do',
|
|
67
|
+
command: `sungen triage ${flag(s)} ${s.unit}`,
|
|
68
|
+
because: `${cases.length} test case(s) failed in the latest run and are not classified yet${left ? ` (${left} left unclassified by the last triage — read its evidence and classify by hand: \`sungen triage ${flag(s)} ${s.unit} --case <id> --as product|test-defect|environment --reason "…"\`; test-defect and environment are a human's call, on a terminal)` : ''} — classify each (known defect, test defect, environment, product candidate) before exporting or extending: an unexplained red in the deliverable is a finding nobody has judged`,
|
|
69
|
+
};
|
|
70
|
+
}, ['.sungen/triage/<unit>.json'], classifyByHand),
|
|
71
|
+
caseNode('tc.product-candidate', 'product-candidate', 134, 'Decide on the product-defect candidates', 'human', (s, cases, single) => ({
|
|
72
|
+
kind: 'decide',
|
|
73
|
+
command: `sungen defect draft ${flag(s)} ${s.unit}${single ? ` --scenario ${cases[0].id}` : ''}`,
|
|
74
|
+
because: `${cases.length} red test case(s) look like a product defect (${(0, exports.listed)(cases)}) — the app answered and the answer differs from the oracle. A QA decides whether it is a defect to record; an agent presents it and does not draft it on its own`,
|
|
75
|
+
}), ['qa/defects/DEF-<n>-<slug>.md'], (0, node_decl_1.humanStep)('defect-draft')),
|
|
76
|
+
// decide, not do: an agent re-running into an environment that is still down gets the same red and
|
|
77
|
+
// the same step again — a loop with no stop. A human confirms the environment first (#928 review W3).
|
|
78
|
+
caseNode('tc.rerun-environment', 'rerun-environment', 139, 'Re-run the cases the environment failed, once it is up', 'human', (s, cases) => ({
|
|
79
|
+
kind: 'decide',
|
|
80
|
+
command: `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}`,
|
|
81
|
+
because: `${cases.length} red test case(s) failed on the environment, not the app (${withRule(cases)}) — the run never reached a usable app, so their results say nothing about it yet. A human confirms the app, base URL, network, auth state or device is up, then they are re-run; an agent presents this and does not re-run on its own — into an environment that is still down, the same red comes back`,
|
|
82
|
+
}), ['specs/generated/<unit>/<unit>-test-result.json'], (0, node_decl_1.humanStep)('rerun-environment')),
|
|
83
|
+
caseNode('tc.fix-test', 'fix-test', 139.5, 'Fix the tests triaged as test defects', 'ai', (s, cases) => ({
|
|
84
|
+
kind: 'do',
|
|
85
|
+
command: `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}`,
|
|
86
|
+
because: `${cases.length} red test case(s) are test defects (${withRule(cases)}) — the test, not the app, failed: fix its selector, test data or step (run-test's auto-fix reads the triage evidence), then re-run them; never weaken an assertion to make one pass`,
|
|
87
|
+
}), ['selectors/<unit>.yaml', 'specs/generated/<unit>/<unit>-test-result.json']),
|
|
88
|
+
];
|
|
89
|
+
/** Red final attempts the test cases account for (a case read without the count stands for one). */
|
|
90
|
+
const attributedReds = (s) => (s.testCases ?? []).reduce((n, tc) => n + (tc.failedResults ?? (tc.result === 'failed' ? 1 : 0)), 0);
|
|
91
|
+
exports.attributedReds = attributedReds;
|
|
92
|
+
/** The reds unit.triage still owns: all of them without test-case states, else those no case accounts for. */
|
|
93
|
+
const unattributedReds = (s) => (s.failedCount ?? 0) - (s.testCases ? (0, exports.attributedReds)(s) : 0);
|
|
94
|
+
exports.unattributedReds = unattributedReds;
|
|
95
|
+
//# sourceMappingURL=test-case-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-case-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit-stage unit nodes — rows 7–10 of the OES-10.2 parity table (exact words of the frozen oracle).
|
|
3
|
+
*
|
|
4
|
+
* 7 unit.audit-missing never audited → `sungen audit`, cuts
|
|
5
|
+
* 7 unit.audit-stale a report that does not count (stale, untrusted) → re-audit, cuts (OES-10.3,
|
|
6
|
+
* phase 05: the report is read through verifyAuditReport, as gate and delivery do)
|
|
7
|
+
* 8 unit.baseline-changed viewpoint baseline moved → `--accept-viewpoint`, a QA DECISION (#660)
|
|
8
|
+
* 9 unit.repair-findings findings with a known repair → repair + re-audit, names ≤ 4 codes
|
|
9
|
+
* 10 unit.gate-fail gateStatus FAIL → blocked, cuts
|
|
10
|
+
*/
|
|
11
|
+
import { UnitNodeDecl } from '../node-decl';
|
|
12
|
+
import type { UnitState } from '../../harness/next-step';
|
|
13
|
+
/** The finding codes worth naming in a next step — each maps to a specific repair. */
|
|
14
|
+
export declare const REPAIRABLE: readonly string[];
|
|
15
|
+
/** The repairable codes of the audit's findings, in finding order, duplicates kept (they are counted). */
|
|
16
|
+
export declare function repairableCodes(s: UnitState): string[];
|
|
17
|
+
export declare const UNIT_AUDIT_NODES: readonly UnitNodeDecl[];
|
|
18
|
+
//# sourceMappingURL=unit-audit-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unit-audit-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/unit-audit-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAwB,YAAY,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,sFAAsF;AACtF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAQvC,CAAC;AAEF,0GAA0G;AAC1G,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,CAItD;AAMD,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EA4DnD,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UNIT_AUDIT_NODES = exports.REPAIRABLE = void 0;
|
|
4
|
+
exports.repairableCodes = repairableCodes;
|
|
5
|
+
/**
|
|
6
|
+
* Audit-stage unit nodes — rows 7–10 of the OES-10.2 parity table (exact words of the frozen oracle).
|
|
7
|
+
*
|
|
8
|
+
* 7 unit.audit-missing never audited → `sungen audit`, cuts
|
|
9
|
+
* 7 unit.audit-stale a report that does not count (stale, untrusted) → re-audit, cuts (OES-10.3,
|
|
10
|
+
* phase 05: the report is read through verifyAuditReport, as gate and delivery do)
|
|
11
|
+
* 8 unit.baseline-changed viewpoint baseline moved → `--accept-viewpoint`, a QA DECISION (#660)
|
|
12
|
+
* 9 unit.repair-findings findings with a known repair → repair + re-audit, names ≤ 4 codes
|
|
13
|
+
* 10 unit.gate-fail gateStatus FAIL → blocked, cuts
|
|
14
|
+
*/
|
|
15
|
+
const node_decl_1 = require("../node-decl");
|
|
16
|
+
/** The finding codes worth naming in a next step — each maps to a specific repair. */
|
|
17
|
+
exports.REPAIRABLE = [
|
|
18
|
+
'FLOW-CONTRACT-MISSING', 'FLOW-INVENTORY-MISSING', 'FLOW-UNCOVERED', 'FLOW-UNDECLARED',
|
|
19
|
+
'FLOW-PHASE-MISFILED', 'FLOW-GUARANTEE-MISSING', 'FLOW-OUTCOME-UNPROVEN', 'CONTINUITY-ONE-SIDED',
|
|
20
|
+
'ORACLE-URL-ONLY',
|
|
21
|
+
'SPEC-RESTATED-UNVERIFIED', 'VIEWPOINT-GESTURE-SUBSTITUTED', 'SPEC-UNCOVERED', 'SPEC-CLAUSE-UNCOVERED',
|
|
22
|
+
'TRIGGER-UNCOVERED', 'PERMISSION-PAIR-MISSING', 'VISIBILITY-PAIR-MISSING',
|
|
23
|
+
'VIEWPOINT-ITEM-MISSING', 'MANUAL-CODE-MISSING', 'MANUAL-AUTOMATABLE', 'DEPTH-DEFERRED',
|
|
24
|
+
'UI-INVENTORY-MISSING', 'UI-INVENTORY-INCOMPLETE', 'UI-ITEM-UNCOVERED',
|
|
25
|
+
];
|
|
26
|
+
/** The repairable codes of the audit's findings, in finding order, duplicates kept (they are counted). */
|
|
27
|
+
function repairableCodes(s) {
|
|
28
|
+
return (s.audit?.findings ?? [])
|
|
29
|
+
.map((f) => f.split(':')[0].trim())
|
|
30
|
+
.filter((code) => exports.REPAIRABLE.includes(code));
|
|
31
|
+
}
|
|
32
|
+
/** The rules whose conjunction is the audit's gateStatus (audit-gate-terms.ts). */
|
|
33
|
+
const AUDIT_GATE_RULES = ['audit.viewpoint-coverage', 'audit.assertion-depth', 'audit.claim-proof', 'audit.spec-coverage',
|
|
34
|
+
'audit.taxonomy-mismatch', 'audit.gate-sensor-error', 'audit.scenario-id-reuse'];
|
|
35
|
+
exports.UNIT_AUDIT_NODES = [
|
|
36
|
+
{
|
|
37
|
+
id: 'unit.audit-missing', title: 'Measure the suite', actor: 'deterministic', granularity: 'unit',
|
|
38
|
+
appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.no-scenarios'], blocking: true, rank: 70, gates: [], produces: ['.sungen/reports/<unit>-audit.json'],
|
|
39
|
+
active: (s) => !s.auditNotCounted,
|
|
40
|
+
satisfied: (s) => Boolean(s.audit),
|
|
41
|
+
step: (s) => ({ kind: 'do', command: `sungen audit --screen ${s.unit}`, because: 'the suite has never been measured' }),
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
// OES-11.4: next, gate and delivery read one verdict — a report that does not count blocks all three.
|
|
45
|
+
id: 'unit.audit-stale', title: 'Re-measure the suite', actor: 'deterministic', granularity: 'unit',
|
|
46
|
+
appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.no-scenarios'], blocking: true, rank: 71, gates: [], produces: ['.sungen/reports/<unit>-audit.json'],
|
|
47
|
+
active: (s) => Boolean(s.auditNotCounted),
|
|
48
|
+
satisfied: (s) => Boolean(s.audit),
|
|
49
|
+
step: (s) => ({
|
|
50
|
+
kind: 'do',
|
|
51
|
+
command: `sungen audit --screen ${s.unit}`,
|
|
52
|
+
because: s.auditNotCounted.state === 'stale'
|
|
53
|
+
? `the audit report is stale (${s.auditNotCounted.reason}) — it no longer describes the suite and the decisions in force, so \`sungen gate\` and \`sungen delivery\` treat the unit as never audited until it is re-run`
|
|
54
|
+
: `the audit report is not trusted (${s.auditNotCounted.reason}) — it counts as never audited (DOS-14.0) until \`sungen audit\` writes it again; never edit the report`,
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
// A decision, not a step: accepting the yardstick an agent just wrote makes both axes read 100% (#660).
|
|
59
|
+
id: 'unit.baseline-changed', title: 'Accept the changed viewpoint', actor: 'human', granularity: 'unit',
|
|
60
|
+
appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.audit-missing', 'unit.audit-stale'], blocking: false, rank: 80, gates: [], produces: ['.sungen/viewpoint-baseline.json'],
|
|
61
|
+
active: (s) => Boolean(s.audit),
|
|
62
|
+
satisfied: (s) => s.audit?.viewpointBaselineStatus !== 'changed',
|
|
63
|
+
step: (s) => ({
|
|
64
|
+
kind: 'decide',
|
|
65
|
+
command: `sungen audit --screen ${s.unit} --accept-viewpoint`,
|
|
66
|
+
because: 'test-viewpoint.md changed since the accepted baseline, so the ledger and traceability axes are not evidence until a QA confirms the new declaration. A decision, not a step: an agent presents it and does not run it — accepting the yardstick you just wrote makes both axes read 100% by construction',
|
|
67
|
+
}),
|
|
68
|
+
human: (0, node_decl_1.humanStep)('accept-viewpoint'),
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: 'unit.repair-findings', title: 'Repair the named findings', actor: 'ai', granularity: 'unit',
|
|
72
|
+
appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.audit-missing', 'unit.audit-stale'], blocking: false, rank: 90, gates: [], produces: ['features/<unit>.feature'],
|
|
73
|
+
active: (s) => Boolean(s.audit),
|
|
74
|
+
satisfied: (s) => repairableCodes(s).length === 0,
|
|
75
|
+
step: (s) => {
|
|
76
|
+
const repair = repairableCodes(s);
|
|
77
|
+
return {
|
|
78
|
+
kind: 'do',
|
|
79
|
+
command: `repair, then sungen audit --screen ${s.unit}`,
|
|
80
|
+
because: `${repair.length} finding(s) name a specific repair: ${[...new Set(repair)].slice(0, 4).join(', ')}`,
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'unit.gate-fail', title: 'Repair the failing gate', actor: 'ai', granularity: 'unit',
|
|
86
|
+
appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.audit-missing', 'unit.audit-stale'], blocking: true, rank: 100, gates: AUDIT_GATE_RULES, produces: ['features/<unit>.feature'],
|
|
87
|
+
active: (s) => Boolean(s.audit),
|
|
88
|
+
satisfied: (s) => s.audit?.gateStatus !== 'FAIL',
|
|
89
|
+
step: (s) => ({
|
|
90
|
+
kind: 'blocked',
|
|
91
|
+
command: `repair the gate, then sungen audit --screen ${s.unit}`,
|
|
92
|
+
because: `the viewpoint gate is FAIL at ${s.audit.overall}/10 — running tests against a design that fails its own gate measures the wrong thing`,
|
|
93
|
+
}),
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
//# sourceMappingURL=unit-audit-nodes.js.map
|