Tier Manager¶
tier_manager -- mvp.tier_manager
Cluster: Uncategorised | Type: component | MCP Tools: 10
Overview¶
The Tier Manager provides a single system-wide tier state with explicit user-controlled advancement. It bridges the gap between individual tier components (self_training, evoskill, formal_methods) and gives users visibility and control over which adaptation layer is active.
State is persisted to an Obsidian vault with YAML frontmatter, wikilinks, and human-readable markdown — consistent with G6's explicit reasoning thesis.
Operations¶
| Operation | Description |
|---|---|
get_status | Current tier state (tier, cap, pending advancement) |
propose_advance | Propose moving to the next tier (requires confirmation) |
confirm_advance | Confirm a pending tier advancement |
reject_advance | Reject a pending tier advancement |
cap_tier | Set maximum allowed tier (0-3) |
uncap_tier | Remove tier cap (restore T3) |
get_history | Read advancement history from vault |
audit_readiness | Check if system is ready for next tier |
describe_tier | Describe tier capabilities, components, current state, and readiness thresholds |
sync_vault | Force-sync state to Obsidian vault |
Tier Descriptions¶
| Tier | Name | Capability | Key Components |
|---|---|---|---|
| T0 | Fixed | Tool-calling — invoke any component, get a result | coder |
| T1 | Audit | Self-training audits quality, diagnoses failures, proposes fixes | coder, self_training, align_evals |
| T2 | Evolve | EvoSkill evolves skills, maintains Pareto frontier | coder, evoskill, adapt_optimisation |
| T3 | Theory | Formal verification, symbolic reasoning, meta-learning | coder, formal_methods, meta_programming, align_specs |
Advancement Rules¶
- T0 -> T1: Always ready. Just needs user confirmation.
- T1 -> T2: Requires >= 60% of components at maturity tier >= 3 (checked via
self_training.get_competence). - T2 -> T3: Requires non-empty Pareto frontier with at least one skill scoring >= 0.7 (checked via
evoskill.get_frontier). - Advancement is never automatic — the system proposes, the user confirms or rejects.
Vault Structure¶
tier-manager/
status.md # Current tier state (YAML frontmatter)
history/
2026-04-22-T0-to-T1.md # Advancement decisions
2026-04-23-rejected-T2.md # Rejected proposals
readiness/
2026-04-22-T1-audit.md # Readiness audit results
Each history note links back to [[status]] via wikilinks. The status note includes a Dataview query for recent history.
Surface Integration¶
MCP¶
get_status
assess_readiness target_tier=2 readiness='{"ready": false, "evidence_status": "failed_evidence"}'
audit_readiness
list_patterns
describe_tier
The dedicated MCP package is intentionally read-only for tier state: mutation operations (propose_advance, confirm_advance, reject_advance, cap_tier, uncap_tier, sync_vault) remain local-block-only and are surfaced as excluded operations by describe_tier / list_patterns.
REST¶
# Get current tier
curl http://localhost:8000/tier/status
# Propose advancement
curl -X POST http://localhost:8000/tier/advance \
-H "Content-Type: application/json" \
-d '{"action": "propose", "reason": "ready"}'
# Confirm
curl -X POST http://localhost:8000/tier/advance \
-H "Content-Type: application/json" \
-d '{"action": "confirm"}'
# Cap at T2
curl -X POST http://localhost:8000/tier/cap \
-H "Content-Type: application/json" \
-d '{"tier": 2}'
TUI¶
- Status bar: Shows current tier (T0-T3) with colour coding
tkey: Opens tier popup with status, history, advance/confirm/reject buttons, and cap controls
Source Files¶
| File | Purpose |
|---|---|
components/mvp/tier_manager/__init__.py | Exports |
components/mvp/tier_manager/schema.py | AdaptiveTier, TierState, TierInput, TierOutput |
components/mvp/tier_manager/tier_block.py | TierManagerBlock — operation dispatch and readiness logic |
components/mvp/tier_manager/agentic_runtime.py | Grounded readiness decisions, planner integration, and readiness floor |
components/mvp/tier_manager/agentic_evidence.py | Agentic evidence summary helper |
components/mvp/tier_manager/patterns.py | Applied agentic pattern inventory and executable/advisory distinctions |
components/mvp/tier_manager/skills.py | Tier-manager skill catalog and routing metadata |
components/mvp/tier_manager/vault_ops.py | Obsidian vault read/write helpers |
components/mvp/tier_manager/tier_manager_mcp/schema.py | Dedicated MCP input/output schema |
components/mvp/tier_manager/tier_manager_mcp/tier_manager_mcp_block.py | Dedicated read-only MCP dispatcher |
components/mvp/tier_manager/tier_manager_mcp/server.py | FastMCP tool registration for dedicated tier-manager tools |
See Also¶
- Adaptive Tiers (Bases Overview)
- EvoSkill — T2 skill evolution
- Formal Methods — T3 verification
- Theoretical Foundations — practopoiesis framework
Public API¶
TierManagerDecisionError(ValueError)¶
The LLM did not produce a usable, validated tier-readiness decision.
ReadinessDecision¶
Validated tier-advancement readiness-posture verdict.
| Field | Type | Default |
|---|---|---|
ready | bool | required |
baseline_ready | bool | required |
posture | str | required |
baseline_posture | str | required |
requires_review | bool | False |
degraded | bool | False |
llm_used | bool | False |
reasons | tuple[str, ...] | () |
rationale | str | '' |
raw_response | str | '' |
Methods:
escalated() -> bool¶
agentic_evidence() -> dict[str, Any]¶
to_dict() -> dict[str, Any]¶
TierManagerPlanner¶
Runtime-first facade with deterministic fallback + one-way posture clamp.
| Field | Type | Default |
|---|---|---|
runtime | TierManagerRuntime \| None | None |
last_decision | ReadinessDecision \| None | field(default=None, init=False) |
last_llm_used | bool | field(default=False, init=False) |
last_fallback_reason | str | field(default='', init=False) |
Methods:
assess(target_tier: int, readiness: dict[str, Any], tier_cap: int = 3, current_tier: int | None = None) -> ReadinessDecision¶
TierManagerPatternRuntime¶
Stateless executable mechanisms for tier_manager's applied patterns.
Methods:
tighten(posture: Any, baseline_posture: Any = '', requires_review: bool = False, degraded: bool = False, not_ready: bool = False, non_passing_evidence: bool = False, cap_exceeded: bool = False) -> TierManagerPatternReview¶
One-way readiness-posture guard (hook-based-safety-guard-rails).
AdaptiveTier(IntEnum)¶
TierState(BaseModel)¶
| Field | Type | Default |
|---|---|---|
current_tier | int | 0 |
tier_cap | int | 3 |
advancement_pending | bool | False |
proposed_tier | int \| None | None |
proposed_reason | str | '' |
last_audit_summary | str | '' |
last_advanced_at | str | '' |
advancement_history | list[dict[str, Any]] | Field(default_factory=list) |
TierInput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
op | TierOp | required |
tier | int \| None | None |
reason | str | '' |
vault_path | str | 'tier-manager' |
TierOutput(BaseModel)¶
| Field | Type | Default |
|---|---|---|
ok | bool | required |
tier_state | TierState \| None | None |
readiness | dict[str, Any] \| None | None |
history | list[dict[str, Any]] | Field(default_factory=list) |
message | str | '' |
degraded | bool | False |
degradation_reason | str \| None | None |
readiness_posture | str \| None | None |
baseline_posture | str \| None | None |
requires_review | bool | False |
llm_used | bool | False |
agentic_evidence | dict[str, Any] \| None | None |
TierManagerBlock(AIBlock[TierInput, TierOutput, TierState])¶
| Field | Type | Default |
|---|---|---|
name | str | 'tier_manager' |
state | TierState | field(default_factory=TierState) |
Methods:
infer(data: TierInput) -> Result[TierOutput]¶
Functions¶
deterministic_readiness_decision(target_tier: int, readiness: dict[str, Any], tier_cap: int = 3, current_tier: int | None = None) -> ReadinessDecision¶
Demoted-real STRUCTURAL baseline (the zero-LLM floor).
apply_readiness_floor(baseline: ReadinessDecision, candidate: Any) -> ReadinessDecision¶
One-way readiness-posture safety clamp (stricter-of, ESCALATE only).
build_default_planner() -> 'TierManagerPlanner | None'¶
Build the on-by-default agentic planner, or None when suppressed.
grounded_readiness_decision(target_tier: int, readiness: dict[str, Any], tier_cap: int = 3, current_tier: int | None = None, planner: TierManagerPlanner | None = None) -> ReadinessDecision¶
The ONE shared grounded chokepoint for EVERY tier-readiness decision.
applied_agentic_patterns() -> list[dict[str, Any]]¶
Return compact metadata for tier_manager-applied vendored patterns.
MCP Tools¶
| Operation | Source |
|---|---|
ops | tier_manager_mcp |
help | tier_manager_mcp |
assess_readiness | tier_manager_mcp |
get_status | tier_manager_mcp |
audit_readiness | tier_manager_mcp |
list_patterns | tier_manager_mcp |
describe_tier | tier_manager_mcp |
verified | tier_manager_mcp |
qualified-draft | tier_manager_mcp |
blocked-escalated | tier_manager_mcp |