runtime-adapters — Profiles become runtime constraints rather than advice
A profile's axes become opt-in runtime clamps a provider actually applies — read size, output condensation, subagent budget — with the limit derived from the profile rather than configured twice.
PLANNED 0 of 6 issues done
- ready
- 1
- blocked
- 5
- active
- 0
- verify
- 0
- done
- 0
- cancelled
- 0
Problem
A profile declares an effort and a verbosity, and then nothing enforces them. The worker reads the projection and is trusted to behave. An axis that only ever appears in generated prose is a preference, not a control.
Outcome
A profile's axes become opt-in runtime clamps a provider actually applies — read size, output condensation, subagent budget — with the limit derived from the profile rather than configured twice.
Current state
Not started. The profiles exist and project correctly; nothing derives a runtime limit from them.
Desired state
Starting a task under a profile constrains what the worker may do, and the constraint is visible in the same place the profile is.
Scope
- bin
- lib
- share
- test/cases
- docs
- site/data/generated
Out of scope
- Provider-specific behaviour that cannot be verified from this repository
Acceptance criteria
- At least one runtime limit is derived from the profile and applied, not merely printed
- The limit is opt-in and a repository that does not want it is unaffected
- A behavioural case proves the limit changes what happens, not only what is reported
Validation
- bash test/run.sh
Evidence required
- suite
Risks
- Only providers that expose a real knob can be clamped honestly; the rest would be theatre.
Issues
Each one is an execution contract with its own acceptance criteria, validation command and required evidence. The wave column is the layer of the dependency graph it sits in.
| issue | status | wave | depends on | title |
|---|---|---|---|---|
| I0201 | READY | 0 | — | Declare which profile axis may become which runtime limit |
| I0202 | BLOCKED | 1 | I0201 | Resolve a task's effective limits and print them as data |
| I0203 | BLOCKED | 2 | I0202 | Make enforcement opt-in, and prove a repository that declines is unaffected |
| I0204 | BLOCKED | 3 | I0203 | Apply one derived limit for real and prove it changes what happens |
| I0205 | BLOCKED | 4 | I0204 | Declare the clamp as a doctrine so the mapping and the adapter cannot drift |
| I0206 | BLOCKED | 5 | I0205 | Publish the runtime-adapters claim with the test that proves it and the limits it does not cover |
The graph
flowchart LR
I0201["I0201<br/>Declare which profile axis may become which runtime limit"]:::ready
I0202["I0202<br/>Resolve a task's effective limits and print them as data"]:::blocked
I0203["I0203<br/>Make enforcement opt-in, and prove a repository that declines is unaffected"]:::blocked
I0204["I0204<br/>Apply one derived limit for real and prove it changes what happens"]:::blocked
I0205["I0205<br/>Declare the clamp as a doctrine so the mapping and the adapter cannot drift"]:::blocked
I0206["I0206<br/>Publish the runtime-adapters claim with the test that proves it and the limits it does not cover"]:::blocked
I0201 --> I0202
I0202 --> I0203
I0203 --> I0204
I0204 --> I0205
I0205 --> I0206
classDef done stroke:#16a34a,fill:#052e16,stroke-width:2px
classDef active stroke:#2563eb,fill:#eff6ff,stroke-width:2px
classDef verify stroke:#7c3aed,fill:#f5f3ff,stroke-width:2px
classDef ready stroke:#0891b2,fill:#ecfeff,stroke-width:2px
classDef blocked stroke:#b45309,fill:#fffbeb,stroke-width:2px
classDef cancelled stroke:#6b7280,fill:#f9fafb,stroke-width:2pxCanonical record: .ai/repo/project/milestones/runtime-adapters.yaml. Read it back with majordomus plan show runtime-adapters.