M2: Freeze selector contracts and implementation plan #31
No reviewers
Labels
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
P1
P2
P3
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Creatidy/scarcity-router!31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "m2-selector-planning-gate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #30
What this is
The M2 planning gate: a documentation + architecture-contract change that freezes the minimum selector input contracts and decision boundaries before any M2 selector implementation. Per the issue, it intentionally implements nothing: no scarcity scoring, no capability ratings, no
selectCLI, no simulation, no blackout execution, no reset-credit handling code, no Artificial Analysis client, no provider health client, no compound workflow execution.Contracts frozen
docs/capability-model.md) — exactly four parts: task level L0–L5 (not a capability score; no "L4 ⇒ minimum 4" shortcut), explicit per-dimension capability minima (every specified minimum met, never averaged), typed hard constraints, and single-place profile expansion into those three parts. Explicit inputs may only tighten a profile; contradictions fail validation.1..5with routing rubric; missing/unknown is represented separately (UNKNOWN_CAPABILITY), never0 = unknown; unknown never silently passes sufficiency. Dimensions stay the current six; no orchestration or factuality dimension without demonstrated routing need.minimum_input_context_tokens,minimum_output_tokens,requires_tool_use,requires_vision,requires_reasoning_mode,required_provider,required_model,required_variant,privacy_constraint). No local/cloud constraints (D-017); no free-form constraint framework.provider/model/variantidentity separate from display name, quota bucket, provider aliases and model class; hard properties; context/output allowances; per-dimension ratings with provenance (source, source version/date, assessment date, confidence, rationale); explicit reviewable human override; capacity bindings. Initial catalog only: GPT-5.6 Luna, GPT-5.6 Sol, GLM-5.3, GLM-5.3-Flash. No ratings populated (M2c).capacity scopeconcept:(provider, scope_id)identifies one normalized scope; a model binds to one or more scopes; all applicable scopes participate; no optimistic single-scope selection. The v2window_idis diagnostic and selector code must never parse it for applicability. The first M2 implementation prerequisite is a new normalized capacity-contract version adding an explicit semanticCapacityWindow.scope_id(conceptual shape only here; no schema v3 in this PR, no production capacity class changes).balanced; a healthy short window never hides a critical weekly window; an unrelated bucket never penalizes a candidate; unknown applicability is explicit. No formula or thresholds yet (U-007).policy_blocked, neverunavailable, never rewrites telemetry) > direct capacity evidence > provider-native failure evidence > official public status (advisory degraded confidence only) > external benchmarks (catalog curation only).ReplenishmentState(provider,kind,available_count,details_known, optionalearliest_expiry,retrieved_at); no free-text titles/descriptions; no opaque credit IDs required.select(); required provenance fields for any future snapshot; API key stays server-side; no response hoarding.max_total_model_calls,max_legs,max_review_rounds,max_remediation_rounds,max_retries_per_leg,max_wall_clock_minutes; all finite/bounded, no unlimited sentinel; a compound recommendation without a complete valid budget is invalid; structural maxima forsingle/cascade/critique; never "review/fix until clean"; call-count and scope accounting explicit even when token cost is unknown.Also: HydraFusion positioning updated to the GitHub Copilot CLI Research Preview reality with the sharp distinction (it chooses and executes workflows; Scarcity Router decides which scarce capable resource or bounded plan to spend, without executing) and the roadmap now records the staged sequence M2a → M2b → M2c → M2d → M2e with later optional additions (health advisory, cached AA evidence, compound recommendations) explicitly non-blocking. The one stale M1 wording ("read-only subscription collectors") is corrected per D-018; M1 is not otherwise reopened.
Deliberately unresolved
Validation
uv sync --only-dev✅make check: 431 tests pass; basedpyright 0 errors, 0 warnings, 0 notes ✅git diff --check origin/mainclean;origin/main..HEADcontains exactly one commit; no merge commits ✅model-policy.jsonunchanged ✅Human merge gate: leaving this PR open and unmerged; M2a does not start before it is merged.
Single bounded remediation applied on top of reviewed head
9abac09(new head2451048).MERGE_BLOCKER resolved — ExecutionBudget numeric domain (D-022). The contract required a complete budget including
max_review_rounds,max_remediation_roundsandmax_retries_per_legwhile demanding every value be a finite positive integer, which made a hard upper bound of zero unrepresentable. The numeric domain is now frozen per field:Every value remains finite with a documented upper bound; still no unlimited sentinel, infinity,
null = unlimitedor omitted field = unlimited. Permission semantics are explicit: maxima are hard upper bounds, zero means not permitted by this recommendation (never unknown/missing/unlimited/invalid), and a prohibited phase is never encoded as an artificial budget of1. Illustrative budgets added forsingle(zero review/remediation/retry),cascade(escalation leg is a leg, not a review round) andcritique(positive maxima permitted, zero legal). D-022 carries an amendment note; no other contract changed.Changed files:
docs/selection-policy.md,docs/decisions.mdonly. Validation: 431 tests pass, basedpyright 0 errors / 0 warnings / 0 notes, no production code changes,model-policy.jsonunchanged, no merge commits. Ready for narrow final verification.