Add native decomposition quality gate to pipeline (sprint 238)
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`
|
||||
|
||||
Planning runtime controls (active):
|
||||
- `sprint232_plan.md` to `sprint237_plan.md`
|
||||
- `sprint232_plan.md` to `sprint238_plan.md`
|
||||
- semantic bridge + intake augmentation + requirement injection + expansion gating are wired into:
|
||||
- `tools/mcp/run_sprint_taskitem_pipeline.sh`
|
||||
- current policy default is native-first semantic fallback:
|
||||
@@ -160,3 +160,5 @@ Planning runtime controls (active):
|
||||
- fallback budget gating is available via:
|
||||
- `tools/mcp/check_semantic_fallback_budget.py`
|
||||
- `tools/mcp/run_semantic_fallback_budget_gate.sh`
|
||||
- native decomposition quality gate is available in pipeline summary/hard-fail path:
|
||||
- `native_decomposition_gate`
|
||||
|
||||
@@ -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-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-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`, `docs/sprint236_execution_tracker_2026-02-26.md`, `docs/sprint237_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. Current measured slice remains `fallback_rate=1.0`, so gating now detects but does not yet fix root capability gaps. | Native decomposition upgrade + semantic rationale enforcement |
|
||||
| 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`, `docs/sprint236_execution_tracker_2026-02-26.md`, `docs/sprint237_execution_tracker_2026-02-26.md`, `docs/sprint238_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. Current measured slice still shows weak native decomposition (`2 tasks`, `0 semantic signals`) and needs generator-quality uplift to close. | Native decomposition upgrade + semantic rationale enforcement |
|
||||
|
||||
## What Was Covered Today (Sprints 175-184)
|
||||
|
||||
|
||||
@@ -147,3 +147,16 @@
|
||||
- Dated pass/fail artifacts captured:
|
||||
- fail (strict budget): `logs/taskitem_runs/TEST_ONLY_sprint237_semantic_fallback_gate_fail_20260226/semantic_fallback_budget_gate.json`
|
||||
- pass (relaxed budget): `logs/taskitem_runs/TEST_ONLY_sprint237_semantic_fallback_gate_pass_20260226/semantic_fallback_budget_gate.json`
|
||||
|
||||
## Sprint 238 Added (Same Day)
|
||||
|
||||
- Added native decomposition quality gate directly in pipeline:
|
||||
- `WSTONE_NATIVE_DECOMP_HARD_GATE`
|
||||
- `WSTONE_NATIVE_TASK_MIN_COUNT`
|
||||
- `WSTONE_NATIVE_SEMANTIC_SIGNAL_MIN`
|
||||
- Added run artifact and summary packet:
|
||||
- `02b_native_decomposition_gate.json`
|
||||
- `native_decomposition_gate`
|
||||
- Dated gate verification artifacts:
|
||||
- fail packet: `logs/taskitem_runs/TEST_ONLY_sprint238_native_gate_fail_20260226.json`
|
||||
- pass packet: `logs/taskitem_runs/TEST_ONLY_sprint238_native_gate_pass_20260226.json`
|
||||
|
||||
28
docs/sprint238_execution_tracker_2026-02-26.md
Normal file
28
docs/sprint238_execution_tracker_2026-02-26.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Sprint 238 Execution Tracker - 2026-02-26
|
||||
|
||||
## Scope
|
||||
- `sprint238_plan.md`
|
||||
|
||||
## Implemented
|
||||
|
||||
Pipeline updates in `tools/mcp/run_sprint_taskitem_pipeline.sh`:
|
||||
- Added native decomposition gate controls:
|
||||
- `WSTONE_NATIVE_DECOMP_HARD_GATE` (default `0`)
|
||||
- `WSTONE_NATIVE_TASK_MIN_COUNT` (default `0`)
|
||||
- `WSTONE_NATIVE_SEMANTIC_SIGNAL_MIN` (default `0`)
|
||||
- Added gate artifact output:
|
||||
- `02b_native_decomposition_gate.json`
|
||||
- Added summary packet:
|
||||
- `native_decomposition_gate`
|
||||
- Added hard-fail behavior when enabled and thresholds are not met.
|
||||
|
||||
## Baseline Gate Artifacts
|
||||
|
||||
- expected fail gate packet:
|
||||
- `logs/taskitem_runs/TEST_ONLY_sprint238_native_gate_fail_20260226.json`
|
||||
- expected pass gate packet:
|
||||
- `logs/taskitem_runs/TEST_ONLY_sprint238_native_gate_pass_20260226.json`
|
||||
|
||||
## Explicit Completion Signal
|
||||
|
||||
- Sprint 238: `DONE` (implemented + hard-fail/pass smoke verified)
|
||||
6
editor/src/Sprint238IntegrationSummary.h
Normal file
6
editor/src/Sprint238IntegrationSummary.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
// Sprint 238 integration summary:
|
||||
// - Added native decomposition quality gate with optional hard-fail mode.
|
||||
// - Gate checks min native task count and semantic signal count before fallback.
|
||||
// - Pipeline now emits a native decomposition gate artifact and summary packet.
|
||||
11
sprint238_plan.md
Normal file
11
sprint238_plan.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Sprint 238 Plan: Native Decomposition Quality Gate
|
||||
|
||||
## Goal
|
||||
Detect and optionally block weak native decomposition before semantic fallback hides generation deficiencies.
|
||||
|
||||
## Steps
|
||||
- Step 2233: Add native decomposition gate packet to pipeline summary.
|
||||
- Step 2234: Support configurable minimum native task count and semantic signal count.
|
||||
- Step 2235: Add optional hard-fail mode for gate violations.
|
||||
- Step 2236: Persist gate artifact for every pipeline run.
|
||||
- Step 2237: Add `Sprint238IntegrationSummary.h` and execution tracker.
|
||||
@@ -33,6 +33,9 @@ SEMANTIC_COVERAGE_GATE="${WSTONE_SEMANTIC_COVERAGE_GATE:-0}"
|
||||
SEMANTIC_MIN_COVERAGE="${WSTONE_SEMANTIC_MIN_COVERAGE:-0.9}"
|
||||
SEMANTIC_REQUIRE_CAPS_FOR_COMPLEX="${WSTONE_SEMANTIC_REQUIRE_CAPS_FOR_COMPLEX:-1}"
|
||||
SEMANTIC_MIN_COMPLEXITY_SCORE="${WSTONE_SEMANTIC_MIN_COMPLEXITY_SCORE:-2}"
|
||||
NATIVE_DECOMP_HARD_GATE="${WSTONE_NATIVE_DECOMP_HARD_GATE:-0}"
|
||||
NATIVE_TASK_MIN_COUNT="${WSTONE_NATIVE_TASK_MIN_COUNT:-0}"
|
||||
NATIVE_SEMANTIC_SIGNAL_MIN="${WSTONE_NATIVE_SEMANTIC_SIGNAL_MIN:-0}"
|
||||
CAPABILITY_SIGNALS_JSON="${WSTONE_CAPABILITY_SIGNALS_JSON:-}"
|
||||
if [[ -z "$CAPABILITY_SIGNALS_JSON" ]]; then
|
||||
CAPABILITY_SIGNALS_JSON='{}'
|
||||
@@ -84,6 +87,7 @@ SEMANTIC_AUGMENT_JSON='{}'
|
||||
SEMANTIC_REQUIREMENT_INJECTION_JSON='{}'
|
||||
SEMANTIC_TASK_EXPANSION_JSON='{}'
|
||||
SEMANTIC_GATE_JSON='{}'
|
||||
NATIVE_DECOMP_GATE_JSON='{}'
|
||||
if [[ "$SEMANTIC_PLANNING_BRIDGE" == "1" ]]; then
|
||||
python3 "$ROOT_DIR/tools/mcp/markdown_to_semantic_annotations.py" \
|
||||
--spec "$INPUT_FILE" \
|
||||
@@ -288,6 +292,40 @@ fi
|
||||
TASKS="$(printf '%s' "$GEN_JSON" | jq '.tasks')"
|
||||
native_task_count="$(printf '%s' "$TASKS" | jq 'length')"
|
||||
native_semantic_signal_count="$(printf '%s' "$TASKS" | jq '[.[] | ((.reasons // [])[]? | tostring) | select(test("semantic|risk|contract|capability"; "i"))] | length')"
|
||||
native_task_count_ok="true"
|
||||
native_semantic_signal_ok="true"
|
||||
if [[ "$native_task_count" -lt "$NATIVE_TASK_MIN_COUNT" ]]; then
|
||||
native_task_count_ok="false"
|
||||
fi
|
||||
if [[ "$native_semantic_signal_count" -lt "$NATIVE_SEMANTIC_SIGNAL_MIN" ]]; then
|
||||
native_semantic_signal_ok="false"
|
||||
fi
|
||||
native_gate_passed="true"
|
||||
if [[ "$native_task_count_ok" != "true" || "$native_semantic_signal_ok" != "true" ]]; then
|
||||
native_gate_passed="false"
|
||||
fi
|
||||
NATIVE_DECOMP_GATE_JSON="$(jq -nc \
|
||||
--argjson enabled "$([[ "$NATIVE_DECOMP_HARD_GATE" == "1" ]] && echo true || echo false)" \
|
||||
--argjson passed "$([[ "$native_gate_passed" == "true" ]] && echo true || echo false)" \
|
||||
--argjson native_task_count "$native_task_count" \
|
||||
--argjson native_semantic_signal_count "$native_semantic_signal_count" \
|
||||
--argjson min_task_count "$NATIVE_TASK_MIN_COUNT" \
|
||||
--argjson min_semantic_signal_count "$NATIVE_SEMANTIC_SIGNAL_MIN" \
|
||||
'{
|
||||
enabled:$enabled,
|
||||
passed:$passed,
|
||||
native_task_count:$native_task_count,
|
||||
native_semantic_signal_count:$native_semantic_signal_count,
|
||||
min_task_count:$min_task_count,
|
||||
min_semantic_signal_count:$min_semantic_signal_count
|
||||
}')"
|
||||
printf '%s\n' "$NATIVE_DECOMP_GATE_JSON" > "$OUT_DIR/02b_native_decomposition_gate.json"
|
||||
if [[ "$NATIVE_DECOMP_HARD_GATE" == "1" && "$native_gate_passed" != "true" ]]; then
|
||||
echo "error: native decomposition gate failed" >&2
|
||||
echo "error: see $OUT_DIR/02b_native_decomposition_gate.json" >&2
|
||||
exit 10
|
||||
fi
|
||||
|
||||
semantic_fallback_needed="false"
|
||||
if [[ "$SEMANTIC_TASK_EXPANSION_MODE" == "always" ]]; then
|
||||
semantic_fallback_needed="true"
|
||||
@@ -383,6 +421,7 @@ SUMMARY_JSON="$(jq -nc \
|
||||
--argjson semantic_intake_augment "$SEMANTIC_AUGMENT_JSON" \
|
||||
--argjson semantic_requirement_injection "$SEMANTIC_REQUIREMENT_INJECTION_JSON" \
|
||||
--argjson semantic_task_expansion "$SEMANTIC_TASK_EXPANSION_JSON" \
|
||||
--argjson native_decomposition_gate "$NATIVE_DECOMP_GATE_JSON" \
|
||||
--argjson intake "$INTAKE_JSON" \
|
||||
--argjson generated "$GEN_JSON" \
|
||||
--argjson queue "$QUEUE_JSON" \
|
||||
@@ -400,6 +439,7 @@ SUMMARY_JSON="$(jq -nc \
|
||||
semantic_intake_augment: $semantic_intake_augment,
|
||||
semantic_requirement_injection: $semantic_requirement_injection,
|
||||
semantic_task_expansion: $semantic_task_expansion,
|
||||
native_decomposition_gate: $native_decomposition_gate,
|
||||
intake: {
|
||||
success: ($intake.success // false),
|
||||
normalized_requirement_count: (($intake.normalizedRequirements // [])|length),
|
||||
|
||||
Reference in New Issue
Block a user