Sprint 268: GR-002/003/006/007/008/016/017/019/021/024 — self-containment, graduation thresholds, asm/ir/jvm/elixir lang coverage, semanno format. Sprint 269: GR-005/011/013/015 — prose capture in RequirementsParser, GateEnforcer, ParitySkewAnalyzer, CrossArtifactConsistencyEngine. Sprint 270: GR-009/010/012/014/018/020 — CrossFileTransactionGate, SemanticCompletionGate, ConstrainedProjectionGate, TokenBudgetGate, CppConstraintRefactorPolicy, NativeDecompositionDepthGuard. All 50 new tests passing (steps 1873-1882, 5/5 per step). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 KiB
Generator Readiness Gap Registry (Dated)
- Date created: 2026-02-26
- Last reviewed: 2026-02-28 (Sprint 270: GR-009, GR-010, GR-012, GR-014, GR-018, GR-020 closed — ALL 26 GAPS DONE)
- Status: Active
- Scope: Whetstone autonomous code generation and deterministic execution readiness.
Purpose
This is the canonical dated registry for "not production-ready" generator gaps. It consolidates scattered notes from feature requests, A/B reports, and sprint execution logs.
Source Documents
docs/taskitem_pipeline_gap_log_2026-02-26.mddocs/ab_test_ast_vs_language_first_2026-02-25.mdFEATURE_REQUESTS.mddocs/sprint175_179_execution_tracker_2026-02-26.mddocs/sprint186_205_execution_tracker_2026-02-26.md
Status Legend
done: implemented and validated in code/tests for this scopepartial: implemented foundation, but not full production closureopen: still a feature request or known unresolved reliability gap
Gap Registry
| Gap ID | Gap | Source(s) | Current Status | Coverage Notes | Next Target |
|---|---|---|---|---|---|
| GR-001 | Generic taskitems and weak execution constraints | taskitem_pipeline_gap_log (items 1,2,4) | done |
Strict execution contract mode, queue blockers, specificity scoring, and deterministic metadata implemented in sprints 180-182 and verified in strict runs. | Monitor drift in future runs |
| GR-002 | Validation over-scores weak plans | taskitem_pipeline_gap_log (item 3) | done |
Sprint 268 (2026-02-28): Calibrated SelfContainmentScorer — penalty for exactly 1 reason raised from -10 to -25 (a 1-reason plan no longer passes the self-contained threshold); capability failure penalty raised from -20 to -25 (compile/test failure now always drops below threshold). 5/5 step1868 tests green. Code: SelfContainmentScorer.h. |
Monitor threshold drift in future runs |
| GR-003 | Missing deterministic replay/rollback compatibility enforcement | taskitem_pipeline_gap_log (item 5) | done |
Verified 2026-02-28: buildExecutionContract() in RegisterArchitectIntakeTools.h emits determinismContract.replay_required=true and rollbackContract.checkpoint_required=true for every taskitem. Strict mode (strict_execution_contract=true) blocks on executionSpecificityScore=0 with -35 penalty. SelfContainmentScorer correctly applies contract enforcement. 5/5 step1872 tests green. |
Monitor drift; scheduler-side consumption of rollbackContract is caller responsibility |
| GR-004 | Capability-gap routing lacks executable handoff | FEATURE_REQUESTS (deterministic debugging workflow), sprint184 tracker | done |
Queue + validation now emit executable call plans with deterministic fingerprints (debugLoopCallPlan, capability_gap_call_plan) and capability-gap run evidence is present. |
Monitor for drift |
| GR-005 | Intake drops functional requirements in some markdown specs | ab_test_ast_vs_language_first (Path B failure point #1) | done |
Sprint 269 (2026-02-28): Root cause found — RequirementsParser only captured bullet-list items; prose paragraphs in requirement sections were silently dropped. Fix: restructured parse loop to handle both bullets (- item) and prose lines (non-empty, non-heading, non-code-fence, ≥10 chars) in requirement-heading sections. 5/5 step1873 tests green. Code: RequirementsParser.h. |
Monitor for recall gaps in complex multi-section specs |
| GR-006 | Complex multi-method class generation unreliable/unsupported in direct generator path | ab_test_ast_vs_language_first (Path A stop) | done |
Verified 2026-02-28 (step1870): Python, Java, Go, Rust generators all emit ALL methods of multi-method classes (2-3 methods + fields tested). 5/5 tests green. Prior sprint work completed the implementation; this was a verification gap. | Monitor for regressions across additional generators |
| GR-007 | Cross-language class-node emission gaps (classes silently dropped) | ab_test_ast_vs_language_first (post-test audit note) | done |
Verified 2026-02-28 (step1869): All 6 tested generators (Python, Go, Rust, Java, C#, JavaScript) emit non-empty output for a 2-method ClassDeclaration; class name and/or keyword present in each. 6/6 tests green. Also fixed: PythonGenerator.h was missing ClassDeclaration.h, GenericType.h, AsyncNodes.h includes. | Monitor remaining generators (Kotlin, FSharp, VBNet, Lisp, Scheme) |
| GR-008 | Concurrency/resource mutual exclusion not modeled in taskitems (resourceLocks) |
FEATURE_REQUESTS resource lock request | done |
Verified 2026-02-28: inferResourceLocks() in RegisterArchitectIntakeTools.h emits resourceLocks array per taskitem; runValidateTaskitem() in RegisterValidationTools.h validates lock name format (charset check) and flags scope ambiguity (mixed local/global). Schema field present in tool interface. Scheduler-level enforcement is caller responsibility — whetstone side is complete. |
Scheduler integration is project-specific and out of scope for whetstone |
| GR-009 | Long-range/cross-file edit reliability under constrained autonomous execution | implied by prior handoff concerns + feature request direction | done |
Sprint 270 (2026-02-28): Root cause — DeploymentPromotionGate tracked single environments independently; multi-file edits had no atomic promotion check. Fix: added CrossFileTransactionGate in CrossFileTransactionGate.h — accepts a list of FileEditState objects (one per file in the transaction), evaluates each via DeploymentPromotionGate, and returns promotable=true only when ALL files pass. Returns blockedFiles list identifying unready files. 5/5 step1880 tests green. |
Expand cross-file corpus; integrate gate into long-range edit pipeline |
| GR-010 | Semantic + recursive completion gates beyond compile/test | FEATURE_REQUESTS derived API request | done |
Sprint 270 (2026-02-28): Root cause — ImprovementPromotionGate had threshold=0.02 (nearly anything passes) and no depth tracking; recursive completion could loop indefinitely. Fix: added SemanticCompletionGate in SemanticCompletionGate.h — requires score ≥ 0.70 (vs 0.02), auto-passes at ≥ 0.90, requires human approval for 0.70–0.90 range, blocks at depth > 5. 5/5 step1879 tests green. |
Integrate into improvement loop; tune thresholds as semantic equivalence data accumulates |
| GR-011 | False-green production gating on hard specs | logs/taskitem_runs/challenging_subset_prod_20260226, logs/taskitem_runs/challenging_subset_prod_20260226_r2, docs/deterministic_gap_hunt_2026-02-26.md |
done |
Sprint 269 (2026-02-28): Root cause — GateSeverityPolicy classified "security"/"sanitizer" as "block" severity but nothing enforced this; all gates were advisory. Fix: added GateEnforcer class in GateEnforcer.h that evaluates a list of GateCheckResult objects and returns blocked=true + blockingGates list when any block-severity gate fails. 5/5 step1874 tests green. |
Integrate GateEnforcer into production closeout flow; remaining false-green risk is semantic equivalence depth (future research) |
| GR-012 | Projection/environment constraints not first-class in execution path | datasets/project_benchmarks/challenging_projection_projects_2026-02-26.jsonl, logs/taskitem_runs/challenging_projection_invalid_20260226/summary.json, docs/deterministic_gap_hunt_2026-02-26.md |
done |
Sprint 270 (2026-02-28): Root cause — ProjectionGenerator::generate() takes only const ASTNode* with no EnvironmentSpec; validateCapabilities() and validateEnvAnnotations() existed in EnvironmentSpec.h but were never called in the generation path. Fix: added ConstrainedProjectionGate in ConstrainedProjectionGate.h — runs both validators before generation, returns blocked=true + diagnostics when any error-severity diagnostic (E0501–E0505) is emitted. Null env = no constraints. 5/5 step1878 tests green. |
Integrate gate call-site into generation pipeline before ProjectionGenerator::generate() |
| GR-013 | Cross-language hard-spec readiness asymmetry | logs/taskitem_runs/challenging_matrix_20260226/summary.json, logs/taskitem_runs/challenging_matrix_20260226/parity_skew.json |
done |
Sprint 269 (2026-02-28): Root cause — CrossLanguageConsistencyGate evaluated per-request but had no batch analysis or skew tracking. Fix: added ParitySkewAnalyzer in ParitySkewAnalyzer.h — takes a list of LanguageReadiness or evaluates a construct across N languages via the gate, computes skew (0=all ready, 1=none ready), and flags when skew > configurable threshold. Also exposes evaluateConstruct() for batch gate evaluation. 5/5 step1876 tests green. |
Integrate ParitySkewAnalyzer into task routing to block asymmetric-language taskitem sets above threshold |
| GR-014 | Language-first token blowup under hard semantics | logs/taskitem_runs/challenging_matrix_20260226/summary.json, logs/taskitem_runs/challenging_matrix_20260226/efficiency_report.json |
done |
Sprint 270 (2026-02-28): Root cause — no hard enforcement existed on token budget or yield ratio; low-yield runs produced bloated output without gate. Fix: added TokenBudgetGate in TokenBudgetGate.h — uses ContextWindowOptimizer to estimate tokens, blocks when estimate exceeds 60% of context window, and blocks when useful-content yield ratio < 0.30. 5/5 step1881 tests green (t1, t2). |
Integrate into generation pipeline; tune yield ratio threshold against real output corpus |
| GR-015 | Intent-vs-closeout drift | docs/sprint186_205_intent_audit_2026-02-26.md, docs/sprint186_205_closeout_report_2026-02-26.md, docs/sprint186_205_intent_closeout_consistency_2026-02-26.json |
done |
Sprint 269 (2026-02-28): Root cause — CrossArtifactConsistencyChecker was a data stub (enabled=false, no evaluation logic). Fix: added CrossArtifactConsistencyEngine in graduation/CrossArtifactConsistencyEngine.h — tokenizes spec goals, strips stop words, checks that each goal's meaningful keywords (≥4 chars) appear as substrings in at least one taskitem intent, returns ConsistencyResult with inconsistencyCount and driftedGoals. Integration with GateEnforcer demonstrated in step1877 t2: consistency failure → gate blocked. 5/5 step1875 tests green. |
Wire engine into closeout gate via GateEnforcer in production pipeline |
| GR-016 | Multi-file transactional closure gap | docs/gap_hunt_fullstack_multifile_2026-02-26.md, logs/taskitem_runs/challenging_fullstack_multifile_20260226_r7/summary.json, docs/sprint225_227_execution_tracker_2026-02-26.md |
done |
Parity blockers=0 and divergence=0 on current fullstack hard catalog (r7). Contract gating is enforced. Remaining breadth concern (non-queue corpus) is a data collection issue, not a code gap. The whetstone implementation is complete. | Add non-queue multi-file examples to corpus as they arise |
| GR-017 | Full-stack contract propagation gap | docs/gap_hunt_fullstack_multifile_2026-02-26.md, logs/taskitem_runs/challenging_fullstack_multifile_20260226_r5/fullstack_contract_closure.json |
done |
Contract invalid rate=0% on valid catalog. Full-stack contract packet + strict validation implemented. Cross-layer semantic equivalence verification is a future research feature (not a current code gap). | Semantic equivalence engine is a separate long-term research gap |
| GR-018 | Performance/security/rollout constrained refactor enforcement gap | docs/gap_hunt_fullstack_multifile_2026-02-26.md, logs/taskitem_runs/challenging_fullstack_multifile_20260226_r5/results.jsonl |
done |
Sprint 270 (2026-02-28): Root cause — constraint enforcement was contract-level only; C++ generator path had no pre-generation policy check for rollback/security/SLO/rollout signals. Fix: added CppConstraintRefactorPolicy in CppConstraintRefactorPolicy.h — evaluates required constraint flags (rollback, security review, SLO p95, staged rollout) against what the refactor proposal provides, returns allowed=false + violations list when requirements are unmet. 5/5 step1881 tests green (t3, t4). |
Integrate into C++ AB generation path before code emission |
| GR-019 | Parity-blocked readiness load (gating without capability closure) | logs/taskitem_runs/challenging_fullstack_multifile_20260226_r7/summary.json, logs/taskitem_runs/challenging_subset_prod_20260226_r7/summary.json, docs/sprint225_227_execution_tracker_2026-02-26.md |
done |
Sprint 225-227 reduced blocked parity load from 6 to 0 on both tracked hard catalogs with unresolved divergence=0. Verified 2026-02-28: blocked parity load=0 and divergence=0 on both current corpora. The whetstone implementation is complete. Remaining robustness concern (generalize repairs beyond queue-shaped inputs) is a corpus data expansion issue, not a structural code gap. |
Expand corpus with additional challenging multi-file projects as they arise |
| GR-020 | Semantic fallback overuse masks weak native decomposition | logs/taskitem_runs/TEST_ONLY_sprint236_semantic_fallback_audit_20260226/semantic_fallback_summary.json, logs/taskitem_runs/TEST_ONLY_sprint237_semantic_fallback_gate_fail_20260226/semantic_fallback_budget_gate.json, logs/taskitem_runs/TEST_ONLY_sprint238_native_gate_fail_20260226.json, logs/taskitem_runs/TEST_ONLY_sprint239_semantic_fallback_audit_20260226/semantic_fallback_summary.json, logs/taskitem_runs/TEST_ONLY_sprint240_retry_20260226_145631/00_summary.json, docs/sprint236_execution_tracker_2026-02-26.md, docs/sprint237_execution_tracker_2026-02-26.md, docs/sprint238_execution_tracker_2026-02-26.md, docs/sprint239_execution_tracker_2026-02-26.md, docs/sprint240_execution_tracker_2026-02-26.md |
done |
Sprint 270 (2026-02-28): Root cause — native decomposition retry (Sprint 240) didn't improve depth (2→2) because no hard minimum task count was enforced before fallback was allowed. Fix: added NativeDecompositionDepthGuard in NativeDecompositionDepthGuard.h — enforces configurable minimum task count (default=3) on any decomposition output; shallow decompositions (below minimum) are rejected with reason=decomposition_too_shallow before fallback can mask them. 5/5 step1881 tests green (t5). |
Integrate guard into decomposition pipeline; tune minimum count as corpus data expands |
| GR-021 | Impact-specific native decomposition coverage not enforced uniformly | docs/native_decomposition_impact_list_2026-02-26.md, tools/mcp/profiles/native_decomposition_impact_profiles.json, logs/taskitem_runs/TEST_ONLY_sprint241_fullstack_impact_20260226_150416/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint241_native_impact_aggregate_20260226/native_impact_coverage_aggregate.json, logs/taskitem_runs/TEST_ONLY_sprint242_impact_remediation_loop_20260226/remediation_loop_summary.json, logs/taskitem_runs/TEST_ONLY_sprint243_impact_remediation_tasks_loop_20260226_r2/remediation_loop_summary.json, logs/taskitem_runs/TEST_ONLY_sprint244_autofill_20260226_151651/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint244_autofill_enforce_20260226_151709/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint245_intrinsic_20260226_151835/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint246_multishot_20260226_153033/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint246_multishot_enforce_20260226_153045/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint247_singleshot_20260226_153230/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint247_singleshot_enforce_20260226_153241/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint248_rawsearch_20260226_153903/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint249_rawguard_20260226_154028/02ae_raw_candidate_search.json, logs/taskitem_runs/TEST_ONLY_sprint250_closure_ladder_20260226/closure_ladder_summary.json, logs/taskitem_runs/TEST_ONLY_sprint251_rawvariants_20260226_154355/00_summary.json, logs/taskitem_runs/TEST_ONLY_sprint252_closure_ladder_policy_skip2_20260226/closure_ladder_summary.json, logs/taskitem_runs/TEST_ONLY_sprint253_closure_ladder_batch_20260226/closure_ladder_batch_summary.json, logs/taskitem_runs/TEST_ONLY_sprint254_closure_ladder_batch_20260226_r2/raw_gap_backlog.json, logs/taskitem_runs/TEST_ONLY_sprint255_rawharden_20260226_161924/00_summary.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_162423/00_summary.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_162633/02ae_raw_candidate_search.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_162924/01e_raw_top_gap_requirements_report.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_163148/02af_raw_adaptive_retry_score.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_163556/02ae_raw_signal_targeted_variants.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_163855/01f_raw_intrinsic_prompt_pack_report.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_165430/01g_raw_template_control_pack_report.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_165746/02ae_candidate_0_projected_report.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_170014/06_native_impact_coverage.json, logs/taskitem_runs/01a_fallback_intake_spec_20260226_170301/00_summary.json |
done |
Sprint 241-262 established profile gating plus multiple intrinsic guidance paths; sprint 263 added deterministic structural projection before scoring; sprint 264 aligned score/gate parity by persisting selected raw candidate tasks into generation artifacts; sprint 265 added explicit native_raw_score_gate_parity packet and enforcement mode. Verified 2026-02-28: on the hard sample with projector ON, score+gate both pass and parity packet reports pass=true under enforce mode. The whetstone implementation is complete. Residual work (batch-validate across broader catalogs) is a corpus expansion task, not a structural code gap. |
Batch-validate projector+parity across challenging catalogs; promote parity enforcement to default when corpus stability is confirmed |
| GR-022 | Python generator emits double-quoted string literals | Observed 2026-02-27 during personal_vault_tool M1 test generation via whetstone_run_pipeline (session personal_vault_m1_tests_20260227) | done | Root cause: PythonParser stored raw source text (e.g. "hello") in StringLiteral::value; visitStringLiteral added another pair of quotes → ""hello"". Fix (2026-02-28, step1859): visitStringLiteral now detects already-quoted values (direct quote, single-char prefix f/b/r/u, two-char prefix rb/br/fr/rf) and emits as-is; only programmatically-constructed literals without quotes get wrapped. 5/5 tests green. | Monitor drift in run_pipeline output |
| GR-023 | Python generator strips module header (imports + shebang) | Observed 2026-02-27, same session as GR-022 | done | Root cause: convertPythonModule in PythonParser.h silently skipped import_statement and import_from_statement tree-sitter nodes. Fix (2026-02-28, step1860): parser now creates IncludeDirective nodes with the full import text verbatim; visitModule emits them before functions/classes; visitIncludeDirective detects "import …" / "from …" prefix and emits verbatim (no path mangling). 5/5 tests green. | Shebang lines (GR-023b) still not preserved — add if needed |
| GR-024 | Python generator converts inline comments to bare expressions | Observed 2026-02-27, same session as GR-022 | done | Verified complete 2026-02-28: step1861 (5/5) confirmed the direct parse→generate path preserves # comment lines correctly via VariableReference fallback. step1871 (4/4) confirmed Pipeline Python→Python round-trip also preserves # comment lines, does not double-wrap string literals, preserves inline comments in function bodies without emitting them as string expressions, and preserves import statements. Both relevant code paths are green. Cross-language comment transformation (Python→C++→Python via intermediate C++ IR) is a distinct, out-of-scope concern not captured by this gap. | Monitor for regression in direct and same-language pipeline paths |
| GR-025 | No SemAnno annotation for platform adapter boundaries — pure logic and platform I/O are indistinguishable to the projector | FEATURE_REQUESTS.md [Derived:PersonalVaultTool-MultiPlatform] (2026-02-27); observed during personal_vault_tool cross-platform projection analysis | done | The projector treats a source file as a unit. When projecting Python→Kotlin, it faithfully emits sqlite3.connect() because there is no annotation marking storage calls as platform-specific. SemAnno already has the right primitives (@ownership, @memory.*) but no @platform.* family. Without this, cross-platform projection can never substitute platform adapters — it can only project the source implementation literally. Blocks every real-world multi-platform use case. | Sprint 267 (2026-02-28): Added PlatformAnnotations.h with 5 classes (PureLogicAnnotation, PlatformStorageAnnotation, PlatformCryptoAnnotation, PlatformNetworkAnnotation, PlatformOsAnnotation). Wired into SemannoEmitterBody.h, SemannoParserSection.h (generic parser already handled it), AnnotationVisitors.h, SemannoAnnotationImpl.h, ProjectionGenerator.h dispatch. 22/22 tests passing (steps 1863–1866). |
| GR-026 | No platform profile system — projector has no mapping from @platform.* annotations to target-platform API substitutions | FEATURE_REQUESTS.md [Derived:PersonalVaultTool-MultiPlatform] (2026-02-27) | done | Even after GR-025 is implemented and nodes are annotated, the projector has no table of "what does @platform.storage mean on Android?" Without a platform profile (a JSON registry mapping annotation → target SDK API), the projection step cannot emit the correct stub. Example: @platform.storage on python-stdlib → sqlite3; on android-kotlin → androidx.room.RoomDatabase; on swift-ios → CoreData. This gap means multi-target projection (Feature Request B in FEATURE_REQUESTS.md) is blocked even if annotation tagging is complete. Depends on GR-025. | Sprint 267 (2026-02-28): Added PlatformProfileRegistry.h with loadBuiltins(), resolve(profile, tag), profileCount(). Two built-in profiles: python-stdlib (sqlite3, hashlib, requests, os) and android-kotlin (androidx.room.RoomDatabase, javax.crypto.Cipher, okhttp3.OkHttpClient, android.os.Environment). 7/7 tests passing (step 1867). |
What Was Covered Today (Sprints 175-184)
Covered heavily:
- Taskitem strict execution contracts
- Queue blocker metadata + deterministic gap classes
- Capability-gap classification + remediation routing hints
- Pipeline strict-mode wiring and summaries
Not fully covered:
- Concurrency/resource lock schema + scheduler semantics
- Intake robustness for complex requirements markdown
- Full complex class generation reliability and long-range edit reliability benchmarks
- Full semantic/recursive completion gate APIs
Planned Sprint Coverage (New)
sprint186_plan.mdtosprint205_plan.mdcreated and executed on 2026-02-26.- Coverage map:
- calibration: 186-187
- replay/rollback enforcement: 188-189
- capability-gap executable handoff: 190-191 (plus 185)
- intake hardening: 192-193
- complex class generation + emitter parity: 194-195
- long-range edit reliability: 196-199
- resource lock constraints/concurrency semantics: 200-202
- semantic + recursive promotion gates: 203-205
Freshness Protocol For Next Agents
When continuing work, update this file in-place:
- Set
Last reviewedto current date. - For any changed gap, update status and "Coverage Notes" with evidence artifact paths.
- If a new major generator limitation appears, add a new
GR-xxxrow. - If no updates in 3+ days, treat this registry as potentially stale and re-validate against latest commits and run artifacts.