@sun-asterisk/sungen 3.3.0-alpha.1 → 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/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/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/contract-derive-command.d.ts +4 -2
- package/dist/cli/commands/contract-derive-command.d.ts.map +1 -1
- package/dist/cli/commands/contract-derive-command.js +19 -5
- package/dist/cli/commands/contract-derive-command.js.map +1 -1
- package/dist/cli/commands/contract.d.ts +3 -0
- package/dist/cli/commands/contract.d.ts.map +1 -1
- package/dist/cli/commands/contract.js +40 -7
- package/dist/cli/commands/contract.js.map +1 -1
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +59 -18
- 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 +14 -2
- 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 +6 -4
- package/dist/cli/commands/journey.js.map +1 -1
- package/dist/cli/commands/next.d.ts +7 -2
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +41 -10
- 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.map +1 -1
- package/dist/cli/commands/update.js +6 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +5 -1
- 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 +8 -1
- package/dist/contract/approve-contract.d.ts.map +1 -1
- package/dist/contract/approve-contract.js +6 -0
- package/dist/contract/approve-contract.js.map +1 -1
- package/dist/contract/build-contract-verdict.js +2 -2
- package/dist/contract/build-contract-verdict.js.map +1 -1
- package/dist/contract/build-trace-conformance.d.ts +5 -1
- package/dist/contract/build-trace-conformance.d.ts.map +1 -1
- package/dist/contract/build-trace-conformance.js +12 -14
- package/dist/contract/build-trace-conformance.js.map +1 -1
- package/dist/contract/classify-contract-change.d.ts +3 -2
- package/dist/contract/classify-contract-change.d.ts.map +1 -1
- package/dist/contract/classify-contract-change.js.map +1 -1
- package/dist/contract/classify-trace-conformance.d.ts +18 -3
- package/dist/contract/classify-trace-conformance.d.ts.map +1 -1
- package/dist/contract/classify-trace-conformance.js +64 -17
- package/dist/contract/classify-trace-conformance.js.map +1 -1
- package/dist/contract/contract-schema.d.ts +21 -0
- package/dist/contract/contract-schema.d.ts.map +1 -1
- package/dist/contract/contract-schema.js +25 -3
- package/dist/contract/contract-schema.js.map +1 -1
- package/dist/contract/contracts-lock-file.d.ts.map +1 -1
- package/dist/contract/contracts-lock-file.js +1 -0
- package/dist/contract/contracts-lock-file.js.map +1 -1
- package/dist/contract/derive-free-feature.d.ts +19 -0
- package/dist/contract/derive-free-feature.d.ts.map +1 -1
- package/dist/contract/derive-free-feature.js +40 -2
- package/dist/contract/derive-free-feature.js.map +1 -1
- package/dist/contract/project-contract-blockers.d.ts.map +1 -1
- package/dist/contract/project-contract-blockers.js +4 -2
- package/dist/contract/project-contract-blockers.js.map +1 -1
- package/dist/contract/record-contract-approval.d.ts +16 -1
- package/dist/contract/record-contract-approval.d.ts.map +1 -1
- package/dist/contract/record-contract-approval.js +29 -1
- package/dist/contract/record-contract-approval.js.map +1 -1
- package/dist/contract/render-free-gherkin.d.ts +2 -0
- package/dist/contract/render-free-gherkin.d.ts.map +1 -1
- package/dist/contract/render-free-gherkin.js +6 -0
- package/dist/contract/render-free-gherkin.js.map +1 -1
- package/dist/contract/resolve-unit-trace-identities.d.ts +12 -0
- package/dist/contract/resolve-unit-trace-identities.d.ts.map +1 -1
- package/dist/contract/resolve-unit-trace-identities.js +33 -49
- package/dist/contract/resolve-unit-trace-identities.js.map +1 -1
- package/dist/contract/trace/collect-trace-evidence.d.ts +16 -5
- package/dist/contract/trace/collect-trace-evidence.d.ts.map +1 -1
- package/dist/contract/trace/collect-trace-evidence.js +101 -43
- package/dist/contract/trace/collect-trace-evidence.js.map +1 -1
- 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 +4 -2
- package/dist/contract/trace/select-final-attempt.d.ts.map +1 -1
- package/dist/contract/trace/select-final-attempt.js +7 -4
- package/dist/contract/trace/select-final-attempt.js.map +1 -1
- package/dist/contract/trace/test-step-join.d.ts +3 -3
- package/dist/contract/trace/test-step-join.d.ts.map +1 -1
- package/dist/contract/trace/test-step-join.js +2 -2
- package/dist/contract/trace/test-step-join.js.map +1 -1
- package/dist/contract/trace/trace-binding.d.ts +3 -2
- package/dist/contract/trace/trace-binding.d.ts.map +1 -1
- package/dist/contract/trace/trace-binding.js +6 -3
- package/dist/contract/trace/trace-binding.js.map +1 -1
- package/dist/contract/trace/trace-file-reader.d.ts +14 -2
- package/dist/contract/trace/trace-file-reader.d.ts.map +1 -1
- package/dist/contract/trace/trace-file-reader.js +27 -45
- package/dist/contract/trace/trace-file-reader.js.map +1 -1
- 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 +2 -0
- package/dist/contract/trace/trace-identity-resolution.d.ts.map +1 -1
- package/dist/contract/trace/trace-identity-resolution.js +6 -3
- package/dist/contract/trace/trace-identity-resolution.js.map +1 -1
- package/dist/contract/trace/trace-run-record.d.ts +8 -3
- package/dist/contract/trace/trace-run-record.d.ts.map +1 -1
- package/dist/contract/trace/trace-run-record.js +42 -22
- package/dist/contract/trace/trace-run-record.js.map +1 -1
- package/dist/contract/trace/trace-steps.js +1 -1
- package/dist/contract/trace/trace-steps.js.map +1 -1
- package/dist/contract/trace/trace-zip-limits.d.ts +5 -1
- package/dist/contract/trace/trace-zip-limits.d.ts.map +1 -1
- package/dist/contract/trace/trace-zip-limits.js +6 -2
- package/dist/contract/trace/trace-zip-limits.js.map +1 -1
- package/dist/contract/verify-approval-decisions.d.ts.map +1 -1
- package/dist/contract/verify-approval-decisions.js +9 -4
- package/dist/contract/verify-approval-decisions.js.map +1 -1
- package/dist/decisions/confirmed-decision-commands.d.ts +11 -0
- package/dist/decisions/confirmed-decision-commands.d.ts.map +1 -1
- package/dist/decisions/confirmed-decision-commands.js +21 -3
- package/dist/decisions/confirmed-decision-commands.js.map +1 -1
- package/dist/decisions/decision-schema.d.ts +2 -1
- package/dist/decisions/decision-schema.d.ts.map +1 -1
- package/dist/decisions/decision-schema.js +2 -1
- package/dist/decisions/decision-schema.js.map +1 -1
- package/dist/decisions/git-head-trust.d.ts +12 -0
- package/dist/decisions/git-head-trust.d.ts.map +1 -1
- package/dist/decisions/git-head-trust.js +52 -0
- package/dist/decisions/git-head-trust.js.map +1 -1
- package/dist/decisions/human-confirmation.d.ts +2 -0
- package/dist/decisions/human-confirmation.d.ts.map +1 -1
- package/dist/decisions/human-confirmation.js +6 -0
- package/dist/decisions/human-confirmation.js.map +1 -1
- package/dist/decisions/legacy-waiver-migration.d.ts +8 -1
- package/dist/decisions/legacy-waiver-migration.d.ts.map +1 -1
- package/dist/decisions/legacy-waiver-migration.js +13 -4
- package/dist/decisions/legacy-waiver-migration.js.map +1 -1
- 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/export.d.ts +6 -1
- package/dist/exporters/matrix/export.d.ts.map +1 -1
- package/dist/exporters/matrix/export.js +11 -4
- package/dist/exporters/matrix/export.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/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/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 +21 -1
- package/dist/graph/evaluate-graph.d.ts.map +1 -1
- package/dist/graph/evaluate-graph.js +37 -9
- package/dist/graph/evaluate-graph.js.map +1 -1
- 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/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 +16 -0
- package/dist/graph/node-decl.d.ts.map +1 -1
- package/dist/graph/node-decl.js +4 -1
- package/dist/graph/node-decl.js.map +1 -1
- package/dist/graph/nodes/test-case-contract-nodes.d.ts +3 -1
- package/dist/graph/nodes/test-case-contract-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/test-case-contract-nodes.js +22 -6
- package/dist/graph/nodes/test-case-contract-nodes.js.map +1 -1
- package/dist/graph/nodes/test-case-nodes.d.ts +3 -0
- package/dist/graph/nodes/test-case-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/test-case-nodes.js +33 -4
- package/dist/graph/nodes/test-case-nodes.js.map +1 -1
- package/dist/graph/nodes/unit-audit-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/unit-audit-nodes.js +1 -0
- package/dist/graph/nodes/unit-audit-nodes.js.map +1 -1
- package/dist/graph/nodes/unit-contract-node.d.ts +2 -1
- package/dist/graph/nodes/unit-contract-node.d.ts.map +1 -1
- package/dist/graph/nodes/unit-contract-node.js +16 -1
- package/dist/graph/nodes/unit-contract-node.js.map +1 -1
- package/dist/graph/nodes/unit-design-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/unit-design-nodes.js +2 -1
- package/dist/graph/nodes/unit-design-nodes.js.map +1 -1
- package/dist/graph/test-case-results.d.ts +1 -0
- package/dist/graph/test-case-results.d.ts.map +1 -1
- package/dist/graph/test-case-results.js +27 -3
- package/dist/graph/test-case-results.js.map +1 -1
- package/dist/graph/test-case-satisfied.d.ts +5 -4
- package/dist/graph/test-case-satisfied.d.ts.map +1 -1
- package/dist/graph/test-case-satisfied.js +4 -0
- package/dist/graph/test-case-satisfied.js.map +1 -1
- package/dist/graph/test-case-state-shape.d.ts +7 -1
- package/dist/graph/test-case-state-shape.d.ts.map +1 -1
- package/dist/graph/unit-artifact-probes.d.ts.map +1 -1
- package/dist/graph/unit-artifact-probes.js +3 -1
- package/dist/graph/unit-artifact-probes.js.map +1 -1
- 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/harness/audit.d.ts +3 -2
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +4 -17
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/catalog/gate-rules.yaml +3 -3
- 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-verdict.d.ts.map +1 -1
- package/dist/harness/gates/audit-gate-verdict.js +2 -1
- package/dist/harness/gates/audit-gate-verdict.js.map +1 -1
- package/dist/harness/gates/audit-input-hash.d.ts +2 -0
- package/dist/harness/gates/audit-input-hash.d.ts.map +1 -1
- package/dist/harness/gates/audit-input-hash.js +30 -2
- package/dist/harness/gates/audit-input-hash.js.map +1 -1
- package/dist/harness/gates/audit-report-verification.d.ts +17 -6
- package/dist/harness/gates/audit-report-verification.d.ts.map +1 -1
- package/dist/harness/gates/audit-report-verification.js +55 -21
- package/dist/harness/gates/audit-report-verification.js.map +1 -1
- package/dist/harness/gates/delivery-checklist.d.ts +3 -0
- package/dist/harness/gates/delivery-checklist.d.ts.map +1 -1
- package/dist/harness/gates/delivery-checklist.js +39 -6
- package/dist/harness/gates/delivery-checklist.js.map +1 -1
- package/dist/harness/gates/delivery-decision-gate.d.ts +4 -0
- package/dist/harness/gates/delivery-decision-gate.d.ts.map +1 -1
- package/dist/harness/gates/delivery-decision-gate.js +26 -1
- package/dist/harness/gates/delivery-decision-gate.js.map +1 -1
- package/dist/harness/gates/delivery-decision-step.d.ts +4 -1
- package/dist/harness/gates/delivery-decision-step.d.ts.map +1 -1
- package/dist/harness/gates/delivery-decision-step.js +17 -2
- package/dist/harness/gates/delivery-decision-step.js.map +1 -1
- package/dist/harness/gates/in-run-decision-check.d.ts.map +1 -1
- package/dist/harness/gates/in-run-decision-check.js +40 -12
- package/dist/harness/gates/in-run-decision-check.js.map +1 -1
- 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 +14 -4
- package/dist/harness/gates/migrated-waiver-review.d.ts.map +1 -1
- package/dist/harness/gates/migrated-waiver-review.js +78 -80
- package/dist/harness/gates/migrated-waiver-review.js.map +1 -1
- package/dist/harness/journey.d.ts +40 -0
- package/dist/harness/journey.d.ts.map +1 -1
- package/dist/harness/journey.js +155 -22
- package/dist/harness/journey.js.map +1 -1
- package/dist/harness/next-step.d.ts +19 -0
- package/dist/harness/next-step.d.ts.map +1 -1
- package/dist/harness/next-step.js +21 -0
- package/dist/harness/next-step.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/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 +12 -2
- package/dist/hooks/bash-write-targets.d.ts.map +1 -1
- package/dist/hooks/bash-write-targets.js +122 -29
- package/dist/hooks/bash-write-targets.js.map +1 -1
- package/dist/hooks/guard-protected-paths.d.ts +4 -0
- package/dist/hooks/guard-protected-paths.d.ts.map +1 -1
- package/dist/hooks/guard-protected-paths.js +13 -3
- package/dist/hooks/guard-protected-paths.js.map +1 -1
- package/dist/hooks/guard-rules.d.ts +0 -17
- package/dist/hooks/guard-rules.d.ts.map +1 -1
- package/dist/hooks/guard-rules.js +79 -10
- package/dist/hooks/guard-rules.js.map +1 -1
- package/dist/hooks/guard-tty-spoof-rule.d.ts +3 -1
- package/dist/hooks/guard-tty-spoof-rule.d.ts.map +1 -1
- package/dist/hooks/guard-tty-spoof-rule.js +3 -2
- package/dist/hooks/guard-tty-spoof-rule.js.map +1 -1
- package/dist/hooks/hand-back-core.d.ts +9 -4
- package/dist/hooks/hand-back-core.d.ts.map +1 -1
- package/dist/hooks/hand-back-core.js +24 -11
- package/dist/hooks/hand-back-core.js.map +1 -1
- package/dist/hooks/session-start-unit-state-hook.d.ts +2 -1
- package/dist/hooks/session-start-unit-state-hook.d.ts.map +1 -1
- package/dist/hooks/session-start-unit-state-hook.js +9 -4
- package/dist/hooks/session-start-unit-state-hook.js.map +1 -1
- package/dist/hooks/stop-next-step-hook.d.ts.map +1 -1
- package/dist/hooks/stop-next-step-hook.js +1 -0
- package/dist/hooks/stop-next-step-hook.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/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +1 -0
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/create-test.md +6 -3
- package/dist/orchestrator/templates/ai-src/commands/delivery.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/review.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +1 -1
- 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/package.json +3 -3
- package/src/capabilities/discover.ts +15 -2
- package/src/cli/case-triage-hint.ts +31 -0
- package/src/cli/commands/audit.ts +1 -1
- package/src/cli/commands/contract-derive-command.ts +20 -8
- package/src/cli/commands/contract.ts +41 -7
- package/src/cli/commands/delivery.ts +56 -18
- package/src/cli/commands/gate.ts +2 -1
- package/src/cli/commands/generate.ts +13 -2
- package/src/cli/commands/journey.ts +8 -6
- package/src/cli/commands/next.ts +41 -12
- package/src/cli/commands/triage.ts +41 -3
- package/src/cli/commands/update.ts +6 -2
- package/src/cli/index.ts +5 -1
- 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 +10 -3
- package/src/contract/build-contract-verdict.ts +2 -2
- package/src/contract/build-trace-conformance.ts +11 -8
- package/src/contract/classify-contract-change.ts +3 -3
- package/src/contract/classify-trace-conformance.ts +76 -22
- package/src/contract/contract-schema.ts +31 -2
- package/src/contract/contracts-lock-file.ts +1 -0
- package/src/contract/derive-free-feature.ts +46 -3
- package/src/contract/project-contract-blockers.ts +4 -2
- package/src/contract/record-contract-approval.ts +41 -1
- package/src/contract/render-free-gherkin.ts +5 -0
- package/src/contract/resolve-unit-trace-identities.ts +35 -12
- package/src/contract/trace/collect-trace-evidence.ts +105 -36
- 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 +12 -5
- package/src/contract/trace/test-step-join.ts +6 -5
- package/src/contract/trace/trace-binding.ts +7 -4
- package/src/contract/trace/trace-file-reader.ts +34 -13
- package/src/contract/trace/trace-freshness.ts +110 -0
- package/src/contract/trace/trace-identity-resolution.ts +7 -4
- package/src/contract/trace/trace-run-record.ts +37 -15
- package/src/contract/trace/trace-steps.ts +1 -1
- package/src/contract/trace/trace-zip-limits.ts +6 -2
- package/src/contract/verify-approval-decisions.ts +9 -5
- package/src/decisions/confirmed-decision-commands.ts +25 -4
- package/src/decisions/decision-schema.ts +2 -1
- package/src/decisions/git-head-trust.ts +44 -0
- package/src/decisions/human-confirmation.ts +5 -0
- package/src/decisions/legacy-waiver-migration.ts +14 -3
- package/src/exporters/csv-exporter.ts +12 -4
- package/src/exporters/matrix/export.ts +11 -4
- package/src/exporters/matrix/xlsx-cells.ts +1 -1
- package/src/exporters/xlsx-exporter.ts +5 -4
- package/src/graph/board-human-actions.ts +80 -0
- package/src/graph/evaluate-graph.ts +45 -10
- package/src/graph/human-action.ts +33 -0
- package/src/graph/manual-triage-decisions.ts +55 -0
- package/src/graph/node-decl.ts +18 -0
- package/src/graph/nodes/test-case-contract-nodes.ts +28 -7
- package/src/graph/nodes/test-case-nodes.ts +37 -5
- package/src/graph/nodes/unit-audit-nodes.ts +2 -1
- package/src/graph/nodes/unit-contract-node.ts +20 -2
- package/src/graph/nodes/unit-design-nodes.ts +2 -1
- package/src/graph/test-case-results.ts +25 -4
- package/src/graph/test-case-satisfied.ts +7 -4
- package/src/graph/test-case-state-shape.ts +7 -2
- package/src/graph/unit-artifact-probes.ts +3 -1
- package/src/graph/unit-results-freshness.ts +165 -0
- package/src/harness/audit.ts +4 -13
- package/src/harness/catalog/gate-rules.yaml +3 -3
- 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-verdict.ts +2 -1
- package/src/harness/gates/audit-input-hash.ts +27 -3
- package/src/harness/gates/audit-report-verification.ts +57 -24
- package/src/harness/gates/delivery-checklist.ts +39 -7
- package/src/harness/gates/delivery-decision-gate.ts +29 -1
- package/src/harness/gates/delivery-decision-step.ts +19 -3
- package/src/harness/gates/in-run-decision-check.ts +38 -13
- package/src/harness/gates/migrated-waiver-import-bounds.ts +103 -0
- package/src/harness/gates/migrated-waiver-review.ts +90 -37
- package/src/harness/journey.ts +174 -21
- package/src/harness/next-step.ts +34 -1
- package/src/harness/provenance.ts +99 -11
- 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 +109 -23
- package/src/hooks/guard-protected-paths.ts +13 -3
- package/src/hooks/guard-rules.ts +37 -18
- package/src/hooks/guard-tty-spoof-rule.ts +6 -3
- package/src/hooks/hand-back-core.ts +24 -12
- package/src/hooks/session-start-unit-state-hook.ts +9 -4
- package/src/hooks/stop-next-step-hook.ts +1 -0
- package/src/orchestrator/assets-drift.ts +12 -5
- package/src/orchestrator/project-initializer.ts +1 -0
- package/src/orchestrator/templates/ai-src/commands/create-test.md +6 -3
- package/src/orchestrator/templates/ai-src/commands/delivery.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/review.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/run-test.md +1 -1
- 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
|
@@ -19,12 +19,31 @@ export interface DeriveResult {
|
|
|
19
19
|
low: number;
|
|
20
20
|
opaque: number;
|
|
21
21
|
}>;
|
|
22
|
+
/** `approved: true` — skipped because QA already approved it (derive never rewrites one), not for want of a trace. */
|
|
22
23
|
skipped: Array<{
|
|
23
24
|
id: string;
|
|
24
25
|
reason: string;
|
|
26
|
+
approved?: true;
|
|
25
27
|
}>;
|
|
26
28
|
refused?: SecretHit[];
|
|
29
|
+
/**
|
|
30
|
+
* Ids two or more recorded tests claim (#962), each test as `file:line "title" (run record <path>)` —
|
|
31
|
+
* nothing was written. `staleRecords`: older test-results/ records that are a claim's only source.
|
|
32
|
+
*/
|
|
33
|
+
duplicateIds?: Array<{
|
|
34
|
+
id: string;
|
|
35
|
+
tests: string[];
|
|
36
|
+
staleRecords?: string[];
|
|
37
|
+
}>;
|
|
27
38
|
note?: string;
|
|
39
|
+
/** A derived id another `.feature` of the unit already uses (#939) — `contract check` and approve would trip on it later. */
|
|
40
|
+
warnings?: string[];
|
|
28
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Nothing was derived and nothing explains it away: no test of the unit left an admissible trace
|
|
44
|
+
* (#932). Not when the scenarios are approved (derive leaves those alone by design), up to date,
|
|
45
|
+
* refused, or the project is mobile (`note`).
|
|
46
|
+
*/
|
|
47
|
+
export declare function nothingDerived(r: DeriveResult): boolean;
|
|
29
48
|
export declare function deriveFreeFeature(i: DeriveInput): Promise<DeriveResult>;
|
|
30
49
|
//# sourceMappingURL=derive-free-feature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-free-feature.d.ts","sourceRoot":"","sources":["../../src/contract/derive-free-feature.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"derive-free-feature.d.ts","sourceRoot":"","sources":["../../src/contract/derive-free-feature.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAwD,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAS7G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKrE,MAAM,WAAW,WAAW;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAA;CAAE;AACjJ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,sHAAsH;IACtH,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAoCD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,YAAY,GAAG,OAAO,CAEvD;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAuD7E"}
|
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.nothingDerived = nothingDerived;
|
|
36
37
|
exports.deriveFreeFeature = deriveFreeFeature;
|
|
37
38
|
/**
|
|
38
39
|
* `sungen contract derive --screen <u>` (DOS-14.8): free tests' traces → `features/<u>.free.feature`,
|
|
@@ -44,6 +45,8 @@ exports.deriveFreeFeature = deriveFreeFeature;
|
|
|
44
45
|
* identities asked of the registered `traceIdentity` resolver (driver-ui) when one is given,
|
|
45
46
|
* otherwise the cache, otherwise core's heuristic — `# identity low` marks those steps
|
|
46
47
|
* approved a scenario QA already approved (no `@proposed`) is never rewritten
|
|
48
|
+
* one id, one two recorded tests claiming one id (#962) refuse the derive — both named with
|
|
49
|
+
* test file:line, NOTHING written for the unit: keeping one would drop the other's contract
|
|
47
50
|
* safety redaction by field meaning, machine paths scrubbed, then the secret scanner and the
|
|
48
51
|
* semantic credential check over the exact text: any hit → NOTHING is written
|
|
49
52
|
*/
|
|
@@ -58,8 +61,10 @@ const field_semantic_redaction_1 = require("./field-semantic-redaction");
|
|
|
58
61
|
const free_feature_blocks_1 = require("./free-feature-blocks");
|
|
59
62
|
const lock_secret_guard_1 = require("./lock-secret-guard");
|
|
60
63
|
const normalize_feature_steps_1 = require("./normalize-feature-steps");
|
|
64
|
+
const unit_paths_1 = require("../harness/unit-paths");
|
|
61
65
|
const render_free_gherkin_1 = require("./render-free-gherkin");
|
|
62
66
|
const collect_trace_evidence_1 = require("./trace/collect-trace-evidence");
|
|
67
|
+
const scenario_id_claims_1 = require("./trace/scenario-id-claims");
|
|
63
68
|
const identity_cache_1 = require("./trace/identity-cache");
|
|
64
69
|
const trace_identity_resolution_1 = require("./trace/trace-identity-resolution");
|
|
65
70
|
const trace_fingerprint_1 = require("./trace/trace-fingerprint");
|
|
@@ -82,6 +87,32 @@ function semanticHits(text, label) {
|
|
|
82
87
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
83
88
|
}
|
|
84
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* The derived ids another `.feature` of the unit already carries (#939): `contract check` reports an id
|
|
92
|
+
* used twice and approve refuses it, so say it now — when it is still one rename away — not at check.
|
|
93
|
+
*/
|
|
94
|
+
function reusedIdWarnings(unit, freeFile, ids) {
|
|
95
|
+
const owners = new Map();
|
|
96
|
+
for (const f of (0, unit_paths_1.featureFilesFor)(unit.dir, unit.name)) {
|
|
97
|
+
if (path.resolve(f) === path.resolve(freeFile) || !fs.existsSync(f))
|
|
98
|
+
continue;
|
|
99
|
+
try {
|
|
100
|
+
for (const sc of (0, normalize_feature_steps_1.scenariosOfFeatureFile)(f))
|
|
101
|
+
if (!owners.has(sc.id))
|
|
102
|
+
owners.set(sc.id, path.basename(f));
|
|
103
|
+
}
|
|
104
|
+
catch { /* an unparseable sibling is `contract check`'s to report */ }
|
|
105
|
+
}
|
|
106
|
+
return ids.filter((id) => owners.has(id)).map((id) => `${id} is already the ID of a scenario in ${owners.get(id)} — the derived scenario reuses it; give the free test (its title's leading ID, or its @tag) or that scenario its own ID, or \`sungen contract check\` reports it twice and approval refuses it`);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Nothing was derived and nothing explains it away: no test of the unit left an admissible trace
|
|
110
|
+
* (#932). Not when the scenarios are approved (derive leaves those alone by design), up to date,
|
|
111
|
+
* refused, or the project is mobile (`note`).
|
|
112
|
+
*/
|
|
113
|
+
function nothingDerived(r) {
|
|
114
|
+
return !r.note && !r.refused?.length && !r.duplicateIds?.length && r.scenarios.length === 0 && !r.skipped.some((s) => s.approved);
|
|
115
|
+
}
|
|
85
116
|
async function deriveFreeFeature(i) {
|
|
86
117
|
const unitBase = path.basename(i.unit.name);
|
|
87
118
|
const file = path.join(i.unit.dir, 'features', `${unitBase}.free.feature`);
|
|
@@ -89,7 +120,11 @@ async function deriveFreeFeature(i) {
|
|
|
89
120
|
if (((0, capability_1.readCapabilities)(i.projectRoot).platform ?? '').toLowerCase() === 'mobile')
|
|
90
121
|
return { ...result, note: build_trace_conformance_1.MOBILE_NOT_SUPPORTED };
|
|
91
122
|
const grep = i.grep ? new RegExp(i.grep, 'i') : null;
|
|
92
|
-
const found = (0, collect_trace_evidence_1.collectRuns)(i.projectRoot, (id, t) => (grep ? grep.test(`${id} ${t.title} ${t.file}`) : belongsToUnit(t.file, unitBase.toLowerCase())),
|
|
123
|
+
const found = (0, collect_trace_evidence_1.collectRuns)(i.projectRoot, (id, t) => (grep ? grep.test(`${id} ${t.title} ${t.file}`) : belongsToUnit(t.file, unitBase.toLowerCase())), null);
|
|
124
|
+
const claimed = (0, scenario_id_claims_1.idsClaimedByTwoTests)(i.projectRoot, found.runs);
|
|
125
|
+
if (claimed.size) {
|
|
126
|
+
return { ...result, duplicateIds: [...claimed].sort(([a], [b]) => a.localeCompare(b, 'en')).map(([id, c]) => ({ id, tests: c.tests, ...(c.staleRecords.length ? { staleRecords: c.staleRecords } : {}) })) };
|
|
127
|
+
}
|
|
93
128
|
const byId = new Map();
|
|
94
129
|
for (const r of found.runs)
|
|
95
130
|
byId.set(r.scenarioId, [...(byId.get(r.scenarioId) ?? []), r]);
|
|
@@ -109,7 +144,7 @@ async function deriveFreeFeature(i) {
|
|
|
109
144
|
continue;
|
|
110
145
|
}
|
|
111
146
|
if (kept.some((b) => b.id === id && !b.proposed)) {
|
|
112
|
-
result.skipped.push({ id, reason: 'approved — derive never rewrites an approved scenario; use `sungen contract check --trace`' });
|
|
147
|
+
result.skipped.push({ id, reason: 'approved — derive never rewrites an approved scenario; use `sungen contract check --trace`', approved: true });
|
|
113
148
|
continue;
|
|
114
149
|
}
|
|
115
150
|
const secrets = new Set();
|
|
@@ -131,6 +166,9 @@ async function deriveFreeFeature(i) {
|
|
|
131
166
|
}
|
|
132
167
|
if (!result.scenarios.length)
|
|
133
168
|
return result;
|
|
169
|
+
const reused = reusedIdWarnings(i.unit, file, result.scenarios.map((x) => x.id));
|
|
170
|
+
if (reused.length)
|
|
171
|
+
result.warnings = reused;
|
|
134
172
|
const text = (0, render_free_gherkin_1.freeFeatureText)(unitBase, [...blocks.values()]);
|
|
135
173
|
const label = path.basename(file);
|
|
136
174
|
const hits = [...(MACHINE_PATH.test(text) ? [{ where: label, reason: 'a machine path survived scrubbing' }] : []), ...(0, field_semantic_redaction_1.secretScanHits)(text, label), ...semanticHits(text, label)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive-free-feature.js","sourceRoot":"","sources":["../../src/contract/derive-free-feature.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"derive-free-feature.js","sourceRoot":"","sources":["../../src/contract/derive-free-feature.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-contract-blockers.d.ts","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-contract-blockers.d.ts","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":"AAYA,OAAO,EAAwB,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAM5F,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAE3G,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,EAAE,CAiBpI"}
|
|
@@ -40,12 +40,14 @@ exports.contractBlockers = contractBlockers;
|
|
|
40
40
|
* HEAD is read once (one `git ls-tree`, bounded by the caller's timeout). A unit with no lock in the
|
|
41
41
|
* working tree AND none in HEAD has no contract to break and is skipped without parsing anything.
|
|
42
42
|
* Every other unit gets its verdict rebuilt by buildContractVerdict — the same function `contract
|
|
43
|
-
* check` runs — and anything but `pass` blocks.
|
|
43
|
+
* check` runs — and anything but `pass` blocks. Its trace part gets the guard's ~3 s at most:
|
|
44
|
+
* SUNGEN_TRACE_VERDICT_BUDGET_MS can shorten that here, never lengthen it (#926). A lock deleted from the working tree still counts
|
|
44
45
|
* while HEAD holds it. If git FAILS in a checkout that has .git while a delivered unit has a lock,
|
|
45
46
|
* this throws (GitUnavailableError): the guard asks rather than calling an unverifiable lock clean.
|
|
46
47
|
*/
|
|
47
48
|
const fs = __importStar(require("fs"));
|
|
48
49
|
const build_contract_verdict_1 = require("./build-contract-verdict");
|
|
50
|
+
const build_trace_conformance_1 = require("./build-trace-conformance");
|
|
49
51
|
const contract_git_1 = require("./contract-git");
|
|
50
52
|
const contract_schema_1 = require("./contract-schema");
|
|
51
53
|
const contracts_lock_file_1 = require("./contracts-lock-file");
|
|
@@ -59,7 +61,7 @@ function contractBlockers(projectRoot, units, opts = {}) {
|
|
|
59
61
|
for (const unit of unique) {
|
|
60
62
|
if (!hasWorkingLock(unit) && !snap.blobs?.has((0, contract_git_1.posixRel)(projectRoot, (0, contracts_lock_file_1.lockPathFor)(unit.dir))))
|
|
61
63
|
continue;
|
|
62
|
-
const v = (0, build_contract_verdict_1.buildContractVerdict)(projectRoot, unit, { snapshot: snap });
|
|
64
|
+
const v = (0, build_contract_verdict_1.buildContractVerdict)(projectRoot, unit, { snapshot: snap, traceBudgetMs: (0, build_trace_conformance_1.guardTraceBudgetMs)() });
|
|
63
65
|
if (v.verdict === 'pass')
|
|
64
66
|
continue;
|
|
65
67
|
const worst = v.scenarios.find((s) => contract_schema_1.HARD_CLASSES.has(s.class)) ?? v.scenarios.find((s) => s.class === 'hash-changed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-contract-blockers.js","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"project-contract-blockers.js","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,4CAiBC;AArCD;;;;;;;;;;GAUG;AACH,uCAAyB;AACzB,qEAA4F;AAC5F,uEAA+D;AAC/D,iDAAiG;AACjG,uDAAiD;AACjD,+DAAoD;AAIpD,SAAgB,gBAAgB,CAAC,WAAmB,EAAE,KAAqB,EAAE,OAAkC,EAAE;IAC/G,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAA,2BAAY,EAAC,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,iCAAkB,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,CAAC,CAAe,EAAW,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAA,iCAAW,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,kCAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAA,uBAAQ,EAAC,WAAW,EAAE,IAAA,iCAAW,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QACtG,MAAM,CAAC,GAAG,IAAA,6CAAoB,EAAC,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAA,4CAAkB,GAAE,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,8BAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC;QACxH,MAAM,QAAQ,GAAG,KAAK;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1F,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wCAAwC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC;QACnL,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ContractLock, ContractScenario } from './contract-schema';
|
|
1
|
+
import { AcceptedOpaqueStep, ContractLock, ContractScenario } from './contract-schema';
|
|
2
2
|
export interface ApprovalWrite {
|
|
3
3
|
projectRoot: string;
|
|
4
4
|
unitDir: string;
|
|
@@ -9,6 +9,17 @@ export interface ApprovalWrite {
|
|
|
9
9
|
lock: ContractLock | null;
|
|
10
10
|
}
|
|
11
11
|
export declare const DEFAULT_APPROVAL_REASON = "QA reviewed the normalized Gherkin contract";
|
|
12
|
+
export declare const DEFAULT_OPAQUE_REASON = "QA reviewed the opaque step(s) sungen cannot compare";
|
|
13
|
+
export interface OpaqueAcceptanceWrite {
|
|
14
|
+
projectRoot: string;
|
|
15
|
+
unitDir: string;
|
|
16
|
+
unit: string;
|
|
17
|
+
/** The scenario as it reads now — its hash equals its approved lock entry's. */
|
|
18
|
+
scenario: ContractScenario;
|
|
19
|
+
accepted: AcceptedOpaqueStep[];
|
|
20
|
+
reason?: string;
|
|
21
|
+
lock: ContractLock;
|
|
22
|
+
}
|
|
12
23
|
/** The decision scope of a unit directory (`screens/login`, `api/flows/pay`…). */
|
|
13
24
|
export declare function scopeOfUnitDir(projectRoot: string, unitDir: string): string;
|
|
14
25
|
export declare function nextLock(w: ApprovalWrite, decisionId: string, approvedAt: string): ContractLock;
|
|
@@ -18,4 +29,8 @@ export declare function recordContractApproval(w: ApprovalWrite): {
|
|
|
18
29
|
decisionId: string;
|
|
19
30
|
lock: ContractLock;
|
|
20
31
|
};
|
|
32
|
+
export declare function recordOpaqueAcceptance(w: OpaqueAcceptanceWrite): {
|
|
33
|
+
decisionId: string;
|
|
34
|
+
lock: ContractLock;
|
|
35
|
+
};
|
|
21
36
|
//# sourceMappingURL=record-contract-approval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-contract-approval.d.ts","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"record-contract-approval.d.ts","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;AAIpG,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AACrF,eAAO,MAAM,qBAAqB,yDAAyD,CAAC;AAE5F,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAK/F;AAED,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiBnG;AAOD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,qBAAqB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiB3G"}
|
|
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.DEFAULT_APPROVAL_REASON = void 0;
|
|
36
|
+
exports.DEFAULT_OPAQUE_REASON = exports.DEFAULT_APPROVAL_REASON = void 0;
|
|
37
37
|
exports.scopeOfUnitDir = scopeOfUnitDir;
|
|
38
38
|
exports.nextLock = nextLock;
|
|
39
39
|
exports.checkApprovalSecrets = checkApprovalSecrets;
|
|
40
40
|
exports.recordContractApproval = recordContractApproval;
|
|
41
|
+
exports.recordOpaqueAcceptance = recordOpaqueAcceptance;
|
|
41
42
|
/**
|
|
42
43
|
* What an approval writes, once a human has confirmed it (DOS-14.3, DOS-14.4, takumi T5):
|
|
43
44
|
*
|
|
@@ -49,6 +50,10 @@ exports.recordContractApproval = recordContractApproval;
|
|
|
49
50
|
* The decision goes first: a crash between the two leaves a record without a lock entry, never an
|
|
50
51
|
* entry pointing at nothing. Only `sungen contract approve` calls this after its TTY confirmation;
|
|
51
52
|
* the confirmation itself lives there (approve-contract.ts).
|
|
53
|
+
*
|
|
54
|
+
* `--accept-opaque` (#923, accept-opaque-steps.ts) writes the same kind of decision for ONE scenario,
|
|
55
|
+
* listing it at its hash WITH the opaque steps QA accepted (step + sha); its lock entry is rewritten to
|
|
56
|
+
* point at that decision and carries the same list, which verify-approval-decisions.ts cross-checks.
|
|
52
57
|
*/
|
|
53
58
|
const path = __importStar(require("path"));
|
|
54
59
|
const append_decision_1 = require("../decisions/append-decision");
|
|
@@ -58,6 +63,7 @@ const contract_schema_1 = require("./contract-schema");
|
|
|
58
63
|
const contracts_lock_file_1 = require("./contracts-lock-file");
|
|
59
64
|
const lock_secret_guard_1 = require("./lock-secret-guard");
|
|
60
65
|
exports.DEFAULT_APPROVAL_REASON = 'QA reviewed the normalized Gherkin contract';
|
|
66
|
+
exports.DEFAULT_OPAQUE_REASON = 'QA reviewed the opaque step(s) sungen cannot compare';
|
|
61
67
|
/** The decision scope of a unit directory (`screens/login`, `api/flows/pay`…). */
|
|
62
68
|
function scopeOfUnitDir(projectRoot, unitDir) {
|
|
63
69
|
const scope = path.relative(path.join(projectRoot, 'qa'), unitDir).split(path.sep).join('/');
|
|
@@ -95,4 +101,26 @@ function recordContractApproval(w) {
|
|
|
95
101
|
(0, contracts_lock_file_1.writeLockFile)((0, contracts_lock_file_1.lockPathFor)(w.unitDir), lock);
|
|
96
102
|
return { decisionId: decision.entry.id, lock };
|
|
97
103
|
}
|
|
104
|
+
function lockWithAcceptance(w, decisionId, approvedAt) {
|
|
105
|
+
const entry = { ...(0, contracts_lock_file_1.lockEntryFor)(w.scenario, decisionId, approvedAt), acceptedOpaque: w.accepted.map((a) => ({ step: a.step, sha: a.sha })) };
|
|
106
|
+
return { schema: contract_schema_1.LOCK_SCHEMA, scenarios: { ...w.lock.scenarios, [w.scenario.id]: entry } };
|
|
107
|
+
}
|
|
108
|
+
function recordOpaqueAcceptance(w) {
|
|
109
|
+
const scope = scopeOfUnitDir(w.projectRoot, w.unitDir);
|
|
110
|
+
(0, lock_secret_guard_1.assertNoLockSecrets)([w.scenario], (0, contracts_lock_file_1.serializeLock)(lockWithAcceptance(w, 'D-0000000000000000', new Date().toISOString())));
|
|
111
|
+
const sc = w.scenario;
|
|
112
|
+
const accepted = w.accepted.map((a) => ({ step: a.step, sha: a.sha }));
|
|
113
|
+
const payload = {
|
|
114
|
+
unit: w.unit, scenarios: [{ id: sc.id, hash: sc.hash, implementation: sc.implementation, acceptedOpaque: accepted }], removed: [],
|
|
115
|
+
};
|
|
116
|
+
const decision = (0, append_decision_1.appendDecision)(w.projectRoot, scope, {
|
|
117
|
+
kind: 'contract-approval', anchors: [], visibility: 'internal', valid_from: new Date().toISOString(), payload,
|
|
118
|
+
text: `Accepted the reviewed opaque step(s) ${[...new Set(accepted.map((a) => a.step))].join(', ')} of ${sc.id} (${w.unit})`,
|
|
119
|
+
reason: w.reason?.trim() || exports.DEFAULT_OPAQUE_REASON,
|
|
120
|
+
source: { by: (0, decision_source_1.gitUserName)(w.projectRoot), where: 'cli' },
|
|
121
|
+
});
|
|
122
|
+
const lock = lockWithAcceptance(w, decision.entry.id, decision.entry.valid_from);
|
|
123
|
+
(0, contracts_lock_file_1.writeLockFile)((0, contracts_lock_file_1.lockPathFor)(w.unitDir), lock);
|
|
124
|
+
return { decisionId: decision.entry.id, lock };
|
|
125
|
+
}
|
|
98
126
|
//# sourceMappingURL=record-contract-approval.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-contract-approval.js","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"record-contract-approval.js","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import { TestDataIndex } from './data-normalize';
|
|
|
2
2
|
import type { TargetFacts, TargetIdentity } from './trace/target-identity';
|
|
3
3
|
import type { IntentStep } from './trace/trace-steps';
|
|
4
4
|
export declare const CONTROL_CHARS: RegExp;
|
|
5
|
+
/** Text from a trace or report shown in one line of a finding: control characters dropped, at most `max` characters. */
|
|
6
|
+
export declare function clip(s: string, max?: number): string;
|
|
5
7
|
export interface ResolvedTarget {
|
|
6
8
|
identity: TargetIdentity;
|
|
7
9
|
facts?: TargetFacts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-free-gherkin.d.ts","sourceRoot":"","sources":["../../src/contract/render-free-gherkin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,eAAO,MAAM,aAAa,QAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"render-free-gherkin.d.ts","sourceRoot":"","sources":["../../src/contract/render-free-gherkin.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAsB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,eAAO,MAAM,aAAa,QAAuC,CAAC;AAClE,wHAAwH;AACxH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAGjD;AAED,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE;AACjF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AACD,MAAM,WAAW,aAAa;IAAG,KAAK,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE;AAwBrH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY,EAAE,CA0B9H;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAQzD;AAED,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAA;CAAE;AAE3H,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAE9D;AAED,eAAO,MAAM,mBAAmB,UAI/B,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtE"}
|
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.FREE_FEATURE_HEADER = exports.CONTROL_CHARS = void 0;
|
|
37
|
+
exports.clip = clip;
|
|
37
38
|
exports.renderTraceSteps = renderTraceSteps;
|
|
38
39
|
exports.stepLines = stepLines;
|
|
39
40
|
exports.scenarioBlockText = scenarioBlockText;
|
|
@@ -59,6 +60,11 @@ const render_trace_target_1 = require("./render-trace-target");
|
|
|
59
60
|
const render_trace_sentence_1 = require("./render-trace-sentence");
|
|
60
61
|
const trace_identity_resolution_1 = require("./trace/trace-identity-resolution");
|
|
61
62
|
exports.CONTROL_CHARS = /[\u0000-\u001f\u007f\u2028\u2029]/g;
|
|
63
|
+
/** Text from a trace or report shown in one line of a finding: control characters dropped, at most `max` characters. */
|
|
64
|
+
function clip(s, max = 120) {
|
|
65
|
+
const t = s.replace(exports.CONTROL_CHARS, '');
|
|
66
|
+
return t.length > max ? `${t.slice(0, max - 1)}\u2026` : t;
|
|
67
|
+
}
|
|
62
68
|
function whereOf(step, ctx) {
|
|
63
69
|
const loc = step.location;
|
|
64
70
|
if (!loc?.file)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-free-gherkin.js","sourceRoot":"","sources":["../../src/contract/render-free-gherkin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"render-free-gherkin.js","sourceRoot":"","sources":["../../src/contract/render-free-gherkin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { TraceIdentityResolver } from './trace/target-identity';
|
|
2
|
+
export interface TraceIdentityOutcome {
|
|
3
|
+
warnings: string[];
|
|
4
|
+
info: string[];
|
|
5
|
+
}
|
|
2
6
|
/** The first registered capability that can resolve trace identities (UI: driver-ui), if any. */
|
|
3
7
|
export declare function registeredTraceResolver(): TraceIdentityResolver | undefined;
|
|
8
|
+
export declare function traceIdentityOutcome(projectRoot: string, unit: {
|
|
9
|
+
name: string;
|
|
10
|
+
dir: string;
|
|
11
|
+
}, resolver?: TraceIdentityResolver): Promise<TraceIdentityOutcome>;
|
|
12
|
+
/**
|
|
13
|
+
* What `contract check --trace` adds to the verdict's warnings: only what needs attention (#966).
|
|
14
|
+
* The plain-words information is `traceIdentityOutcome(...).info`.
|
|
15
|
+
*/
|
|
4
16
|
export declare function resolveUnitTraceIdentities(projectRoot: string, unit: {
|
|
5
17
|
name: string;
|
|
6
18
|
dir: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-unit-trace-identities.d.ts","sourceRoot":"","sources":["../../src/contract/resolve-unit-trace-identities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-unit-trace-identities.d.ts","sourceRoot":"","sources":["../../src/contract/resolve-unit-trace-identities.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGrE,MAAM,WAAW,oBAAoB;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE;AAE5E,iGAAiG;AACjG,wBAAgB,uBAAuB,IAAI,qBAAqB,GAAG,SAAS,CAE3E;AAED,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,wBAA4B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAsBxK;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,wBAA4B,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAElK"}
|
|
@@ -1,78 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.registeredTraceResolver = registeredTraceResolver;
|
|
4
|
+
exports.traceIdentityOutcome = traceIdentityOutcome;
|
|
37
5
|
exports.resolveUnitTraceIdentities = resolveUnitTraceIdentities;
|
|
38
6
|
/**
|
|
39
7
|
* `contract check --trace`: before the verdict is built, ask the registered `traceIdentity`
|
|
40
8
|
* resolver (driver-ui — a real browser) about every target of the unit's admissible traces and
|
|
41
9
|
* cache the answers (DOS-14.5). The verdict itself never calls a browser; it reads the cache, so
|
|
42
10
|
* the CLI and the Claude Code guard keep building the same verdict from the same files.
|
|
11
|
+
*
|
|
12
|
+
* What it reports is split for QA (#966): a WARNING only when something needs attention — no
|
|
13
|
+
* resolver, a mobile project, a target the browser could not name (its steps stay opaque). "Every
|
|
14
|
+
* target was already known" and "N new targets identified" are information, in plain words.
|
|
43
15
|
*/
|
|
44
|
-
const fs = __importStar(require("fs"));
|
|
45
16
|
const registry_1 = require("../capabilities/registry");
|
|
46
17
|
const capability_1 = require("../harness/capability");
|
|
47
18
|
const build_trace_conformance_1 = require("./build-trace-conformance");
|
|
48
|
-
const contracts_lock_file_1 = require("./contracts-lock-file");
|
|
49
19
|
const normalize_feature_steps_1 = require("./normalize-feature-steps");
|
|
50
20
|
const collect_trace_evidence_1 = require("./trace/collect-trace-evidence");
|
|
21
|
+
const identity_cache_1 = require("./trace/identity-cache");
|
|
22
|
+
const trace_freshness_1 = require("./trace/trace-freshness");
|
|
51
23
|
const trace_identity_resolution_1 = require("./trace/trace-identity-resolution");
|
|
52
|
-
const mtimeMs = (f) => { try {
|
|
53
|
-
return fs.statSync(f).mtimeMs;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return 0;
|
|
57
|
-
} };
|
|
58
24
|
/** The first registered capability that can resolve trace identities (UI: driver-ui), if any. */
|
|
59
25
|
function registeredTraceResolver() {
|
|
60
26
|
return registry_1.capabilityRegistry.all().find((c) => typeof c.traceIdentity === 'function')?.traceIdentity;
|
|
61
27
|
}
|
|
62
|
-
async function
|
|
28
|
+
async function traceIdentityOutcome(projectRoot, unit, resolver = registeredTraceResolver()) {
|
|
29
|
+
const none = { warnings: [], info: [] };
|
|
63
30
|
const traced = (0, normalize_feature_steps_1.loadContractScenarios)(unit.dir, unit.name).filter((s) => s.implementation !== 'compiled');
|
|
64
31
|
if (!traced.length)
|
|
65
|
-
return
|
|
32
|
+
return none;
|
|
66
33
|
if (((0, capability_1.readCapabilities)(projectRoot).platform ?? '').toLowerCase() === 'mobile')
|
|
67
|
-
return [build_trace_conformance_1.MOBILE_NOT_SUPPORTED];
|
|
34
|
+
return { warnings: [build_trace_conformance_1.MOBILE_NOT_SUPPORTED], info: [] };
|
|
68
35
|
if (!resolver)
|
|
69
|
-
return ['no trace identity resolver is registered (install @sungen/driver-ui) — every target identity stays low, so nothing can match'];
|
|
70
|
-
const
|
|
71
|
-
const evidence = (0, collect_trace_evidence_1.collectScenarioEvidence)(projectRoot, new Set(traced.map((s) => s.id)), notBefore);
|
|
36
|
+
return { warnings: ['no trace identity resolver is registered (install @sungen/driver-ui) — every target identity stays low, so nothing can match'], info: [] };
|
|
37
|
+
const evidence = (0, collect_trace_evidence_1.collectScenarioEvidence)(projectRoot, new Set(traced.map((s) => s.id)), (0, trace_freshness_1.unitContract)(projectRoot, unit));
|
|
72
38
|
const traces = [...evidence.runs.values()].flat().filter((r) => r.status === 'admissible' && r.trace).map((r) => r.trace);
|
|
73
39
|
if (!traces.length)
|
|
74
|
-
return
|
|
40
|
+
return none;
|
|
75
41
|
const r = await (0, trace_identity_resolution_1.resolveWithDriver)(projectRoot, traces, resolver);
|
|
76
|
-
|
|
42
|
+
const { cache } = (0, identity_cache_1.readIdentityCache)(projectRoot);
|
|
43
|
+
const total = r.keys.length;
|
|
44
|
+
const unnamed = r.keys.filter((k) => cache.entries.get(k)?.identityConfidence !== 'high').length;
|
|
45
|
+
const blocked = r.blockedRequests ? `; the replayed pages tried ${r.blockedRequests} request(s), all blocked` : '';
|
|
46
|
+
const known = total - r.asked;
|
|
47
|
+
const info = r.asked
|
|
48
|
+
? `trace identity: ${r.asked} new target(s) identified in a real browser (${r.resolver})${known ? `, ${known} already known` : ''}${blocked}`
|
|
49
|
+
: `trace identity: all ${total} target(s) were already identified (identity cache) — nothing new to resolve`;
|
|
50
|
+
const warnings = unnamed
|
|
51
|
+
? [`trace identity: ${unnamed} of ${total} target(s) could not be identified (no unique accessible name) — the steps on them stay opaque, for QA to review, until the test targets a unique, named element`]
|
|
52
|
+
: [];
|
|
53
|
+
return { warnings, info: [info] };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* What `contract check --trace` adds to the verdict's warnings: only what needs attention (#966).
|
|
57
|
+
* The plain-words information is `traceIdentityOutcome(...).info`.
|
|
58
|
+
*/
|
|
59
|
+
async function resolveUnitTraceIdentities(projectRoot, unit, resolver = registeredTraceResolver()) {
|
|
60
|
+
return (await traceIdentityOutcome(projectRoot, unit, resolver)).warnings;
|
|
77
61
|
}
|
|
78
62
|
//# sourceMappingURL=resolve-unit-trace-identities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-unit-trace-identities.js","sourceRoot":"","sources":["../../src/contract/resolve-unit-trace-identities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-unit-trace-identities.js","sourceRoot":"","sources":["../../src/contract/resolve-unit-trace-identities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { UnitContract } from './trace-freshness';
|
|
1
2
|
import { ParsedTrace } from './trace-file-reader';
|
|
2
3
|
import { ReportResult, ReportTest } from './select-final-attempt';
|
|
3
4
|
import { RunRecord } from './trace-run-record';
|
|
@@ -18,16 +19,26 @@ export interface ScenarioEvidence {
|
|
|
18
19
|
problems: string[];
|
|
19
20
|
inputs: string[];
|
|
20
21
|
}
|
|
22
|
+
/** A run record or JSON report larger than this is refused before a byte is read (fail closed, #926). */
|
|
23
|
+
export declare const MAX_EVIDENCE_JSON_BYTES: number;
|
|
21
24
|
/** The reason a run is not judged once the verdict's deadline has passed (fail closed). */
|
|
22
25
|
export declare const OVER_BUDGET = "verdict budget exceeded; run `sungen contract check`";
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Every judged run of the tests `want` accepts (derive: a unit's tests; check: by scenario id). A trace
|
|
28
|
+
* older than `contract` — the unit's .feature files and lock, by content (#967) — is refused; derive,
|
|
29
|
+
* which writes the contract from the traces, passes null.
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectRuns(projectRoot: string, want: (id: string, test: ReportTest) => boolean, contract: UnitContract | null, deadline?: number): {
|
|
27
32
|
runs: TraceRun[];
|
|
28
33
|
problems: string[];
|
|
34
|
+
untrusted: string[];
|
|
29
35
|
inputs: string[];
|
|
30
36
|
records: number;
|
|
37
|
+
seen: Array<{
|
|
38
|
+
id: string;
|
|
39
|
+
title: string;
|
|
40
|
+
}>;
|
|
31
41
|
};
|
|
32
|
-
|
|
42
|
+
/** The runs of each scenario id; `names` (id → scenario name) lets a missing test be explained. */
|
|
43
|
+
export declare function collectScenarioEvidence(projectRoot: string, ids: ReadonlySet<string>, contract: UnitContract | null, deadline?: number, names?: ReadonlyMap<string, string>): ScenarioEvidence;
|
|
33
44
|
//# sourceMappingURL=collect-trace-evidence.d.ts.map
|