Private
Public Access
conductor(followup): code_path_audit_phase_2_20260624 - the actual followup + abort SSDL campaign
VERIFIED STATE OF MASTER a18b8ad6 (just measured):
- 751 Metadata consumers in src/
- 3,454 total branches
- 4.014e+22 effective codepaths (UNCHANGED from the 4.01e+22 baseline)
- 73 nil-check funcs in Metadata consumers (real SSDL measurement)
- 14 module globals still in src/ai_client.py (_anthropic_history + lock, etc.)
- MCP_TOOL_SPECS: list[dict[str, Any]] still in src/mcp_client.py
- src/ai_client.py:908 still uses old NormalizedResponse API (usage_input_tokens=...)
- 3 orphaned modules: mcp_tool_specs, openai_schemas, provider_state (exist, nothing imports)
- 4 pre-existing INTERNAL_OPTIONAL_RETURN violations in external_editor, session_logger, project_manager (NG1)
- 7 pre-existing Optional[T] return-type violations in mcp_client.py:1285,1289 + ai_client.py:159,247,619,673,3115 (NG2)
- audit_weak_types PASS, generate_type_registry PASS, audit_main_thread_imports PASS, audit_no_models_config_io PASS, audit_code_path_audit_coverage PASS, audit_exception_handling (baseline) PASS, audit_optional_in_3_files FAIL (NG2)
SSDL CAMPAIGN ABORT (premise was wrong):
- '6 nil-check functions' was a static text string in src/code_path_audit_gen.py:108, not a runtime measurement
- SSDL detector finds 0 Metadata-typed nil-checks
- The 1 function Tier 2 migrated (_build_files_section_from_items) was a 'path is None' check, NOT a Metadata nil-check
- The 4.01e22 combinatoric explosion is from dict[str, Any] type-dispatch, not nil-checks
- Salvage: NIL_METADATA = {} in src/aggregate.py + 5 tests stay as useful primitives
THE ACTUAL FIX: re-apply any_type_componentization_20260621's 48 call-site migrations
- Phase 1: mcp_tool_specs (8 sites) - 4 in mcp_client.py + 3 in ai_client.py + 1 in mcp_client.py:2747
- Phase 2: openai_schemas (17 sites) - 12 in openai_compatible.py + 5 in 3 send_* functions in ai_client.py; REMOVE the backward-compat __init__ from fix_test_failures_20260624
- Phase 3: provider_state (14 globals + ~27 callers) - 9 send_* functions use get_history('...') instead
- Phase 4: log_registry Session (7 sites)
- Phase 5: api_hooks WebSocketMessage (16 sites)
- Phase 6: NG1 fixups (4 INTERNAL_OPTIONAL_RETURN violations)
- Phase 7: NG2 fixups (7 Optional[T] return-type violations)
- Phase 8: Re-audit (measure new effective-codepaths; target < 1e+20)
- Phase 9: Verification + end-of-track report
VERIFICATION (10 VCs):
- VC1: 3 modules actually used by src/*.py (git grep >= 5 hits in src/, not just in plan/spec text)
- VC2: 14 module globals in src/ai_client.py gone
- VC3: MCP_TOOL_SPECS dict literal gone
- VC4: usage_input_tokens= in src/ai_client.py gone
- VC5: effective codepaths drops >= 2 orders of magnitude (target: 4.014e+22 -> < 1e+20)
- VC6: NG1 fixed (0 INTERNAL_OPTIONAL_RETURN violations)
- VC7: NG2 fixed (0 Optional[T] return-type violations)
- VC8: all 6 audit gates pass --strict
- VC9: 11/11 batched test tiers PASS
- VC10: end-of-track report written
5 files aborted, 5 files created (new track), 1 post-mortem doc.
This commit is contained in:
@@ -77,14 +77,18 @@ The behavioral SSDL test exists at `tests/test_code_path_audit_ssdl_behavioral.p
|
||||
|
||||
## Budget Gate Protocol
|
||||
|
||||
After each child commits:
|
||||
**REPLACED by Amendment 1 (post-child-1 finding). See `amendment_1_budget_gate_metric.md`.**
|
||||
|
||||
1. **Measure:** run `uv run python -c "from src.code_path_audit import AggregateProfile, ...; from src.code_path_audit_ssdl import compute_effective_codepaths; profile = ...; print(compute_effective_codepaths(profile, 'src'))"`
|
||||
2. **Compare:** diff vs prior measurement (or 4.01e22 baseline for child 1)
|
||||
3. **Gate:** if drop < expected threshold (10% / 20% / 30% per child), PAUSE the campaign and report to user
|
||||
4. **Continue:** if drop ≥ threshold, proceed to next child
|
||||
The original "X% drop in `compute_effective_codepaths(Metadata_profile)`" metric is **mathematically broken** for this codebase: the sum is dominated by the largest `2^N` terms, so removing 1 branch from a 10-branch function drops that function 50% but changes the total sum by < 1 part in 4e22. Child 1 measured -0.1% (within rounding error) despite a successful migration.
|
||||
|
||||
The measurement is captured in the child track's TRACK_COMPLETION report and rolled up into the campaign's end-of-campaign report.
|
||||
**The new metric** is a simple pattern count, testable with `git diff`:
|
||||
- **Child 1 (Nil Sentinel):** count of `is None` / `== None` / `!= None` patterns in Metadata-typed code paths **eliminated**
|
||||
- **Child 2 (Generational Handle):** count of lifetime-branch patterns in Metadata-typed code paths **eliminated** (e.g., `if entry.lifetime != current_lifetime: ...` replaced with `handle.registry_lookup() or NIL_METADATA`)
|
||||
- **Child 3 (Field Cache):** count of `entry.get('key', default)` and `entry['key']` patterns in Metadata-typed code paths **eliminated** (replaced with `cache.get(handle, 'key')`)
|
||||
|
||||
**The new gate per child:** all targeted patterns in the campaign's scope are eliminated (= 0 remaining after the migration). Tier 2 reports: "before N patterns, after 0 patterns, target met."
|
||||
|
||||
The measurement is captured in `docs/reports/campaign_measurements_20260624.md` (existing file, updated per child) and rolled up into the campaign's end-of-campaign report.
|
||||
|
||||
## Functional Requirements
|
||||
|
||||
|
||||
Reference in New Issue
Block a user