Releases: blackwell-systems/polywave-go
Release list
v0.100.4
Fixed
validate --fix now auto-corrects common action aliases. Scouts frequently write action: edit instead of the valid action: modify. Rather than blocking with V036_INVALID_ENUM, the --fix path normalizes these before validation:
| Scout writes | Corrected to |
|---|---|
edit, update, change |
modify |
create, add |
new |
remove |
delete |
The validate_scout_output SubagentStop hook (v0.11.1) runs --fix before final validation, so these aliases are corrected automatically without manual intervention.
Upgrade
brew upgrade blackwell-systems/tap/polywave-tools
# or
go install github.com/blackwell-systems/polywave-go/cmd/polywave-tools@v0.100.4v0.100.3
Fixed
- V048 LOC budget scoped to current wave only.
--waveflag onpolywave-tools validaterestricts the LOC budget check to agents in the target wave. Completed Wave 1 agents no longer block Wave 2 launches after their files grew post-merge. original_branchremoved from IMPL manifest. Operational state moved to.polywave-state/waveN/prepare-result.json. Eliminates the recurringprepare-wave/validateschema disagreement (V013_UNKNOWN_KEY) that blocked every wave launch via the H5 hook.- Protocol-engine schema conformance restored. Go engine's
IMPLManifeststruct now has zero fields outside the protocol schema (35 fields, zero drift).
Upgrade
brew upgrade blackwell-systems/tap/polywave-tools
# or
go install github.com/blackwell-systems/polywave-go/cmd/polywave-tools@v0.100.3v0.100.2
Fixed
V048_AGENT_LOC_BUDGET no longer fires on documentation and configuration files.
The LOC budget check (V048) counts lines in files an agent owns to prevent overloaded agents. Previously it counted all action: modify files regardless of type, which meant an agent assigned to update docs/architecture.md (2000+ lines) would trip the 2000-line budget even though modifying a markdown file is not comparable in complexity to modifying 2000 lines of source code.
Non-code files are now excluded from the LOC budget calculation:
| Category | Extensions excluded |
|---|---|
| Documentation | .md, .markdown, .txt, .rst, .adoc |
| Configuration | .yaml, .yml, .json, .toml, .xml |
| Data/assets | .csv, .svg, .html, .css |
| Lock files | .lock, .sum, .mod |
Agents that own source code files are still subject to the budget. The v048_exempt: true per-file override remains available for edge cases.
Upgrade
brew upgrade blackwell-systems/tap/polywave-tools
# or
go install github.com/blackwell-systems/polywave-go/cmd/polywave-tools@v0.100.2v0.100.1
Fixes
- Move
original_branchfrom IMPL manifest to.polywave-state(protocol-engine drift).prepare-wavewrote operational keys into the IMPL YAML thatvalidaterejected asV013_UNKNOWN_KEY, blocking every wave launch via the H5 hook. The recurringvalidate --fixworkaround is no longer needed. close-implnow readsoriginal_branchfrom.polywave-state/waveN/prepare-result.jsonas the primary source.
Docs
- Document native agent runtime: no external SDK (LangGraph, CrewAI, etc.) required
- Add polywave-codex to architecture table (5 repos)
- Fix license to dual MIT/Apache-2.0 with copyright attribution
- Strengthen suitability gate and positioning language in README
Tests
- Add coverage for 8 previously untested exported symbols
v0.100.0
Runtime artifact rename + rebrand cleanup
Breaking changes
.saw-ownership.jsonrenamed to.polywave-ownership.json(engine writes, hooks read).saw-config-*.tmprenamed to.polywave-config-*.tmp(atomic write temp files).gitignoreentries updated:.saw-state/to.polywave-state/,.saw-agent-brief.mdto.polywave-agent-brief.md
Changed
- 53 source files updated: all "SAW" references in Go doc comments, inline comments, and reference documentation renamed to "Polywave"
sawStatePathvariable renamed tostatePathinclose_impl_cmd.go- Test function
SawStateFilesIgnoredrenamed toPolywaveStateFilesIgnored - README: Polywave neon logo added to header
- CHANGELOG header updated from "Scout-and-Wave" to "Polywave"
protocol-rules.md:.saw-ownership.jsonreference updated
Cross-repo coordination
This release must be deployed alongside polywave v0.11.0 (protocol repo), which updates hook scripts to read .polywave-ownership.json instead of .saw-ownership.json.
v0.99.0
Changelog
- b0e8e60 Add 11 collision-specific error codes (C001-C099)
- f40cc6b Add CheckCallers and ListErrorRanges to pkg/protocol
- caa1917 Add CheckIMPLConflictsWaveLevel and WaveConflictReport types
- a86a067 Add CodeToolAlreadyRegistered constant
- b93e801 Add CriticGatePasses helper for E37 enforcement
- 74dde82 Add DetectWiring function for cross-agent call detection
- 4cb9810 Add E37 critic gate enforcement to PrepareTier
- 4f7e6b2 Add E37 critic gate enforcement to prepare-wave CLI
- 2e52691 Add ErrorClass, ClassifyError, SuggestFixes to pkg/retry
- 4e819e7 Add FindWave/FindAgent/FindWaveWithAgent helpers and extract isAgentAlreadyMerged
- 3fb2b00 Add GetDiffStats function for diff statistics analysis
- ee6b00b Add I001-I099 agent ID generation error codes
- deab863 Add InjectionMethod and ContextSource types with enum validators
- 8ed7e37 Add LoadTypePromptWithRefs helper and fix prompt path bugs in runner.go
- a40517d Add LoadYAML/SaveYAML helpers and refactor memory.go to use them
- f3352d0 Add N015/N016/N017/B008/P007 error code constants to pkg/result/codes.go
- 0213694 Add Phase and ParallelGroup fields to QualityGate struct
- 025fb97 Add RetryAttempt type and BuildRetryAttempt/BuildPromptText to pkg/retry
- f2f555c Add SerialWaves to ProgramIMPL and wire wave-level conflict detection into GenerateProgramFromIMPLs
- ab2740a Add TestExtractCommands wrapper test
- 73e8641 Add V036-V046 and W002 error code constants to pkg/result/codes.go
- 08a2c73 Add V048Exempt field to FileOwnership to skip per-agent LOC budget check
- af93ba1 Add cache error codes K001-K099 to pkg/result/codes.go
- 367dd5e Add check-callers, list-error-ranges, suggest-wave-structure CLI commands
- a881943 Add command extraction error codes (E001-E006) and update CIParser/BuildSystemParser interfaces to return Result[T]
- df51325 Add comprehensive tests for executor implementations
- d8ec88a Add context.Context to AmendImpl and propagate through helper functions
- 433c720 Add context.Context to CheckAgentComplexity, CheckAgentLOCBudget, DetectOwnershipConflicts, PredictConflictsFromReports
- f44a517 Add context.Context to DetectCascades and DetectSharedTypes
- 19f03d3 Add context.Context to RunBaselineGates and RunCrossRepoBaselineGates
- f9cfd76 Add context.Context to pkg/collision.DetectCollisions and propagate to callers
- a5acba5 Add ctx context.Context to UpdateContext in pkg/protocol
- ebc9638 Add ctx context.Context to VerifyDependenciesAvailable
- 6568587 Add dependency check error codes (D001-D099)
- f4f40e2 Add detect-wiring CLI command
- 2314227 Add enhanced conflict prediction with auto-merge capability
- f8d47b9 Add fast-fail I1 check early in PrepareWave
- 4f366a0 Add isCrossImplSerialWaveBlocked and wave-number-first tier execution loop
- 4d02ba7 Add logger injection to Cleanup function
- 7f1b506 Add logger injection to CreateProgramWorktrees
- 97ddd73 Add logger injection to CreateWorktrees
- 1dd977e Add logger injection to MergeAgents function
- b255ab9 Add logger injection to PrepareAgentContext and loadJournalEntries
- 8646322 Add logger injection to RunStubScan and update call site
- babc359 Add logger injection to pkg/protocol/gates.go
- 1154665 Add logger parameter to ClassifyWorktrees and isWorktreeDirty
- 8b2fa14 Add new error code constants and replace inline strings in gatecache
- fe47b88 Add resolveIMPLPathOrAbs and update CheckIMPLConflicts for cross-repo path support
- d0848ba Add retry error codes and replace hardcoded error strings
- 19927d2 Add run-integration-agent CLI command
- b21f96c Add scaffold validation error codes (SV01-SV05)
- 466fda5 Add set-injection-method command and context_source detection in prepare-agent
- 1d74b2d Add thread-safety to gatecache with mutex protection
- 9fcf02a Add wave-level conflict integration tests for create-program cmd
- ee9f273 Add wire-manager-lifecycle IMPL doc
- 07939af Add wrapper test coverage and doc comments
- c8a7a8a Archive engine-cleanup-remaining IMPL
- 24a6a7a Archive retry-unification IMPL — pkg/retry now owns ErrorClass, RetryAttempt, BuildRetryAttempt; pkg/retryctx shimmed
- 9412e43 Canonicalize error codes in worktree/cleanup/build/program-tier files
- 64712b5 Canonicalize observer.go: result types, J-codes, unexport payload types, RawAgentID, hash fix
- d4ee0f7 Change ExecuteTool to return (string, error) with ErrToolNotFound sentinel
- 1d63f87 Clarify orchestrator transitions.go as private FSM, not protocol-level SM-02
- e973ea1 Delete ValidateSM02TransitionGuards and TransitionTo from manifest.go
- 1643af5 Engine cleanup: stdlib replacements, remove duplicate sentinel, fix error wrapping
- 09f16aa Export slug/path/tier functions; add BuildFileOwnershipMap
- 5a3f8a4 Expose cross-repo path support in create-program and check-impl-conflicts CLI
- 57762da Extend E35 detection to identify test file cascade candidates
- 84d3162 Fix CheckIMPLConflictsWaveLevel to use resolveIMPLPathOrAbs for absolute path support
- 1140b75 Fix IMPL slug fallback to strip IMPL- prefix and .yaml suffix from filename
- be9a85a Fix P0 runtime bugs in language parser helpers: javascript.go, python.go, rust.go
- 1059165 Fix ParseProgramManifest to strip SAW:PROGRAM:COMPLETE marker before YAML parsing
- b0820ab Fix error wrapping in update-program-impl and update-program-state cmds
- be16faa Fix post-merge test failures from worktree.New validation
- 5120c83 Fix prepare-wave deadlock on gitignored tracked files
- 46f9ca5 Fix prepare-wave/finalize-wave for program IMPL branch context
- 0387aa8 Fix test breakage from contains() removal: replace with strings.Contains()
- e6f01bc Go Engine Enhancements program complete (3 IMPLs, 2 tiers)
- 71507da Merge Agent B: types.go LockFileParser interface migration
- 6325fc0 Merge Agent C changes (parser implementations only)
- 0766da9 Merge Agent C: D001-D099 error codes
- 83129cf Merge Agent D: gosum.go + packagelock.go Result[T] migration
- b96bac7 Merge Agent E: cargolock.go + helpers.go extraction
- 95c19a6 Merge Agent F: poetrylock.go Result[T] migration + bug fixes
- 23bb062 Merge Agent H: checker_test.go helper tests + Result[T] updates
- a4e43a3 Merge Wave 1: Fix pkg/collision review findings
- a4f8968 Merge branch 'saw/commands-review-fixes/wave1-agent-A'
- 3d5b2c5 Merge branch 'saw/commands-review-fixes/wave1-agent-B'
- 4f4bb8e Merge branch 'saw/critic-gate-fixes/wave1-agent-B'
- 4e042ac Merge branch 'saw/critic-gate-fixes/wave1-agent-C'
- 94c1d1b Merge branch 'saw/engine-review-fixes/wave3-agent-K'
- 37fb1ab Merge branch 'saw/engine-review-fixes/wave3-agent-L'
- 9eee58a Merge branch 'saw/engine-review-fixes/wave3-agent-M'
- 7085a9b Merge branch 'saw/pkg-deps-review-fixes/wave1-agent-A'
- 047e642 Merge branch 'saw/pkg-deps-review-fixes/wave1-agent-G'
- c0fc15f Merge branch 'saw/result-type-migration/wave1-agent-A'
- b5c8234...
v0.98.0
Changelog
- 190f915 Add 6 new Step* functions to finalize_steps.go (engine-finalize-enforcement wave 1)
- f3b50a0 Add CheckAgentComplexity to protocol validation
- abf6cc2 Add Discord and Telegram notification adapters with tests and README
- bdbc238 Add Dispatcher (fan-out + error collection) and Registry (config-driven adapter instantiation)
- 4e47ed4 Add Slack webhook adapter with Block Kit formatting and tests
- 1521741 Add W001_AGENT_SCOPE_LARGE warning code constant to result codes
- 4119a42 Add logger field to Orchestrator struct with SetLogger setter and log() helper; replace 8 fmt.Fprintf calls with structured slog calls
- 974f0ee Add sawtools init command with zero-config project detection
- 745cb28 Add tests for StepVerifyCompletionReports, StepCheckAgentStatuses, StepPredictConflicts, StepCheckTypeCollisions, StepCheckWiringDeclarations, StepPopulateIntegrationChecklist
- c0047ae Engine finalization enforcement + interview mode fixes + planning doc pruning
- dc16cdb Fix G5/G6/G7/G11: phase skip guard, truncation warning, non-interactive suppression, UUID format
- 2c986ca Merge saw/agent-complexity-enforcement/wave1-agent-A: ## Context You are implementing Layer 1 of agent c
- da00490 Merge saw/agent-complexity-enforcement/wave1-agent-B: ## Context You are implementing Layer 1 of agent c
- acb5c0c Merge saw/engine-finalize-enforcement/wave2-agent-B: ## Context
- 9548a09 Merge saw/engine-finalize-enforcement/wave2-agent-C: ## Context
- 0da1772 Merge saw/engine-finalize-enforcement/wave2-agent-D: ## Context
- f5d76f8 Merge saw/interview-mode-gaps/wave1-agent-A: You are implementing fixes for gaps G5, G6, G7, G1
- 4f184d3 Merge saw/logging-injection/wave1-agent-A: ## Agent A — Add Logger field to engine opts str
- 566b5d0 Merge saw/logging-injection/wave1-agent-B: ## Agent B — Add Logger field to Orchestrator st
- 77ed981 Merge saw/logging-injection/wave2-agent-C: ## Agent C — Migrate fmt.Fprintf calls in pkg/or
- 81d1af4 Merge saw/logging-injection/wave2-agent-D: ## Agent D — Migrate fmt.Fprintf calls in pkg/pr
- 9f500ef Merge saw/logging-injection/wave3-agent-E: ## Agent E — Migrate secondary packages (worktre
- d131840 Merge saw/logging-injection/wave3-agent-F: ## Agent F — Wire slog.Logger in cmd/sawtools en
- 4754c6b Merge saw/saw-init/wave1-agent-A: ## Context
- 5369536 Merge saw/webhook-adapter-unification/wave1-agent-A: ## Goal Unify the config field names across all th
- d807219 Merge saw/webhook-notifications/wave1-agent-B: ## Agent B: Dispatcher + Registry
- 78c98fb Merge saw/webhook-notifications/wave1-agent-C: ## Agent C: Slack Adapter
- f054e53 Merge saw/webhook-notifications/wave1-agent-D: ## Agent D: Discord + Telegram Adapters + README
- 30a26cd Unify config field names across Slack, Discord, and Telegram adapters
- 5b4f64d Webhook adapter unification: unified field names with backward compat
- 9a80153 Webhook system complete + pre-wave-gate fix + validation hardening
- 58047a2 Wire 6 new Step* functions into FinalizeWave() pipeline
- a3fa964 Wire slog.Logger in cmd/sawtools entry points and add Logger to PrepareWaveOpts
- 5283c0a changelog: v0.96.0-v0.98.0 entries for sawtools init, webhook system, adapter unification
- aa7d9a7 engine: severity-aware E37 critic verdict enforcement in prepare-wave
- 98e5b29 feat(engine): add Logger field to opts structs and migrate Fprintf to slog
- aebb518 feat: agent complexity enforcement (W001_AGENT_SCOPE_LARGE)
- ff8790d feat: structured slog logging via Logger injection across engine, orchestrator, protocol, and cmd/sawtools
- edd5c93 finalize-wave: use --repo-dir flag as default repo path
- a0c24dd finalize_wave: delegate I4/E7/E11/collision/wiring/M5 checks to engine steps
- f7eefc4 fix: block finalize-wave when agent branches deleted without merging
- 609a95d fix: disable GoReleaser brews section, formula maintained manually
- 0242fd1 fix: disable Homebrew tap until repo is created
- b808a3c fix: skip quality gates when build system absent in repo
- 46d7ecb logging: migrate secondary packages to slog (worktree, journal, resume, bedrock)
- ace696d migrate pkg/orchestrator merge/stubs/journal fmt.Fprintf calls to slog
- 3dbc813 migrate pkg/protocol fmt.Fprintf/log.Printf to slog
- 3d4a45c refactor: replace W001 string literal with result.CodeAgentScopeLarge
- 7f296ff scaffold: add notify types for webhook notification system
v0.92.0
Changelog
- baef3ab Add --no-prioritize flag to run-wave command
- 00b59fc Add AgentLaunchOrder field to Wave struct
- 0e5bbfb Add Cargo.lock parser for Rust dependency detection
- e0df349 Add CommitCount function to git package
- 1322581 Add E5 and E10 field validation for Protocol SDK - worktree naming and verification format validation
- 2e6e47a Add JavaScript/TypeScript error pattern catalog
- 3c7a155 Add PostMergeChecklist field to IMPLManifest
- eebbd22 Add PostMergeChecklist types and KnownIssue.Title field
- ec755f7 Add PrepareTier batching function for program tier preparation
- c23e2ca Add ProjectMemory types and I/O helpers for CONTEXT.md - E17/E18 implementation
- 2bb2933 Add Rust AST parser via external rust-parser binary
- 4058881 Add Rust error pattern catalog with 5 common cargo errors
- b52a3a3 Add UpdateContext function for project context tracking
- f387794 Add VerifyBuild function for test/lint command execution
- 68b869f Add backward compat aliases for Wave 2 Result types
- 07a8539 Add commit verification for wave agents
- e658b53 Add comprehensive tests for agent ID assignment
- 4022edf Add create-worktrees CLI command
- 32a08e7 Add cross-repo worktree support to create-worktrees
- 13ab9b9 Add detect-cascades CLI command for M2 cascade detection
- 76ab66d Add enum validation for non-critical IMPL fields
- fc3cd5c Add list-impls CLI command
- 0d4cfa0 Add parseWaveStructureBlock for impl-wave-structure typed blocks
- ec352b1 Add scaffold package documentation and integration tests
- 4f1a7ad Add scaffold validation functions for Wave 3 Agent J
- 26d9656 Add solo wave detection and completion status helpers (SM-03)
- efbb1ec Add stub scanner implementation for orchestration loop
- 441d9f3 Add verify-build CLI command wrapper - implements runVerifyBuild() that wraps protocol.VerifyBuild(), parses flags, outputs JSON, and exits 0/1 based on test+lint pass status
- fefd083 Add verify-commits CLI subcommand
- 11df35a Add wave state query functions and config error codes (N013, N014)
- 8e02116 Clean up markdown parser tests and update documentation
- 998f98d Delete 11 backward-compat type aliases and update types.go fields
- cc82d64 E18: update CONTEXT.md — multi-repo-prepare-wave complete
- 036452f Fix create-worktrees to support hybrid markdown/YAML IMPL docs
- 5d16fb5 Implement LoadJournal and GenerateContext in JournalObserver
- cf7af2e L1+L4: enforce scout.md error, remove YAML fallback in constraints
- 0c14782 L2: standardize ValidationError context fields (Slug, Wave, AgentID)
- 5504e5c L3: consolidate multi-repo resolution into ResolveAgentRepo
- a32c48b Merge Wave 2 Agent C: integrate automation into RunScout
- 78088b4 Merge branch 'develop'
- b7db183 Merge branch 'develop'
- bb99bb7 Merge branch 'develop'
- ed42342 Merge branch 'develop' into main
- 2b91ff4 Merge branch 'saw/engine-decomposition/wave1-agent-B' into saw/engine-decomposition/wave2-agent-E
- 0cf570e Merge branch 'saw/engine-decomposition/wave1-agent-C' into saw/engine-decomposition/wave2-agent-E
- 8ae4d37 Merge branch 'saw/finalize-wave-gaps/wave1-agent-A'
- e0a9846 Merge branch 'saw/finalize-wave-gaps/wave1-agent-B'
- 495940c Merge branch 'saw/integration-gap-solution/wave1-agent-D'
- 0718300 Merge branch 'saw/intelligent-worktree-cleanup/wave1-agent-B'
- 937757e Merge branch 'saw/intelligent-worktree-cleanup/wave1-agent-C'
- bae2fcf Merge branch 'wave1-agent-A' into develop
- 30f897f Merge branch 'wave1-agent-A' into develop
- f93538d Merge branch 'wave1-agent-B' into develop
- c13f784 Merge branch 'wave1-agent-B' into develop
- 6995439 Merge branch 'wave1-agent-C' into develop
- 68fc260 Merge branch 'wave1-agent-D' into develop
- 38e5d68 Merge branch 'wave2-agent-D' into develop
- 97a25d3 Merge branch 'wave2-agent-E' into develop
- eddcb26 Merge branch 'wave2-agent-F' into develop
- da37aa6 Merge branches 'saw/result-types-unification/wave2-agent-B', 'saw/result-types-unification/wave2-agent-C', 'saw/result-types-unification/wave2-agent-D', 'saw/result-types-unification/wave2-agent-E', 'saw/result-types-unification/wave2-agent-F' and 'saw/result-types-unification/wave2-agent-G'
- f7b2fcf Merge config-state-unification wave1 agent A: pkg/config Load/Save
- 0dc7cf4 Merge config-state-unification wave1 agent B: WaveState + error codes
- 03c3027 Merge error-code-taxonomy-v2/wave1-agent-A validator group 1
- f0c6f61 Merge error-code-taxonomy-v2/wave1-agent-B validator group 2
- f749569 Merge error-code-taxonomy-v2/wave1-agent-C validator group 3
- 3147df9 Merge error-code-taxonomy-v2/wave1-agent-D validator group 4 + delete ValidationError
- 238b451 Merge error-code-taxonomy-v2/wave1-agent-E: Rename StructuredError to SAWError
- 82e033d Merge error-code-taxonomy-v2/wave2-agent-F: delete errparse.StructuredError
- 5bc8d8f Merge error-code-taxonomy-v2/wave3-agent-I: error codes + render_errors.go
- 9c549d0 Merge saw/ai-code-review-gate/wave1-agent-A: ## Agent A — codereview package (scout-and-wave-
- 1f21b0b Merge saw/ai-code-review-gate/wave1-agent-B: ## Agent B — CLI run-review command (scout-and-w
- 247a45f Merge saw/auto-fix-failures/wave1-agent-B: ## Context
- 60af251 Merge saw/auto-fix-failures/wave1-agent-C: ## Context
- 79c7f91 Merge saw/auto-program-from-impls/wave1-agent-A: ## Agent A: Cross-IMPL Conflict Detection
- 466c60f Merge saw/auto-program-from-impls/wave1-agent-B: ## Agent B: PROGRAM Manifest Generator
- 849871b Merge saw/baseline-gate-enforcement/wave1-agent-A: ## What to implement
- 3ae6a67 Merge saw/baseline-gate-enforcement/wave1-agent-B: ## What to implement
- 1234f66 Merge saw/baseline-gate-enforcement/wave1-agent-C: ## What to implement
- 0985655 Merge saw/critic-agent/wave1-agent-B: ## Agent B — CriticResult Type + WriteCriticRevi
- db3aec0 Merge saw/critic-agent/wave1-agent-C: ## Agent C — sawtools run-critic Command (scout-
- b6ca492 Merge saw/critic-agent/wave1-agent-D: ## Agent D — run-scout Critic Integration (scout
- ec822ba Merge saw/cross-wave-build-continuity/wave1-agent-A: ## Layer 2: Migration boundary validator
- 114a992 Merge saw/cross-wave-build-continuity/wave1-agent-B: ## Layer 3: Enhanced baseline failure messaging
- ac8c534 Merge saw/determinism-enforcement/wave1-agent-A: ## What to implement
- bccab73 Merge saw/determinism-enforcement/wave1-agent-B: ## What to implement
- 3e040d1 Merge saw/determinism-enforcement/wave1-agent-C: ## What to implement
- 7fef648 Merge saw/determinism-enforcement/wave2-agent-D: ## What to implement
- bd70d1e Merge saw/determinism-enforcement/wave2-agent-E: ## What to implement
- 3b2f826 Merge saw/determinism-remaining/wave1-agent-A: ## M1: Atomic RunWave Transaction Wrapper
- ecfb222 Merge saw/determinism-remaining/wave1-agent-B: ## M2 + M3: Integration Validation and Stub Detect
- 7a42a45 Merge saw/determinism-remaining/wave1-agent-C: ## L1 + L4: Prompt Error Enforcement and YAML Fall
- c27017f Merge saw/determinism-remaining/wave1-agent-D: ## L2: Standardize Validation...