Add native decomposition retry telemetry path (sprint 240)
This commit is contained in:
@@ -150,7 +150,7 @@ Parallel planning tranche (active):
|
|||||||
- `logs/taskitem_runs/TEST_ONLY_spec_planning_baseline_20260226/deterministic_spec_readiness.json`
|
- `logs/taskitem_runs/TEST_ONLY_spec_planning_baseline_20260226/deterministic_spec_readiness.json`
|
||||||
|
|
||||||
Planning runtime controls (active):
|
Planning runtime controls (active):
|
||||||
- `sprint232_plan.md` to `sprint239_plan.md`
|
- `sprint232_plan.md` to `sprint240_plan.md`
|
||||||
- semantic bridge + intake augmentation + requirement injection + expansion gating are wired into:
|
- semantic bridge + intake augmentation + requirement injection + expansion gating are wired into:
|
||||||
- `tools/mcp/run_sprint_taskitem_pipeline.sh`
|
- `tools/mcp/run_sprint_taskitem_pipeline.sh`
|
||||||
- current policy default is native-first semantic fallback:
|
- current policy default is native-first semantic fallback:
|
||||||
@@ -165,3 +165,7 @@ Planning runtime controls (active):
|
|||||||
- native reason enrichment can inject semantic tags into native task reasons:
|
- native reason enrichment can inject semantic tags into native task reasons:
|
||||||
- `WSTONE_NATIVE_REASON_ENRICHMENT`
|
- `WSTONE_NATIVE_REASON_ENRICHMENT`
|
||||||
- `native_reason_enrichment`
|
- `native_reason_enrichment`
|
||||||
|
- native decomposition retry path can run second-pass task generation:
|
||||||
|
- `WSTONE_NATIVE_DECOMP_RETRY`
|
||||||
|
- `WSTONE_NATIVE_DECOMP_TARGET_MIN_TASKS`
|
||||||
|
- `native_decomposition_retry`
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ This is the canonical dated registry for "not production-ready" generator gaps.
|
|||||||
| 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` | `partial` | Full-stack contract packet + strict validation added in benchmark orchestration and summary aggregation. Contract invalid rate is `0%` on valid catalog, but cross-layer semantic consistency is not yet equivalence-verified. | Semantic propagation verifier sprint |
|
| 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` | `partial` | Full-stack contract packet + strict validation added in benchmark orchestration and summary aggregation. Contract invalid rate is `0%` on valid catalog, but cross-layer semantic consistency is not yet equivalence-verified. | Semantic propagation verifier sprint |
|
||||||
| 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` | `partial` | Hard checks now enforce migration rollback + data-loss policy, security deny-by-default, SLO p95 presence, and rollout staged+abort policy. Enforcement is contract-level; generator capability under these constraints is still weak in C++ AB path. | Constraint-aware generation follow-up |
|
| 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` | `partial` | Hard checks now enforce migration rollback + data-loss policy, security deny-by-default, SLO p95 presence, and rollout staged+abort policy. Enforcement is contract-level; generator capability under these constraints is still weak in C++ AB path. | Constraint-aware generation follow-up |
|
||||||
| 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` | `partial` | Sprint 225-227 reduced blocked parity load from `6` to `0` on both tracked hard catalogs while keeping unresolved divergence at `0`. This closes immediate safety debt for current corpora, but robustness is still contingent on pattern-driven repair classes. | Generalize repairs beyond queue-shaped transpile outputs |
|
| 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` | `partial` | Sprint 225-227 reduced blocked parity load from `6` to `0` on both tracked hard catalogs while keeping unresolved divergence at `0`. This closes immediate safety debt for current corpora, but robustness is still contingent on pattern-driven repair classes. | Generalize repairs beyond queue-shaped transpile outputs |
|
||||||
| 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`, `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` | `partial` | Sprint 236 added deterministic fallback-gap auditing with tool + constraint metadata. Sprint 237 added fallback-budget hard gate (`max-fallback-rate`) and produced expected fail/pass artifacts. Sprint 238 added native decomposition hard gate in pipeline (`min task count`, `min semantic signal count`) so weak native generation can be blocked before fallback masking. Sprint 239 added native reason enrichment and shifted root-cause mix in A/B slice (`native_semantic_signal_count 0 -> 6`), but native task depth remains shallow (`2`), so fallback still triggers. | Native decomposition task-depth upgrade (increase native task granularity beyond 2) |
|
| 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` | `partial` | Sprint 236 added deterministic fallback-gap auditing with tool + constraint metadata. Sprint 237 added fallback-budget hard gate (`max-fallback-rate`) and produced expected fail/pass artifacts. Sprint 238 added native decomposition hard gate in pipeline (`min task count`, `min semantic signal count`) so weak native generation can be blocked before fallback masking. Sprint 239 added native reason enrichment and improved semantic signal density (`0 -> 6`). Sprint 240 added native decomposition retry with explicit minimum-task policy; on current sample retry attempted but did not improve depth (`2 -> 2`). | Native decomposition task-depth upgrade (increase native task granularity beyond 2) |
|
||||||
|
|
||||||
## What Was Covered Today (Sprints 175-184)
|
## What Was Covered Today (Sprints 175-184)
|
||||||
|
|
||||||
|
|||||||
@@ -173,3 +173,15 @@
|
|||||||
- `logs/taskitem_runs/TEST_ONLY_sprint239_reason_enrich_20260226_145443/00_summary.json`
|
- `logs/taskitem_runs/TEST_ONLY_sprint239_reason_enrich_20260226_145443/00_summary.json`
|
||||||
- Dated fallback audit for this slice:
|
- Dated fallback audit for this slice:
|
||||||
- `logs/taskitem_runs/TEST_ONLY_sprint239_semantic_fallback_audit_20260226/semantic_fallback_summary.json`
|
- `logs/taskitem_runs/TEST_ONLY_sprint239_semantic_fallback_audit_20260226/semantic_fallback_summary.json`
|
||||||
|
|
||||||
|
## Sprint 240 Added (Same Day)
|
||||||
|
|
||||||
|
- Added native decomposition retry path:
|
||||||
|
- `WSTONE_NATIVE_DECOMP_RETRY`
|
||||||
|
- `WSTONE_NATIVE_DECOMP_TARGET_MIN_TASKS`
|
||||||
|
- summary packet: `native_decomposition_retry`
|
||||||
|
- A/B smoke artifacts:
|
||||||
|
- `logs/taskitem_runs/TEST_ONLY_sprint240_retry_20260226_145631/00_summary.json`
|
||||||
|
- `logs/taskitem_runs/TEST_ONLY_sprint240_retry_20260226_145632/00_summary.json`
|
||||||
|
- Current measured result:
|
||||||
|
- retry attempted but not applied (`2 -> 2` tasks), confirming remaining native decomposition depth gap.
|
||||||
|
|||||||
31
docs/sprint240_execution_tracker_2026-02-26.md
Normal file
31
docs/sprint240_execution_tracker_2026-02-26.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Sprint 240 Execution Tracker - 2026-02-26
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
- `sprint240_plan.md`
|
||||||
|
|
||||||
|
## Implemented
|
||||||
|
|
||||||
|
Pipeline updates in `tools/mcp/run_sprint_taskitem_pipeline.sh`:
|
||||||
|
- Added `WSTONE_NATIVE_DECOMP_RETRY` (default `1`).
|
||||||
|
- Added `WSTONE_NATIVE_DECOMP_TARGET_MIN_TASKS` (default `5`).
|
||||||
|
- Added retry artifacts when attempted:
|
||||||
|
- `02aa_generate_taskitems_retry_raw.ndjson.json`
|
||||||
|
- `02aa_generate_taskitems_retry.json`
|
||||||
|
- Added summary packet:
|
||||||
|
- `native_decomposition_retry`
|
||||||
|
|
||||||
|
## Baseline A/B Smoke
|
||||||
|
|
||||||
|
- retry enabled run:
|
||||||
|
- `logs/taskitem_runs/TEST_ONLY_sprint240_retry_20260226_145631/00_summary.json`
|
||||||
|
- retry disabled run:
|
||||||
|
- `logs/taskitem_runs/TEST_ONLY_sprint240_retry_20260226_145632/00_summary.json`
|
||||||
|
|
||||||
|
Observed behavior on current sample:
|
||||||
|
- retry attempted: `true`
|
||||||
|
- retry applied: `false`
|
||||||
|
- `initial_task_count=2`, `retry_task_count=2`
|
||||||
|
|
||||||
|
## Explicit Completion Signal
|
||||||
|
|
||||||
|
- Sprint 240: `DONE` (retry path implemented + telemetry verified)
|
||||||
6
editor/src/Sprint240IntegrationSummary.h
Normal file
6
editor/src/Sprint240IntegrationSummary.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Sprint 240 integration summary:
|
||||||
|
// - Added native decomposition retry path with decomposition-min-task policy prompt.
|
||||||
|
// - Retry is applied only when it improves native task count.
|
||||||
|
// - Pipeline now emits native decomposition retry telemetry.
|
||||||
11
sprint240_plan.md
Normal file
11
sprint240_plan.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Sprint 240 Plan: Native Decomposition Retry Path
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
Attempt a deterministic second-pass native decomposition before fallback expansion when initial native task depth is below target.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
- Step 2243: Add configurable native decomposition retry toggle and target minimum task count.
|
||||||
|
- Step 2244: Retry `whetstone_generate_taskitems` with explicit decomposition constraint.
|
||||||
|
- Step 2245: Apply retry result only when it improves native task count.
|
||||||
|
- Step 2246: Emit retry telemetry in pipeline summary.
|
||||||
|
- Step 2247: Add `Sprint240IntegrationSummary.h` and execution tracker.
|
||||||
@@ -37,6 +37,8 @@ NATIVE_DECOMP_HARD_GATE="${WSTONE_NATIVE_DECOMP_HARD_GATE:-0}"
|
|||||||
NATIVE_TASK_MIN_COUNT="${WSTONE_NATIVE_TASK_MIN_COUNT:-0}"
|
NATIVE_TASK_MIN_COUNT="${WSTONE_NATIVE_TASK_MIN_COUNT:-0}"
|
||||||
NATIVE_SEMANTIC_SIGNAL_MIN="${WSTONE_NATIVE_SEMANTIC_SIGNAL_MIN:-0}"
|
NATIVE_SEMANTIC_SIGNAL_MIN="${WSTONE_NATIVE_SEMANTIC_SIGNAL_MIN:-0}"
|
||||||
NATIVE_REASON_ENRICHMENT="${WSTONE_NATIVE_REASON_ENRICHMENT:-1}"
|
NATIVE_REASON_ENRICHMENT="${WSTONE_NATIVE_REASON_ENRICHMENT:-1}"
|
||||||
|
NATIVE_DECOMP_RETRY="${WSTONE_NATIVE_DECOMP_RETRY:-1}"
|
||||||
|
NATIVE_DECOMP_TARGET_MIN_TASKS="${WSTONE_NATIVE_DECOMP_TARGET_MIN_TASKS:-5}"
|
||||||
CAPABILITY_SIGNALS_JSON="${WSTONE_CAPABILITY_SIGNALS_JSON:-}"
|
CAPABILITY_SIGNALS_JSON="${WSTONE_CAPABILITY_SIGNALS_JSON:-}"
|
||||||
if [[ -z "$CAPABILITY_SIGNALS_JSON" ]]; then
|
if [[ -z "$CAPABILITY_SIGNALS_JSON" ]]; then
|
||||||
CAPABILITY_SIGNALS_JSON='{}'
|
CAPABILITY_SIGNALS_JSON='{}'
|
||||||
@@ -90,6 +92,7 @@ SEMANTIC_TASK_EXPANSION_JSON='{}'
|
|||||||
SEMANTIC_GATE_JSON='{}'
|
SEMANTIC_GATE_JSON='{}'
|
||||||
NATIVE_DECOMP_GATE_JSON='{}'
|
NATIVE_DECOMP_GATE_JSON='{}'
|
||||||
NATIVE_REASON_ENRICHMENT_JSON='{}'
|
NATIVE_REASON_ENRICHMENT_JSON='{}'
|
||||||
|
NATIVE_DECOMP_RETRY_JSON='{}'
|
||||||
if [[ "$SEMANTIC_PLANNING_BRIDGE" == "1" ]]; then
|
if [[ "$SEMANTIC_PLANNING_BRIDGE" == "1" ]]; then
|
||||||
python3 "$ROOT_DIR/tools/mcp/markdown_to_semantic_annotations.py" \
|
python3 "$ROOT_DIR/tools/mcp/markdown_to_semantic_annotations.py" \
|
||||||
--spec "$INPUT_FILE" \
|
--spec "$INPUT_FILE" \
|
||||||
@@ -292,6 +295,53 @@ if [[ "$(printf '%s' "$GEN_JSON" | jq -r '.success // false')" != "true" ]]; the
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
TASKS="$(printf '%s' "$GEN_JSON" | jq '.tasks')"
|
TASKS="$(printf '%s' "$GEN_JSON" | jq '.tasks')"
|
||||||
|
native_task_count_initial="$(printf '%s' "$TASKS" | jq 'length')"
|
||||||
|
if [[ "$NATIVE_DECOMP_RETRY" == "1" && "$native_task_count_initial" -lt "$NATIVE_DECOMP_TARGET_MIN_TASKS" ]]; then
|
||||||
|
RETRY_REQS="$(jq -nc --argjson base "$NORMALIZED_REQS" --arg min "$NATIVE_DECOMP_TARGET_MIN_TASKS" '
|
||||||
|
$base + [{
|
||||||
|
requirementId: "native-decomp-min-task-count",
|
||||||
|
kind: "constraint",
|
||||||
|
normalizedText: ("native decomposition policy: produce at least " + $min + " concrete taskitems with deterministic execution contracts"),
|
||||||
|
anchor: "pipeline_native_retry",
|
||||||
|
sourceLine: 0,
|
||||||
|
ambiguous: false
|
||||||
|
}]
|
||||||
|
')"
|
||||||
|
RETRY_GEN_ARGS="$(jq -nc --argjson nr "$RETRY_REQS" --argjson cf "$CONFLICTS" --arg strict "$STRICT_EXECUTION_CONTRACT" \
|
||||||
|
'{normalizedRequirements:$nr,conflicts:$cf,strictExecutionContract:($strict == "1")}')"
|
||||||
|
RETRY_GEN_RESP_RAW="$(call_tool "whetstone_generate_taskitems" "$RETRY_GEN_ARGS")"
|
||||||
|
printf '%s\n' "$RETRY_GEN_RESP_RAW" > "$OUT_DIR/02aa_generate_taskitems_retry_raw.ndjson.json"
|
||||||
|
RETRY_GEN_JSON="$(extract_tool_text_json "$RETRY_GEN_RESP_RAW")"
|
||||||
|
printf '%s\n' "$RETRY_GEN_JSON" > "$OUT_DIR/02aa_generate_taskitems_retry.json"
|
||||||
|
retry_success="$(printf '%s' "$RETRY_GEN_JSON" | jq -r '.success // false')"
|
||||||
|
retry_task_count="$(printf '%s' "$RETRY_GEN_JSON" | jq '.tasks | length')"
|
||||||
|
if [[ "$retry_success" == "true" && "$retry_task_count" -gt "$native_task_count_initial" ]]; then
|
||||||
|
GEN_JSON="$RETRY_GEN_JSON"
|
||||||
|
TASKS="$(printf '%s' "$GEN_JSON" | jq '.tasks')"
|
||||||
|
NATIVE_DECOMP_RETRY_JSON="$(jq -nc \
|
||||||
|
--argjson attempted true \
|
||||||
|
--argjson applied true \
|
||||||
|
--argjson initial_task_count "$native_task_count_initial" \
|
||||||
|
--argjson retry_task_count "$retry_task_count" \
|
||||||
|
--argjson target_min_task_count "$NATIVE_DECOMP_TARGET_MIN_TASKS" \
|
||||||
|
'{attempted:$attempted, applied:$applied, initial_task_count:$initial_task_count, retry_task_count:$retry_task_count, target_min_task_count:$target_min_task_count}')"
|
||||||
|
else
|
||||||
|
NATIVE_DECOMP_RETRY_JSON="$(jq -nc \
|
||||||
|
--argjson attempted true \
|
||||||
|
--argjson applied false \
|
||||||
|
--argjson initial_task_count "$native_task_count_initial" \
|
||||||
|
--argjson retry_task_count "$retry_task_count" \
|
||||||
|
--argjson target_min_task_count "$NATIVE_DECOMP_TARGET_MIN_TASKS" \
|
||||||
|
'{attempted:$attempted, applied:$applied, initial_task_count:$initial_task_count, retry_task_count:$retry_task_count, target_min_task_count:$target_min_task_count}')"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
NATIVE_DECOMP_RETRY_JSON="$(jq -nc \
|
||||||
|
--argjson attempted false \
|
||||||
|
--argjson applied false \
|
||||||
|
--argjson initial_task_count "$native_task_count_initial" \
|
||||||
|
--argjson target_min_task_count "$NATIVE_DECOMP_TARGET_MIN_TASKS" \
|
||||||
|
'{attempted:$attempted, applied:$applied, initial_task_count:$initial_task_count, target_min_task_count:$target_min_task_count}')"
|
||||||
|
fi
|
||||||
if [[ "$NATIVE_REASON_ENRICHMENT" == "1" && -f "$OUT_DIR/01c_semantic_injected_requirements.json" ]]; then
|
if [[ "$NATIVE_REASON_ENRICHMENT" == "1" && -f "$OUT_DIR/01c_semantic_injected_requirements.json" ]]; then
|
||||||
TASKS="$(jq -nc \
|
TASKS="$(jq -nc \
|
||||||
--argjson tasks "$TASKS" \
|
--argjson tasks "$TASKS" \
|
||||||
@@ -459,6 +509,7 @@ SUMMARY_JSON="$(jq -nc \
|
|||||||
--argjson semantic_task_expansion "$SEMANTIC_TASK_EXPANSION_JSON" \
|
--argjson semantic_task_expansion "$SEMANTIC_TASK_EXPANSION_JSON" \
|
||||||
--argjson native_decomposition_gate "$NATIVE_DECOMP_GATE_JSON" \
|
--argjson native_decomposition_gate "$NATIVE_DECOMP_GATE_JSON" \
|
||||||
--argjson native_reason_enrichment "$NATIVE_REASON_ENRICHMENT_JSON" \
|
--argjson native_reason_enrichment "$NATIVE_REASON_ENRICHMENT_JSON" \
|
||||||
|
--argjson native_decomposition_retry "$NATIVE_DECOMP_RETRY_JSON" \
|
||||||
--argjson intake "$INTAKE_JSON" \
|
--argjson intake "$INTAKE_JSON" \
|
||||||
--argjson generated "$GEN_JSON" \
|
--argjson generated "$GEN_JSON" \
|
||||||
--argjson queue "$QUEUE_JSON" \
|
--argjson queue "$QUEUE_JSON" \
|
||||||
@@ -478,6 +529,7 @@ SUMMARY_JSON="$(jq -nc \
|
|||||||
semantic_task_expansion: $semantic_task_expansion,
|
semantic_task_expansion: $semantic_task_expansion,
|
||||||
native_decomposition_gate: $native_decomposition_gate,
|
native_decomposition_gate: $native_decomposition_gate,
|
||||||
native_reason_enrichment: $native_reason_enrichment,
|
native_reason_enrichment: $native_reason_enrichment,
|
||||||
|
native_decomposition_retry: $native_decomposition_retry,
|
||||||
intake: {
|
intake: {
|
||||||
success: ($intake.success // false),
|
success: ($intake.success // false),
|
||||||
normalized_requirement_count: (($intake.normalizedRequirements // [])|length),
|
normalized_requirement_count: (($intake.normalizedRequirements // [])|length),
|
||||||
|
|||||||
Reference in New Issue
Block a user