diff --git a/.agents/skills/canon-shared/references/runtime-compatibility.toml b/.agents/skills/canon-shared/references/runtime-compatibility.toml index a6a4b0ff..bc4a42c4 100644 --- a/.agents/skills/canon-shared/references/runtime-compatibility.toml +++ b/.agents/skills/canon-shared/references/runtime-compatibility.toml @@ -1,5 +1,5 @@ [canon] -expected_workspace_version = "0.72.5" +expected_workspace_version = "0.72.6" install_command = "follow the install guide at https://github.com/apply-the/canon#install" install_guidance_ref = "https://github.com/apply-the/canon#install" release_surface = "https://github.com/apply-the/canon/releases" diff --git a/.antigravity-plugin/manifest.json b/.antigravity-plugin/manifest.json index 59487c87..99d547ab 100644 --- a/.antigravity-plugin/manifest.json +++ b/.antigravity-plugin/manifest.json @@ -1,7 +1,7 @@ { "name": "canon", "displayName": "Canon Assistant Support for Antigravity", - "version": "0.72.5", + "version": "0.72.6", "description": "Canon provides semantic governance for AI-assisted engineering work: structured packets, governed evidence, approvals, lineage, project memory, and reusable delivery knowledge.", "author": { "name": "Apply The", diff --git a/.claude-plugin/manifest.json b/.claude-plugin/manifest.json index 8ce0c6aa..28c5b530 100644 --- a/.claude-plugin/manifest.json +++ b/.claude-plugin/manifest.json @@ -1,7 +1,7 @@ { "name": "canon", "displayName": "Canon Assistant Support for Claude Code", - "version": "0.72.5", + "version": "0.72.6", "description": "Canon provides semantic governance for AI-assisted engineering work: structured packets, governed evidence, approvals, lineage, project memory, and reusable delivery knowledge.", "author": { "name": "Apply The", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index b1bebf6a..6dde5101 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "canon", "displayName": "Canon Assistant Support for Codex", - "version": "0.72.5", + "version": "0.72.6", "description": "Canon provides semantic governance for AI-assisted engineering work: structured packets, governed evidence, approvals, lineage, project memory, and reusable delivery knowledge.", "author": { "name": "Apply The", diff --git a/.cursor-plugin/manifest.json b/.cursor-plugin/manifest.json index 2b90e154..02b91cfa 100644 --- a/.cursor-plugin/manifest.json +++ b/.cursor-plugin/manifest.json @@ -1,7 +1,7 @@ { "name": "canon", "displayName": "Canon Assistant Support for Cursor", - "version": "0.72.5", + "version": "0.72.6", "description": "Canon provides semantic governance for AI-assisted engineering work: structured packets, governed evidence, approvals, lineage, project memory, and reusable delivery knowledge.", "author": { "name": "Apply The", diff --git a/Cargo.lock b/Cargo.lock index ba58c629..bacfba5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,7 +128,7 @@ checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "canon-adapters" -version = "0.72.5" +version = "0.72.6" dependencies = [ "serde", "serde_json", @@ -140,7 +140,7 @@ dependencies = [ [[package]] name = "canon-cli" -version = "0.72.5" +version = "0.72.6" dependencies = [ "canon-engine", "clap", @@ -161,7 +161,7 @@ dependencies = [ [[package]] name = "canon-engine" -version = "0.72.5" +version = "0.72.6" dependencies = [ "canon-adapters", "serde", @@ -180,7 +180,7 @@ dependencies = [ [[package]] name = "canon-workspace" -version = "0.72.5" +version = "0.72.6" dependencies = [ "assert_cmd", "canon-adapters", diff --git a/Cargo.toml b/Cargo.toml index 2eb47e95..bd647317 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ resolver = "2" edition = "2024" license = "MIT" rust-version = "1.96.0" -version = "0.72.5" +version = "0.72.6" [workspace.dependencies] assert_cmd = "2" diff --git a/assistant/plugin-metadata.json b/assistant/plugin-metadata.json index eb952782..525a7a3b 100644 --- a/assistant/plugin-metadata.json +++ b/assistant/plugin-metadata.json @@ -1,7 +1,7 @@ { "name": "canon", "displayName": "Canon Assistant Support", - "version": "0.72.5", + "version": "0.72.6", "description": "Governed packet runtime for AI-assisted engineering work", "author": { "name": "Apply The", diff --git a/crates/canon-engine/src/orchestrator/service/mode_pr_review_finalize.rs b/crates/canon-engine/src/orchestrator/service/mode_pr_review_finalize.rs index e1cdf15b..d76a4a5d 100644 --- a/crates/canon-engine/src/orchestrator/service/mode_pr_review_finalize.rs +++ b/crates/canon-engine/src/orchestrator/service/mode_pr_review_finalize.rs @@ -90,6 +90,9 @@ impl EngineService { write_run_state_finalize(&run_dir, RunState::Finalized)?; + // ── Publish artifacts to .canon/artifacts//pr-review/ ── + publish_artifacts(self, run_id, &run_dir)?; + Ok(()) } } @@ -483,6 +486,36 @@ fn write_run_state_finalize(run_dir: &Path, state: RunState) -> Result<(), Strin Ok(()) } +/// Copies the finalized review artifacts from the run directory to +/// `.canon/artifacts//pr-review/` so they are discoverable +/// as governed review packet outputs. +fn publish_artifacts(service: &EngineService, run_id: &str, run_dir: &Path) -> Result<(), String> { + let artifacts_dir = service.project_layout().artifacts_dir().join(run_id).join("pr-review"); + fs::create_dir_all(&artifacts_dir).map_err(|e| format!("create artifacts directory: {e}"))?; + + // Artifacts that constitute the published pr-review packet. + const PUBLISHABLE_ARTIFACTS: &[&str] = &[ + "01-review-summary.md", + "06-review-report.md", + "review-findings.json", + "missing-tests.md", + "manifest.toml", + "canonical-review-output.json", + "packet-metadata.json", + "coverage-accounting.md", + ]; + + for filename in PUBLISHABLE_ARTIFACTS { + let src = run_dir.join(filename); + if src.exists() { + fs::copy(&src, artifacts_dir.join(filename)) + .map_err(|e| format!("copy artifact `{filename}`: {e}"))?; + } + } + + Ok(()) +} + /// Produces a `coverage-accounting.md` artifact listing all 7 layers /// with their status (reviewed/deferred/skipped) and explicit reasons. /// @@ -863,5 +896,89 @@ mod tests { // Verify run state was updated to finalized let state_content = fs::read_to_string(run_dir.join("run-state.json")).unwrap(); assert!(state_content.contains("finalized"), "state not finalized"); + + // Verify artifacts were published to .canon/artifacts/ + let artifacts_dir = + workspace.path().join(".canon").join("artifacts").join(run_id).join("pr-review"); + assert!( + artifacts_dir.join("01-review-summary.md").exists(), + "summary not published to artifacts" + ); + assert!( + artifacts_dir.join("06-review-report.md").exists(), + "report not published to artifacts" + ); + assert!( + artifacts_dir.join("review-findings.json").exists(), + "findings not published to artifacts" + ); + assert!( + artifacts_dir.join("manifest.toml").exists(), + "manifest not published to artifacts" + ); + assert!( + artifacts_dir.join("coverage-accounting.md").exists(), + "coverage accounting not published to artifacts" + ); + } + + // ── publish_artifacts unit tests ───────────────────────────────────── + + #[test] + fn publish_artifacts_copies_all_expected_files() { + let workspace = TempDir::new().unwrap(); + let run_id = "test-publish-artifacts"; + let run_dir = workspace.path().join(".canon").join("runs").join(run_id).join("pr-review"); + fs::create_dir_all(&run_dir).unwrap(); + + // Create each expected artifact in the run directory + let artifact_files = [ + "01-review-summary.md", + "06-review-report.md", + "review-findings.json", + "missing-tests.md", + "manifest.toml", + "canonical-review-output.json", + "packet-metadata.json", + "coverage-accounting.md", + ]; + for file in &artifact_files { + fs::write(run_dir.join(file), format!("content of {file}")).unwrap(); + } + + let service = EngineService::new(workspace.path()); + publish_artifacts(&service, run_id, &run_dir).unwrap(); + + let artifacts_dir = + workspace.path().join(".canon").join("artifacts").join(run_id).join("pr-review"); + for file in &artifact_files { + let dest = artifacts_dir.join(file); + assert!(dest.exists(), "artifact {file} was not published"); + let content = fs::read_to_string(&dest).unwrap(); + assert_eq!(content, format!("content of {file}")); + } + } + + #[test] + fn publish_artifacts_skips_missing_source_files() { + let workspace = TempDir::new().unwrap(); + let run_id = "test-publish-missing"; + let run_dir = workspace.path().join(".canon").join("runs").join(run_id).join("pr-review"); + fs::create_dir_all(&run_dir).unwrap(); + + // Only create a subset of artifacts; missing files should be skipped + fs::write(run_dir.join("01-review-summary.md"), "summary").unwrap(); + fs::write(run_dir.join("manifest.toml"), "manifest").unwrap(); + + let service = EngineService::new(workspace.path()); + let result = publish_artifacts(&service, run_id, &run_dir); + assert!(result.is_ok(), "publish should succeed even with missing source files"); + + let artifacts_dir = + workspace.path().join(".canon").join("artifacts").join(run_id).join("pr-review"); + assert!(artifacts_dir.join("01-review-summary.md").exists()); + assert!(artifacts_dir.join("manifest.toml").exists()); + // Missing files should not be created + assert!(!artifacts_dir.join("06-review-report.md").exists()); } } diff --git a/crates/canon-engine/src/review/validate.rs b/crates/canon-engine/src/review/validate.rs index 163031fe..1a73516e 100644 --- a/crates/canon-engine/src/review/validate.rs +++ b/crates/canon-engine/src/review/validate.rs @@ -7,7 +7,7 @@ use serde::Deserialize; -use crate::review::onion::{CANONICAL_LAYERS, LayerStatus}; +use crate::review::onion::LayerStatus; /// Result of validating a reviewer output. #[derive(Debug, Clone)] @@ -71,11 +71,13 @@ struct RawFinding { /// Validates a reviewer output JSON string against the review context. /// -/// Checks schema, severities, recommendation, comment IDs, paths, lines, and layer coverage. +/// Checks schema, severities, recommendation, comment IDs, paths, and lines. +/// Layer coverage validation is delegated to the filesystem-based check in +/// `mode_pr_review_accept::check_layer_coverage`. pub fn validate_reviewer_output( json: &str, changed_files: &[String], - layer_states: &[(String, LayerStatus)], + _layer_states: &[(String, LayerStatus)], ) -> ValidationResult { let mut errors = Vec::new(); let mut downgrades = Vec::new(); @@ -89,7 +91,6 @@ pub fn validate_reviewer_output( check_comment_id_uniqueness(&output, &mut errors); check_severities(&output, &mut errors); check_paths_and_lines(&output, changed_files, &mut downgrades); - check_layer_coverage(layer_states, &mut errors); ValidationResult { valid: errors.is_empty(), errors, downgrades } } @@ -164,17 +165,6 @@ fn check_paths_and_lines( } } -fn check_layer_coverage(layer_states: &[(String, LayerStatus)], errors: &mut Vec) { - for layer in CANONICAL_LAYERS { - if *layer == "global" { - continue; - } - if !layer_states.iter().any(|(name, _)| name == *layer) { - errors.push(format!("Layer '{layer}' is missing from layer coverage")); - } - } -} - #[cfg(test)] mod tests { use super::*; @@ -259,17 +249,23 @@ mod tests { } #[test] - fn test_missing_layer_coverage_blocks() { + fn test_layer_coverage_delegated_to_filesystem_check() { + // Layer coverage is validated by the filesystem-based check in + // mode_pr_review_accept.rs, not by validate_reviewer_output. + // Passing a partial layer state should NOT cause validation failure. let json = r#"{ "schema_version": "1.0", "findings": [], "recommendation": "Comment", "layer_coverage": {} }"#; - let partial = vec![("diff".to_string(), LayerStatus::Completed)]; + let partial = vec![("early-signal".to_string(), LayerStatus::Completed)]; let result = validate_reviewer_output(json, &[], &partial); - assert!(!result.valid); - assert!(result.errors.iter().any(|e| e.contains("whole_file"))); + assert!( + result.valid, + "Layer coverage validation is delegated to filesystem check; partial layer_states should not block here. Errors: {:?}", + result.errors + ); } #[test] @@ -284,4 +280,21 @@ mod tests { assert!(!result.valid); assert!(result.errors.iter().any(|e| e.contains("Invalid recommendation"))); } + + #[test] + fn test_unsupported_schema_version_rejected() { + let json = r#"{ + "schema_version": "0.9", + "findings": [], + "recommendation": "Comment", + "layer_coverage": {} + }"#; + let result = validate_reviewer_output(json, &[], &completed_layers()); + assert!(!result.valid); + assert!( + result.errors.iter().any(|e| e.contains("Unsupported schema version")), + "Errors: {:?}", + result.errors + ); + } } diff --git a/defaults/embedded-skills/canon-shared/references/runtime-compatibility.toml b/defaults/embedded-skills/canon-shared/references/runtime-compatibility.toml index a6a4b0ff..bc4a42c4 100644 --- a/defaults/embedded-skills/canon-shared/references/runtime-compatibility.toml +++ b/defaults/embedded-skills/canon-shared/references/runtime-compatibility.toml @@ -1,5 +1,5 @@ [canon] -expected_workspace_version = "0.72.5" +expected_workspace_version = "0.72.6" install_command = "follow the install guide at https://github.com/apply-the/canon#install" install_guidance_ref = "https://github.com/apply-the/canon#install" release_surface = "https://github.com/apply-the/canon/releases" diff --git a/docs/governance/evidence.md b/docs/governance/evidence.md index cc61a082..f59eb164 100644 --- a/docs/governance/evidence.md +++ b/docs/governance/evidence.md @@ -49,7 +49,7 @@ Typical meanings: - approval rejected when downstream use should stop - approval expired when prior approval no longer applies -Exact machine-facing values are part of the adapter contract. Canonical source: [Governance Adapter Integration](https://github.com/apply-the/canon/blob/0.69.0/tech-docs/integration/governance-adapter.md). +Exact machine-facing values are part of the adapter contract. Canonical source: [Governance Adapter Integration](https://github.com/apply-the/canon/blob/0.72.6/tech-docs/integration/governance-adapter.md). ## Readiness States diff --git a/docs/guide/introduction.md b/docs/guide/introduction.md index 7ce1fb40..ebd82599 100644 --- a/docs/guide/introduction.md +++ b/docs/guide/introduction.md @@ -1,9 +1,9 @@ # Canon > [!TIP] -> This wiki is aligned with **Canon 0.69.0**. For older versions, refer to the repository tags. +> This wiki is aligned with **Canon 0.72.6**. For older versions, refer to the repository tags. -![Canon - Semantic Governance Runtime](https://github.com/apply-the/canon/blob/0.69.0/tech-docs/images/canon-banner.jpg?raw=true) +![Canon - Semantic Governance Runtime](https://github.com/apply-the/canon/blob/0.72.6/tech-docs/images/canon-banner.jpg?raw=true) **The governance runtime for AI-assisted engineering.** Keep AI agents bounded, inspectable, and safely restricted to approved work zones. diff --git a/docs/roadmap/index.md b/docs/roadmap/index.md index 79d4a27d..5f29428b 100644 --- a/docs/roadmap/index.md +++ b/docs/roadmap/index.md @@ -9,7 +9,7 @@ The goal of Canon is to transform AI-assisted engineering activity into a proces ## Upcoming Features & Topics ### Current 0.68.0 -- **Systematic Debugging Mode**: Canon 0.69.0 introduces the systematic debugging mode, establishing a green-zone workflow with a five-phase verification gate (context, reproduction, root-cause, fix-decision, and verification) for tracking codebase incidents. +- **Systematic Debugging Mode**: Canon 0.72.6 introduces the systematic debugging mode, establishing a green-zone workflow with a five-phase verification gate (context, reproduction, root-cause, fix-decision, and verification) for tracking codebase incidents. ### Recently Landed - **Assistant Surface Expansion**: `canon init` now supports Cursor and Antigravity alongside the existing assistant targets, while repository-level assistant package metadata remains aligned with the current release. diff --git a/roadmap/Next - forward-roadmap.md b/roadmap/Next - forward-roadmap.md index 364cd103..3e9df296 100644 --- a/roadmap/Next - forward-roadmap.md +++ b/roadmap/Next - forward-roadmap.md @@ -2,7 +2,7 @@ ## Where Canon Is Today -Canon 0.64.0 governs packet-based workflows across 18 first-class modes +Canon 0.72.6 governs packet-based workflows across 18 first-class modes covering the full lifecycle from discovery through operations. What the runtime does well: bounded packet authoring, evidence-linked approval, fail-closed validation surfaces, and release-aware contract publication. diff --git a/specs/005-cli-release-ux/validation-report.md b/specs/005-cli-release-ux/validation-report.md index 7910bb4e..354d6c8b 100644 --- a/specs/005-cli-release-ux/validation-report.md +++ b/specs/005-cli-release-ux/validation-report.md @@ -55,7 +55,7 @@ Planned validation for this feature covers: | Surface | Expected Version | Observed | Result | Notes | | --- | --- | --- | --- | --- | | `Cargo.toml` workspace version | `0.5.0` | `0.5.0` | PASS | verified during structural validation and local dry run metadata render | -| Rendered release notes | `0.5.0` | `Canon 0.5.0` and `Tag: v0.5.0` | PASS | rendered into `.canon/tmp/release-dry-run/release-notes.md` | +| Rendered release notes | `0.5.0` | `Canon 0.72.6` and `Tag: v0.5.0` | PASS | rendered into `.canon/tmp/release-dry-run/release-notes.md` | | Archive names | `0.5.0` | all six release-surface files are versioned `0.5.0` | PASS | verified by `scripts/release/verify-release-surface.sh` | | Checksum manifest name and entries | `0.5.0` | `canon-0.5.0-SHA256SUMS.txt` with one entry per archive | PASS | verified by `scripts/release/verify-release-surface.sh` | | `canon --version` output per built binary | `0.5.0` | `canon 0.5.0` | PASS | native host binary executed locally; release workflow enforces per-artifact version sidecars | diff --git a/specs/039-authoring-packet-readiness/validation-report.md b/specs/039-authoring-packet-readiness/validation-report.md index 34c40947..18fcecd7 100644 --- a/specs/039-authoring-packet-readiness/validation-report.md +++ b/specs/039-authoring-packet-readiness/validation-report.md @@ -75,4 +75,4 @@ ## Final Commit Message -- `feat: deliver authoring packet readiness as Canon 0.39.0` \ No newline at end of file +- `feat: deliver authoring packet readiness as Canon 0.72.6` \ No newline at end of file diff --git a/specs/040-governance-runtime-framing/validation-report.md b/specs/040-governance-runtime-framing/validation-report.md index 6c9bf554..64c494c9 100644 --- a/specs/040-governance-runtime-framing/validation-report.md +++ b/specs/040-governance-runtime-framing/validation-report.md @@ -42,4 +42,4 @@ - All planned tasks in `tasks.md` are complete. - The feature invariants still hold: Canon remains local-first and governed, the human CLI and governance adapter are documented as one runtime, and no governance adapter schema or lifecycle semantics were changed. -- Proposed commit message: `feat: deliver governance runtime framing as Canon 0.40.0` \ No newline at end of file +- Proposed commit message: `feat: deliver governance runtime framing as Canon 0.72.6` \ No newline at end of file diff --git a/specs/050-project-memory-control/plan.md b/specs/050-project-memory-control/plan.md index 79a25512..bb304837 100644 --- a/specs/050-project-memory-control/plan.md +++ b/specs/050-project-memory-control/plan.md @@ -75,7 +75,7 @@ runtime authority; do not require Boundline-specific code paths to understand Canon-owned semantics **Scale/Scope**: 1 stable contract path, 1 feature-local contract bundle, 4 shared contract shapes, and existing publish-policy surfaces already shipped in -Canon 0.48.0+ +Canon 0.72.6+ `specs/048-project-memory-promotion-policy/contracts/` is treated as prior design context. The canonical contract for this slice is owned by diff --git a/specs/059-reasoning-profile-closure-alignment/spec.md b/specs/059-reasoning-profile-closure-alignment/spec.md index b8d6dfae..b72d65dd 100644 --- a/specs/059-reasoning-profile-closure-alignment/spec.md +++ b/specs/059-reasoning-profile-closure-alignment/spec.md @@ -3,7 +3,7 @@ **Feature Branch**: `059-reasoning-profile-closure-alignment` **Created**: 2026-05-18 **Status**: Draft -**Input**: User description: "Publish the Canon 0.58.0 companion alignment for Boundline 0.62.0 reasoning profile closure by updating the governed reasoning posture contract window, contract tests, changelog, and release-facing docs without changing Canon runtime behavior." +**Input**: User description: "Publish the Canon 0.72.6 companion alignment for Boundline 0.72.6 reasoning profile closure by updating the governed reasoning posture contract window, contract tests, changelog, and release-facing docs without changing Canon runtime behavior." ## Governance Context *(mandatory)* diff --git a/specs/065-reasoning-posture-v2/spec.md b/specs/065-reasoning-posture-v2/spec.md index 32a1e512..ff7c3755 100644 --- a/specs/065-reasoning-posture-v2/spec.md +++ b/specs/065-reasoning-posture-v2/spec.md @@ -6,7 +6,7 @@ **Status**: Draft -**Input**: User description: "Create a hard, contract-line-evolving redesign of Canon's governed reasoning posture producer contract that introduces a new Canon-owned contract line, strengthens the producer shape with typed subcontracts, defines fail-closed migration and incompatibility rules, publishes machine-checkable examples, and aligns the release on Canon 0.64.0 with the required validation and documentation updates." +**Input**: User description: "Create a hard, contract-line-evolving redesign of Canon's governed reasoning posture producer contract that introduces a new Canon-owned contract line, strengthens the producer shape with typed subcontracts, defines fail-closed migration and incompatibility rules, publishes machine-checkable examples, and aligns the release on Canon 0.72.6 with the required validation and documentation updates." ## Governance Context diff --git a/tests/contract/governed_reasoning_posture_contract.rs b/tests/contract/governed_reasoning_posture_contract.rs index 2a5523fd..35da9250 100644 --- a/tests/contract/governed_reasoning_posture_contract.rs +++ b/tests/contract/governed_reasoning_posture_contract.rs @@ -30,7 +30,7 @@ const FIXTURE_ROOT: &str = const SUPPORTED_BOUNDLINE_VERSION: &str = "0.74.0"; const SUPPORTED_BOUNDLINE_WINDOW: &str = "0.74.x"; const SUPPORTED_BOUNDLINE_MAX_EXCLUSIVE: &str = "0.75.0"; -const SUPPORTED_CANON_VERSION: &str = "0.72.5"; +const SUPPORTED_CANON_VERSION: &str = "0.72.6"; const SUPPORTED_CANON_WINDOW: &str = "0.72.x"; const SUPPORTED_CANON_MAX_EXCLUSIVE: &str = "0.73.0"; const SUPPORTED_CONTRACT_LINE: &str = "governed_reasoning_posture_v2"; diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-compatibility-window.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-compatibility-window.toml index 8d2bb697..2ce85a64 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-compatibility-window.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-compatibility-window.toml @@ -10,7 +10,7 @@ publication_status = "active" boundline_min = "0.62.0" boundline_max_exclusive = "0.63.0" canon_min = "0.63.1" -canon_max_exclusive = "0.72.5" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v1" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-missing-block.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-missing-block.toml index 0919cc4a..bd0e5e9f 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-missing-block.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-missing-block.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-none-contradictory.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-none-contradictory.toml index 241cab3d..ca754c8b 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-none-contradictory.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-none-contradictory.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-required-missing-fields.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-required-missing-fields.toml index b3b34d37..85a4f47d 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-required-missing-fields.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-confidence-required-missing-fields.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-contradictory.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-contradictory.toml index aa0655fa..7a7e4c69 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-contradictory.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-contradictory.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-guidance-override.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-guidance-override.toml index 7cebace4..fb85ec3c 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-guidance-override.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-guidance-override.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-impossible-minima.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-impossible-minima.toml index c110b05c..aa3591c2 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-impossible-minima.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-impossible-minima.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-missing-block.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-missing-block.toml index 95fc5160..e455e3d9 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-missing-block.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-independence-missing-block.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-contradictory.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-contradictory.toml index 2246bfeb..055bfdbd 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-contradictory.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-contradictory.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-incompatible-handoff.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-incompatible-handoff.toml index 424ff761..10059010 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-incompatible-handoff.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-incompatible-handoff.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-block.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-block.toml index 78b8d62a..21cdb0a7 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-block.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-block.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-reference-kind.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-reference-kind.toml index 9bb0df31..8b73965f 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-reference-kind.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-missing-reference-kind.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-stale.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-stale.toml index 164a19c4..df7e63c0 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-stale.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-provenance-stale.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-both-present.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-both-present.toml index 9e6f2c25..6e870686 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-both-present.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-both-present.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-neither-present.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-neither-present.toml index 386d08a7..8e10a980 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-neither-present.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-selector-neither-present.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/invalid-unsupported-vocabulary.toml b/tests/fixtures/governed_reasoning_posture_v2/invalid-unsupported-vocabulary.toml index 5d55c22c..bd0db425 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/invalid-unsupported-vocabulary.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/invalid-unsupported-vocabulary.toml @@ -9,8 +9,8 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" -canon_max_exclusive = "0.72.5" +canon_min = "0.72.6" +canon_max_exclusive = "0.72.6" contract_line = "governed_reasoning_posture_v2" [profile_selector] diff --git a/tests/fixtures/governed_reasoning_posture_v2/valid-v2-posture.toml b/tests/fixtures/governed_reasoning_posture_v2/valid-v2-posture.toml index ca1c9872..8d6a1e9f 100644 --- a/tests/fixtures/governed_reasoning_posture_v2/valid-v2-posture.toml +++ b/tests/fixtures/governed_reasoning_posture_v2/valid-v2-posture.toml @@ -9,7 +9,7 @@ publication_status = "active" [compatibility_window] boundline_min = "0.74.0" boundline_max_exclusive = "0.75.0" -canon_min = "0.72.5" +canon_min = "0.72.6" canon_max_exclusive = "0.73.0" contract_line = "governed_reasoning_posture_v2"