Files
whetstone_DSL/docs/generator_readiness_gap_registry_2026-02-26.md
Bill de5bdd358f Close all 26 generator readiness gaps (sprints 267-270)
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>
2026-02-28 22:28:41 -07:00

23 KiB
Raw Blame History

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.md
  • docs/ab_test_ast_vs_language_first_2026-02-25.md
  • FEATURE_REQUESTS.md
  • docs/sprint175_179_execution_tracker_2026-02-26.md
  • docs/sprint186_205_execution_tracker_2026-02-26.md

Status Legend

  • done: implemented and validated in code/tests for this scope
  • partial: implemented foundation, but not full production closure
  • open: 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.700.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 (E0501E0505) 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 18631866). | | 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-stdlibsqlite3; on android-kotlinandroidx.room.RoomDatabase; on swift-iosCoreData. 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.md to sprint205_plan.md created 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:

  1. Set Last reviewed to current date.
  2. For any changed gap, update status and "Coverage Notes" with evidence artifact paths.
  3. If a new major generator limitation appears, add a new GR-xxx row.
  4. If no updates in 3+ days, treat this registry as potentially stale and re-validate against latest commits and run artifacts.