@kontourai/flow-agents 2.2.0 → 2.4.0
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/.github/CODEOWNERS +8 -0
- package/.github/workflows/ci.yml +32 -0
- package/AGENTS.md +4 -4
- package/CHANGELOG.md +46 -0
- package/CONTEXT.md +14 -0
- package/README.md +9 -3
- package/agents/dev.json +1 -1
- package/agents/tool-code-reviewer.json +1 -1
- package/agents/tool-planner.json +3 -3
- package/agents/tool-verifier.json +3 -3
- package/build/src/cli/console-learning-projection.js +3 -2
- package/build/src/cli/init.js +104 -21
- package/build/src/cli/kit.js +37 -6
- package/build/src/cli/pull-work-provider.js +1 -1
- package/build/src/cli/usage-feedback.js +3 -3
- package/build/src/cli/validate-hook-influence.js +1 -0
- package/build/src/cli/validate-workflow-artifacts.js +22 -6
- package/build/src/cli/workflow-artifact-cleanup-audit.js +36 -2
- package/build/src/cli/workflow-sidecar.d.ts +14 -7
- package/build/src/cli/workflow-sidecar.js +792 -69
- package/build/src/flow-kit/validate.d.ts +23 -0
- package/build/src/flow-kit/validate.js +67 -1
- package/build/src/index.d.ts +1 -1
- package/build/src/index.js +1 -1
- package/build/src/lib/flow-resolver.d.ts +6 -4
- package/build/src/lib/flow-resolver.js +125 -58
- package/build/src/lib/local-artifact-root.d.ts +14 -2
- package/build/src/lib/local-artifact-root.js +22 -5
- package/build/src/lib/workflow-learning-projection.js +2 -2
- package/build/src/runtime-adapters.d.ts +12 -0
- package/build/src/runtime-adapters.js +56 -16
- package/build/src/tools/build-universal-bundles.js +49 -16
- package/build/src/tools/generate-context-map.js +10 -8
- package/build/src/tools/validate-source-tree.js +23 -1
- package/console.telemetry.json +22 -0
- package/context/contracts/artifact-contract.md +38 -7
- package/context/contracts/builder-kit-workflow-state-contract.md +3 -2
- package/context/contracts/decision-registry-contract.md +263 -0
- package/context/contracts/delivery-contract.md +1 -1
- package/context/contracts/planning-contract.md +2 -1
- package/context/contracts/review-contract.md +5 -3
- package/context/contracts/verification-contract.md +9 -1
- package/context/contracts/work-item-contract.md +1 -1
- package/context/deferred/parallelization.md +1 -1
- package/context/gate-awareness.md +4 -4
- package/context/scripts/git-status.sh +2 -2
- package/context/scripts/hooks/config-protection.js +502 -2
- package/context/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/context/scripts/hooks/run-hook.js +14 -1
- package/context/scripts/hooks/stop-goal-fit.js +1140 -99
- package/context/scripts/hooks/workflow-steering.js +212 -6
- package/docs/adr/0007-flow-skill-kit-tool-boundary.md +2 -0
- package/docs/adr/0015-flow-flow-agents-boundary-reconciliation.md +35 -0
- package/docs/adr/0019-kit-dependency-ownership.md +62 -0
- package/docs/adr/0020-trust-reconcile-manifest-and-claim-classification.md +290 -0
- package/docs/adr/0021-assignment-leases-and-stale-claim-takeover.md +221 -0
- package/docs/adr/0022-fail-closed-delivery-reconciliation-with-governed-exemptions.md +283 -0
- package/docs/agent-system-guidebook.md +3 -3
- package/docs/agent-usage-feedback-loop.md +6 -6
- package/docs/context-map.md +9 -7
- package/docs/decisions/decision-records.md +57 -0
- package/docs/decisions/index.md +14 -0
- package/docs/decisions/promotion-gate.md +52 -0
- package/docs/developer-architecture.md +1 -1
- package/docs/fixture-ownership.md +3 -0
- package/docs/flow-kit-repository-contract.md +5 -5
- package/docs/getting-started.md +12 -2
- package/docs/integrations/harness-install.md +2 -1
- package/docs/kit-authoring-guide.md +64 -5
- package/docs/knowledge-kit.md +5 -1
- package/docs/learnings/2026-07-improvement-program.md +203 -0
- package/docs/migrations.md +6 -5
- package/docs/north-star.md +2 -2
- package/docs/operating-layers.md +4 -3
- package/docs/repository-structure.md +5 -5
- package/docs/skills-map.md +8 -8
- package/docs/spec/runtime-hook-surface.md +19 -15
- package/docs/spikes/graph-provider-2026-07.md +155 -0
- package/docs/standards-register.md +7 -7
- package/docs/trust-anchor-adoption.md +105 -4
- package/docs/work-item-adapters.md +1 -1
- package/docs/workflow-artifact-lifecycle.md +72 -9
- package/docs/workflow-eval-strategy.md +3 -3
- package/docs/workflow-shared-contracts.md +1 -1
- package/docs/workflow-usage-guide.md +254 -21
- package/evals/acceptance/DEMO-false-completion.md +20 -11
- package/evals/acceptance/prove-capture-teeth-declared.sh +15 -15
- package/evals/acceptance/prove-capture-teeth.sh +11 -11
- package/evals/acceptance/test_kiro_harness.sh +1 -1
- package/evals/ci/antigaming-suite.sh +5 -0
- package/evals/ci/run-baseline.sh +65 -1
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/kit.json +13 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/kit.json +13 -0
- package/evals/fixtures/hook-influence/cases.json +32 -0
- package/evals/fixtures/pull-work-provider/github-issues.json +6 -6
- package/evals/fixtures/trust-reconcile-exploits/fabricated-attestation.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/no-label-bypass.json +36 -0
- package/evals/fixtures/trust-reconcile-exploits/skip-assumed-bypass.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/status-misassertion.json +48 -0
- package/evals/fixtures/trust-reconcile-exploits/waived-command-check.json +44 -0
- package/evals/fixtures/trust-reconcile-mixed-bundle/mixed-bundle.json +159 -0
- package/evals/fixtures/trust-reconcile-ws3/ws3-bundle.json +920 -0
- package/evals/integration/test_actor_identity.sh +254 -0
- package/evals/integration/test_builder_step_producers.sh +33 -23
- package/evals/integration/test_bundle_install.sh +22 -16
- package/evals/integration/test_bundle_lifecycle.sh +11 -11
- package/evals/integration/test_captured_fail_reconciliation.sh +50 -50
- package/evals/integration/test_checkpoint_signing.sh +43 -0
- package/evals/integration/test_claim_lookup.sh +4 -4
- package/evals/integration/test_codex_hook_resolution.sh +114 -0
- package/evals/integration/test_command_log_concurrency.sh +8 -8
- package/evals/integration/test_command_log_fork_classification.sh +3 -3
- package/evals/integration/test_command_log_integrity.sh +16 -16
- package/evals/integration/test_console_learning_projection.sh +1 -1
- package/evals/integration/test_dual_emit_flow_step.sh +145 -0
- package/evals/integration/test_enforcer_expects_driven.sh +12 -12
- package/evals/integration/test_evidence_capture_hook.sh +14 -13
- package/evals/integration/test_fixture_retirement_audit.sh +2 -2
- package/evals/integration/test_flow_agents_statusline.sh +2 -2
- package/evals/integration/test_flow_kit_install_git.sh +52 -0
- package/evals/integration/test_flow_kit_repository.sh +2 -0
- package/evals/integration/test_flowdef_session_activation.sh +6 -6
- package/evals/integration/test_flowdef_union_floor_regression.sh +429 -0
- package/evals/integration/test_gate_bypass_chain.sh +52 -40
- package/evals/integration/test_gate_lockdown.sh +97 -73
- package/evals/integration/test_gate_review_inquiry_records.sh +3 -3
- package/evals/integration/test_goal_fit_escape_hatch.sh +10 -10
- package/evals/integration/test_goal_fit_ghost_session.sh +104 -0
- package/evals/integration/test_goal_fit_hook.sh +32 -32
- package/evals/integration/test_goal_fit_rederive.sh +9 -9
- package/evals/integration/test_hook_category_behaviors.sh +103 -0
- package/evals/integration/test_hook_influence_cases.sh +1 -0
- package/evals/integration/test_install_merge.sh +262 -1
- package/evals/integration/test_kit_identity_trust.sh +6 -6
- package/evals/integration/test_liveness_conflict_injection.sh +587 -0
- package/evals/integration/test_liveness_heartbeat.sh +677 -0
- package/evals/integration/test_liveness_verdict.sh +394 -0
- package/evals/integration/test_local_flow_kit_install.sh +15 -0
- package/evals/integration/test_phase_map_and_gate_claim.sh +63 -11
- package/evals/integration/test_promote_gate.sh +178 -0
- package/evals/integration/test_publish_delivery.sh +2 -2
- package/evals/integration/test_pull_work_liveness_preflight.sh +386 -0
- package/evals/integration/test_pull_work_provider.sh +2 -2
- package/evals/integration/test_reconcile_soundness.sh +4 -4
- package/evals/integration/test_resolvefirststep_security.sh +22 -0
- package/evals/integration/test_runtime_adapter_activation.sh +87 -18
- package/evals/integration/test_session_resume_roundtrip.sh +147 -0
- package/evals/integration/test_sidecar_field_preservation.sh +249 -0
- package/evals/integration/test_trust_reconcile.sh +2 -2
- package/evals/integration/test_trust_reconcile_manifest.sh +79 -0
- package/evals/integration/test_trust_reconcile_mixed_bundle.sh +96 -0
- package/evals/integration/test_trust_reconcile_negatives.sh +151 -0
- package/evals/integration/test_usage_feedback_global.sh +5 -5
- package/evals/integration/test_validate_artifacts_portability.sh +60 -0
- package/evals/integration/test_verify_cli.sh +2 -2
- package/evals/integration/test_veritas_governance_kit.sh +117 -0
- package/evals/integration/test_workflow_artifact_cleanup_audit.sh +26 -1
- package/evals/integration/test_workflow_artifacts.sh +33 -0
- package/evals/integration/test_workflow_sidecar_writer.sh +723 -74
- package/evals/integration/test_workflow_steering_hook.sh +175 -5
- package/evals/lib/codex-provider.sh +1 -1
- package/evals/lib/node.sh +19 -1
- package/evals/run.sh +22 -0
- package/evals/static/test_decisions.sh +150 -0
- package/evals/static/test_flowdef_codeowners_coverage.sh +56 -0
- package/evals/static/test_package.sh +19 -10
- package/evals/static/test_universal_bundles.sh +48 -3
- package/evals/static/test_workflow_skills.sh +41 -8
- package/kits/builder/flows/build.flow.json +3 -74
- package/kits/builder/flows/publish-learn.flow.json +90 -0
- package/kits/builder/kit.json +11 -0
- package/kits/builder/skills/builder-shape/SKILL.md +1 -1
- package/kits/builder/skills/deliver/SKILL.md +13 -11
- package/kits/builder/skills/design-probe/SKILL.md +4 -4
- package/kits/builder/skills/evidence-gate/SKILL.md +26 -1
- package/kits/builder/skills/execute-plan/SKILL.md +2 -2
- package/kits/builder/skills/fix-bug/SKILL.md +2 -0
- package/kits/builder/skills/gate-review/SKILL.md +6 -6
- package/kits/builder/skills/idea-to-backlog/SKILL.md +1 -1
- package/kits/builder/skills/learning-review/SKILL.md +7 -7
- package/kits/builder/skills/pickup-probe/SKILL.md +5 -4
- package/kits/builder/skills/plan-work/SKILL.md +27 -5
- package/kits/builder/skills/pull-work/SKILL.md +80 -5
- package/kits/builder/skills/release-readiness/SKILL.md +4 -4
- package/kits/builder/skills/review-work/SKILL.md +24 -1
- package/kits/builder/skills/tdd-workflow/SKILL.md +2 -0
- package/kits/builder/skills/verify-work/SKILL.md +8 -1
- package/kits/catalog.json +6 -0
- package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +178 -0
- package/kits/veritas-governance/docs/README.md +75 -0
- package/kits/veritas-governance/fixtures/readiness/not-ready.readiness-report.json +4645 -0
- package/kits/veritas-governance/fixtures/readiness/ready.readiness-report.json +4403 -0
- package/kits/veritas-governance/flows/readiness-check.flow.json +35 -0
- package/kits/veritas-governance/kit.json +16 -0
- package/package.json +8 -4
- package/packaging/README.md +2 -2
- package/packaging/conformance/fixtures/config-protection--allow-read-state-json.json +20 -0
- package/packaging/conformance/fixtures/config-protection--block-write-state-json.json +20 -0
- package/packaging/conformance/fixtures/stop-goal-fit--block-bundle-disputed-claim.json +1 -1
- package/packaging/conformance/fixtures/stop-goal-fit--block-capture-contradicts-claimed-pass.json +1 -1
- package/packaging/manifest.json +9 -10
- package/schemas/decision-record.schema.json +109 -0
- package/schemas/workflow-evidence.schema.json +1 -1
- package/schemas/workflow-state.schema.json +5 -0
- package/scripts/README.md +8 -3
- package/scripts/check-content-boundary.cjs +1 -1
- package/scripts/check-decisions.cjs +356 -0
- package/scripts/ci/derive-claim-status.mjs +74 -0
- package/scripts/ci/trust-reconcile.js +436 -79
- package/scripts/git-status.sh +2 -2
- package/scripts/hooks/claude-telemetry-hook.js +37 -3
- package/scripts/hooks/codex-telemetry-hook.js +36 -2
- package/scripts/hooks/config-protection.js +102 -30
- package/scripts/hooks/evidence-capture.js +3 -3
- package/scripts/hooks/lib/actor-identity.js +368 -0
- package/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/scripts/hooks/lib/liveness-heartbeat.js +361 -0
- package/scripts/hooks/lib/liveness-policy.js +127 -0
- package/scripts/hooks/lib/liveness-read.js +105 -12
- package/scripts/hooks/lib/liveness-write.js +46 -0
- package/scripts/hooks/lib/local-artifact-paths.js +12 -6
- package/scripts/hooks/opencode-telemetry-hook.js +27 -1
- package/scripts/hooks/pi-telemetry-hook.js +27 -1
- package/scripts/hooks/stop-goal-fit.js +157 -26
- package/scripts/hooks/workflow-steering.js +77 -3
- package/scripts/install-codex-home.sh +138 -38
- package/scripts/statusline/flow-agents-statusline.js +2 -2
- package/src/cli/console-learning-projection.ts +3 -2
- package/src/cli/init.ts +101 -21
- package/src/cli/kit.ts +37 -6
- package/src/cli/public-api.test.mjs +58 -6
- package/src/cli/pull-work-provider.ts +1 -1
- package/src/cli/trust-bundle-policy-order.test.mjs +87 -0
- package/src/cli/usage-feedback.ts +3 -3
- package/src/cli/validate-hook-influence.ts +1 -0
- package/src/cli/validate-workflow-artifacts.ts +22 -6
- package/src/cli/veritas-readiness-adapter.test.mjs +267 -0
- package/src/cli/workflow-artifact-cleanup-audit.ts +35 -2
- package/src/cli/workflow-sidecar.ts +795 -71
- package/src/flow-kit/validate.ts +74 -1
- package/src/index.ts +6 -2
- package/src/lib/flow-resolver.ts +123 -55
- package/src/lib/local-artifact-root.ts +24 -5
- package/src/lib/workflow-learning-projection.ts +2 -2
- package/src/runtime-adapters.ts +61 -15
- package/src/tools/build-universal-bundles.ts +49 -16
- package/src/tools/generate-context-map.ts +10 -8
- package/src/tools/validate-source-tree.ts +23 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// readiness-to-trust-bundle.mjs — Veritas Governance Kit adapter (slice 1).
|
|
3
|
+
//
|
|
4
|
+
// PURPOSE (the "trust-bundle format gap" fix, kept in the KIT adapter layer — NOT in
|
|
5
|
+
// @kontourai/veritas). `veritas readiness --check evidence --working-tree` writes a legacy
|
|
6
|
+
// evidence-report record (`.kontourai/veritas/evidence/veritas-<runId>.json`). The Flow gate
|
|
7
|
+
// in flows/readiness-check.flow.json expects `kind: "trust.bundle"` — a Hachure trust.bundle
|
|
8
|
+
// carrying a `software-readiness-verdict` claim whose Surface-derived status the gate checks.
|
|
9
|
+
// This adapter projects Veritas's own recorded readiness record into that trust.bundle using
|
|
10
|
+
// @kontourai/surface (the same open-format bundle vocabulary Flow Agents' own delivery bundle
|
|
11
|
+
// and kits/builder/flows/build.flow.json use). It does NOT re-evaluate Repo Standards — Veritas
|
|
12
|
+
// already did that; the adapter only reads Veritas's recorded per-check results and aggregates
|
|
13
|
+
// the blocking-failure signal, so no Veritas rule/claim logic is forked or reimplemented.
|
|
14
|
+
//
|
|
15
|
+
// BLOCKING-FAILURE definition (SETTLED — owner-ratified + investigation-confirmed, see
|
|
16
|
+
// .kontourai/flow-agents/ws5-governance-kit-slice1 session findings). This adapter derives the
|
|
17
|
+
// readiness gate verdict from the readiness record's blocking failures: a Require-enforcement
|
|
18
|
+
// policy failure, an uncovered-path `fail`, a failed selected evidence check, or a blocking
|
|
19
|
+
// external-tool `fail`/`missing` (mirrors veritas/src/surface/readiness.mjs's own PRIVATE
|
|
20
|
+
// `readinessHasBlockingFailure` helper, and matches Surface's `buildTrustReport` weakest-link
|
|
21
|
+
// derivation, which downgrades a readiness claim to `rejected` on any rejected Require —
|
|
22
|
+
// tests/surface/readiness-derived-claim.test.mjs:256-278). It intentionally does NOT apply
|
|
23
|
+
// Veritas's EXPORTED `promotion_allowed` short-circuit (readinessSurfaceStatus/readinessVerdict
|
|
24
|
+
// treat promotion_allowed===true as verified/ready regardless of blocking Require failures):
|
|
25
|
+
// promotion_allowed is a workstream-routing hint from src/repo/routing.mjs `resolveWorkstream()`
|
|
26
|
+
// (file-pattern lane resolution), not a safety signal — it never reads policy_results, evidence
|
|
27
|
+
// checks, uncovered paths, or external tools, so it cannot account for blocking failures. This is
|
|
28
|
+
// a filed Veritas bug, not a legitimate alternate reading: kontourai/veritas#106
|
|
29
|
+
// (https://github.com/kontourai/veritas/issues/106) — "promotion_allowed short-circuit bypasses
|
|
30
|
+
// blocking Require failures" — recommends veritas fix readiness.mjs to check
|
|
31
|
+
// readinessHasBlockingFailure() before the promotion_allowed short-circuit. Conclusion: the
|
|
32
|
+
// adapter's stricter derivation is correct today and will agree with veritas's own exported
|
|
33
|
+
// functions once #106 lands; it is not a fork of Veritas's intended semantics, and the
|
|
34
|
+
// Governance Kit's blocking-failure semantics are the successor the wider system is moving
|
|
35
|
+
// toward (this adapter's independent CLI wrap was for reversibility while that landed). Ready
|
|
36
|
+
// (no blocking failure) -> Surface derives `verified` -> gate passes. Not-ready -> Surface
|
|
37
|
+
// derives a non-`verified` status -> gate blocks.
|
|
38
|
+
//
|
|
39
|
+
// Usage: node readiness-to-trust-bundle.mjs --report <veritas-evidence-report.json> \
|
|
40
|
+
// --out <bundle.json> [--subject-id <id>]
|
|
41
|
+
// Exit: 0 on success (bundle written), 2 on bad args, 3 on unreadable/invalid report.
|
|
42
|
+
|
|
43
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
44
|
+
import * as surface from "@kontourai/surface";
|
|
45
|
+
|
|
46
|
+
function parseArgs(argv) {
|
|
47
|
+
const out = {};
|
|
48
|
+
for (let i = 0; i < argv.length; i++) {
|
|
49
|
+
const a = argv[i];
|
|
50
|
+
if (a === "--report") out.report = argv[++i];
|
|
51
|
+
else if (a === "--out") out.out = argv[++i];
|
|
52
|
+
else if (a === "--subject-id") out.subjectId = argv[++i];
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Mirrors veritas/src/surface/readiness.mjs's PRIVATE readinessHasBlockingFailure — reads
|
|
58
|
+
// Veritas's OWN recorded results; does not evaluate standards. Does NOT apply promotion_allowed
|
|
59
|
+
// (see header comment above): that short-circuit is a filed veritas bug (kontourai/veritas#106),
|
|
60
|
+
// not a safety signal — this stricter derivation is the settled-correct semantics.
|
|
61
|
+
export function hasBlockingFailure(record) {
|
|
62
|
+
if (record.uncovered_path_result === "fail") return true;
|
|
63
|
+
if ((record.policy_results ?? []).some((r) => r.passed === false && r.enforcementLevel === "Require")) return true;
|
|
64
|
+
if ((record.selected_evidence_checks ?? []).some((c) => c.evidence_check_result?.passed === false)) return true;
|
|
65
|
+
if ((record.external_tool_results ?? []).some((r) => r.blocking !== false && ["fail", "missing"].includes(r.verdict))) return true;
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function buildReadinessTrustBundle(record, opts = {}) {
|
|
70
|
+
const { deriveClaimStatus, generateClaimId } = surface;
|
|
71
|
+
const ts = record.timestamp || new Date().toISOString();
|
|
72
|
+
const runId = record.run_id || "veritas-run";
|
|
73
|
+
const sourceRef = record.integrity?.sourceRef ?? record.source_ref ?? runId;
|
|
74
|
+
const subjectId = opts.subjectId || sourceRef;
|
|
75
|
+
const blocking = hasBlockingFailure(record);
|
|
76
|
+
const ready = !blocking;
|
|
77
|
+
|
|
78
|
+
const claimType = "software-readiness-verdict";
|
|
79
|
+
const surfaceName = "veritas.readiness";
|
|
80
|
+
const claimId = generateClaimId(subjectId, surfaceName, "mergeReadiness");
|
|
81
|
+
const evId = `ev:${claimId}`;
|
|
82
|
+
const evidenceType = "policy_rule"; // readiness is a governance/policy result (auditability)
|
|
83
|
+
|
|
84
|
+
const policy = {
|
|
85
|
+
id: `policy:${claimType}`,
|
|
86
|
+
claimType,
|
|
87
|
+
requiredEvidence: [evidenceType],
|
|
88
|
+
acceptanceCriteria: ["A verified Veritas readiness evidence event supports the readiness verdict."],
|
|
89
|
+
reviewAuthority: "system",
|
|
90
|
+
validityRule: { kind: "manual" },
|
|
91
|
+
stalenessTriggers: [],
|
|
92
|
+
conflictRules: [],
|
|
93
|
+
impactLevel: "high",
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const failedRules = (record.policy_results ?? [])
|
|
97
|
+
.filter((r) => r.passed === false && r.enforcementLevel === "Require")
|
|
98
|
+
.map((r) => r.rule_id);
|
|
99
|
+
const failedChecks = (record.selected_evidence_checks ?? [])
|
|
100
|
+
.filter((c) => c.evidence_check_result?.passed === false)
|
|
101
|
+
.map((c) => c.id);
|
|
102
|
+
const summary = ready
|
|
103
|
+
? `Veritas readiness verdict is ready (run ${runId}); no blocking requirements or evidence failed.`
|
|
104
|
+
: `Veritas readiness verdict is not ready (run ${runId}). Blocking: ${[...failedRules, ...failedChecks].join(", ") || record.uncovered_path_result}.`;
|
|
105
|
+
|
|
106
|
+
const evItem = {
|
|
107
|
+
id: evId,
|
|
108
|
+
claimId,
|
|
109
|
+
evidenceType,
|
|
110
|
+
method: "auditability",
|
|
111
|
+
sourceRef: `veritas:readiness:${runId}`,
|
|
112
|
+
excerptOrSummary: summary,
|
|
113
|
+
observedAt: ts,
|
|
114
|
+
collectedBy: "veritas-governance-kit/readiness-adapter",
|
|
115
|
+
passing: ready,
|
|
116
|
+
};
|
|
117
|
+
const evt = {
|
|
118
|
+
id: `evt:${claimId}`,
|
|
119
|
+
claimId,
|
|
120
|
+
status: ready ? "verified" : "disputed",
|
|
121
|
+
actor: "veritas-governance-kit/readiness-adapter",
|
|
122
|
+
method: "auditability",
|
|
123
|
+
evidenceIds: [evId],
|
|
124
|
+
createdAt: ts,
|
|
125
|
+
verifiedAt: ts,
|
|
126
|
+
};
|
|
127
|
+
const claim = {
|
|
128
|
+
id: claimId,
|
|
129
|
+
subjectType: "repository-change",
|
|
130
|
+
subjectId,
|
|
131
|
+
facet: surfaceName,
|
|
132
|
+
claimType,
|
|
133
|
+
fieldOrBehavior: "mergeReadiness",
|
|
134
|
+
value: { verdict: ready ? "ready" : "not-ready", sourceRef, blocking: { failedRequirements: failedRules, failedEvidenceChecks: failedChecks } },
|
|
135
|
+
createdAt: ts,
|
|
136
|
+
updatedAt: ts,
|
|
137
|
+
impactLevel: "high",
|
|
138
|
+
verificationPolicyId: policy.id,
|
|
139
|
+
currentIntegrityRef: sourceRef,
|
|
140
|
+
metadata: { producer: "veritas", source: "readiness", runId },
|
|
141
|
+
};
|
|
142
|
+
const { status } = deriveClaimStatus({ claim, evidence: [evItem], events: [evt], policies: [policy] });
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
bundle: {
|
|
146
|
+
schemaVersion: 5,
|
|
147
|
+
source: "veritas-governance-kit/readiness-adapter",
|
|
148
|
+
claims: [{ ...claim, status }],
|
|
149
|
+
evidence: [evItem],
|
|
150
|
+
events: [evt],
|
|
151
|
+
policies: [policy],
|
|
152
|
+
},
|
|
153
|
+
verdict: ready ? "ready" : "not-ready",
|
|
154
|
+
derivedStatus: status,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function main() {
|
|
159
|
+
const args = parseArgs(process.argv.slice(2));
|
|
160
|
+
if (!args.report || !args.out) {
|
|
161
|
+
process.stderr.write("usage: readiness-to-trust-bundle.mjs --report <veritas-evidence-report.json> --out <bundle.json> [--subject-id <id>]\n");
|
|
162
|
+
return 2;
|
|
163
|
+
}
|
|
164
|
+
let record;
|
|
165
|
+
try {
|
|
166
|
+
record = JSON.parse(readFileSync(args.report, "utf8"));
|
|
167
|
+
} catch (err) {
|
|
168
|
+
process.stderr.write(`cannot read Veritas evidence report: ${err && err.message ? err.message : String(err)}\n`);
|
|
169
|
+
return 3;
|
|
170
|
+
}
|
|
171
|
+
const { bundle, verdict, derivedStatus } = buildReadinessTrustBundle(record, { subjectId: args.subjectId });
|
|
172
|
+
writeFileSync(args.out, `${JSON.stringify(bundle, null, 2)}\n`, "utf8");
|
|
173
|
+
process.stdout.write(`readiness verdict: ${verdict}; software-readiness-verdict claim status: ${derivedStatus}; bundle: ${args.out}\n`);
|
|
174
|
+
return 0;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const isEntry = process.argv[1] && import.meta.url === `file://${process.argv[1]}`;
|
|
178
|
+
if (isEntry) process.exitCode = main();
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Veritas Governance Kit
|
|
2
|
+
|
|
3
|
+
Turns a repo's **Veritas-governed Repo Standards** into deterministic, agentless **gate
|
|
4
|
+
evidence**. Slice 1 ships the thinnest useful surface: one flow, one gate, that gates a real
|
|
5
|
+
`veritas readiness` verdict.
|
|
6
|
+
|
|
7
|
+
This kit **wraps** [`@kontourai/veritas`](https://www.npmjs.com/package/@kontourai/veritas) via
|
|
8
|
+
CLI invocation plus a small kit-local trust.bundle adapter. It does **not** fork, vendor, or
|
|
9
|
+
reimplement Veritas's Repo Standards / evidence-check evaluation — Veritas evaluates; the kit
|
|
10
|
+
only projects Veritas's own recorded verdict into the Flow trust.bundle vocabulary.
|
|
11
|
+
|
|
12
|
+
## What it contains
|
|
13
|
+
|
|
14
|
+
| Asset | Path | Purpose |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Flow | `flows/readiness-check.flow.json` | Single-gate agentless flow `readiness -> gate-check`. The gate requires a **verified** `software-readiness-verdict` trust.bundle claim. |
|
|
17
|
+
| Adapter | `adapter/readiness-to-trust-bundle.mjs` | Projects a `veritas readiness --check evidence --working-tree` evidence report into a Hachure `trust.bundle` (via `@kontourai/surface`), deriving the claim status from Veritas's own blocking-failure signal. |
|
|
18
|
+
| Fixtures | `fixtures/readiness/*.readiness-report.json` | Captured **real** Veritas readiness reports (a ready clean tree, and a not-ready tree with a required CLI artifact deleted) used by the eval. |
|
|
19
|
+
|
|
20
|
+
The gate uses provider-neutral Flow vocabulary (`kind: "trust.bundle"`, `bundle_claim`) — the
|
|
21
|
+
same vocabulary `kits/builder/flows/build.flow.json` uses. Veritas is simply the producer that
|
|
22
|
+
satisfies it. `claimType: "software-readiness-verdict"` is taken directly from Veritas's own
|
|
23
|
+
Surface projection (`veritas/src/surface/projected-claims.mjs`, surface `veritas.readiness`).
|
|
24
|
+
|
|
25
|
+
## How to run the gate
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 1. Produce a real Veritas readiness report for your change.
|
|
29
|
+
veritas readiness --check evidence --working-tree
|
|
30
|
+
# -> writes .kontourai/veritas/evidence/veritas-<runId>.json
|
|
31
|
+
|
|
32
|
+
# 2. Project that report into a trust.bundle.
|
|
33
|
+
node kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs \
|
|
34
|
+
--report .kontourai/veritas/evidence/veritas-<runId>.json \
|
|
35
|
+
--out readiness.bundle
|
|
36
|
+
|
|
37
|
+
# 3. Gate it (agentless, CI-callable — @kontourai/flow >= 1.3).
|
|
38
|
+
flow init
|
|
39
|
+
flow start kits/veritas-governance/flows/readiness-check.flow.json --run-id readiness
|
|
40
|
+
flow attach-evidence readiness --gate gate-check-gate --file readiness.bundle --bundle
|
|
41
|
+
flow evaluate readiness --gate gate-check-gate --exit-code
|
|
42
|
+
# exit 0 when readiness is ready (claim verified); exit 1 (block) otherwise.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Semantics
|
|
46
|
+
|
|
47
|
+
**Settled** (owner-ratified + investigation-confirmed; see
|
|
48
|
+
`.kontourai/flow-agents/ws5-governance-kit-slice1` session findings). The adapter derives the
|
|
49
|
+
readiness gate verdict from **blocking failures** in Veritas's own recorded results: a
|
|
50
|
+
`Require`-enforcement policy failure, an uncovered-path `fail`, a failed selected evidence check,
|
|
51
|
+
or a blocking external-tool `fail`/`missing` makes the verdict **not-ready** → the
|
|
52
|
+
`software-readiness-verdict` claim derives a non-`verified` status → the gate **blocks**. A ready
|
|
53
|
+
verdict derives `verified` → the gate **passes**.
|
|
54
|
+
|
|
55
|
+
This matches Veritas's own `readinessHasBlockingFailure` helper (`veritas/src/surface/readiness.mjs`)
|
|
56
|
+
and Surface's weakest-link claim derivation (`buildTrustReport` downgrades a readiness claim to
|
|
57
|
+
`rejected` on any rejected Require). The adapter intentionally does **not** apply Veritas's
|
|
58
|
+
`promotion_allowed` short-circuit — `promotion_allowed` is a workstream-routing hint (set by
|
|
59
|
+
file-pattern lane resolution in `src/repo/routing.mjs`), not a safety signal, and applying it as
|
|
60
|
+
one lets a record with blocking Require failures read as ready. That short-circuit is a filed
|
|
61
|
+
Veritas bug, [kontourai/veritas#106](https://github.com/kontourai/veritas/issues/106), not a
|
|
62
|
+
legitimate alternate reading. Investigation conclusion: the adapter's stricter blocking-failure
|
|
63
|
+
derivation is correct today and will agree with Veritas's own exported functions once #106 lands.
|
|
64
|
+
|
|
65
|
+
## Trust status
|
|
66
|
+
|
|
67
|
+
Slice 1 ships **unverified** (like `kits/release-evidence`); it is not on the first-party
|
|
68
|
+
allowlist (`src/flow-kit/validate.ts` `FIRST_PARTY_KIT_IDS`). First-party promotion is an owner
|
|
69
|
+
decision deferred to a later slice (see the WS5 shaping's open decisions).
|
|
70
|
+
|
|
71
|
+
## Not in slice 1
|
|
72
|
+
|
|
73
|
+
Skills (`consult-standards`, `governance-evidence`), the fuller `merge-readiness` flow, the
|
|
74
|
+
`standards-authoring` flow, and the `knowledge` dependency are later slices — see the WS5
|
|
75
|
+
backlog.
|