Ceremony proportional to consequence per change, not per project #189
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#189
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
The problem
stakesis a project-level dial. One value inconfig.jsondecides the model,the effort rung, every review gate and whether deep-verify runs, for every phase
in the project until someone edits it. A README phase and an auth phase cost the
same, and the only lever is to edit the config between phases, which nobody does.
The result is that the level is set once, high, and then every cheap phase pays
for the expensive one. That is the largest single driver of run cost, and it is
paid on work that carries no consequence.
The proposal
Cadence already computes what a change touches.
risk-check runresolves eightcategories over a committed range, and
route.mjs resolvealready returns asurfaceslist. Let the surface set the ceremony rather than the config:stakesbecomes the FLOOR, not the level. It states the minimum a projectwill accept.
files:touch nothing on a risk surface resolves lower than the project floorallows today.
override naming the surface (STK-03), and that rail is untouched.
Why this is a philosophy change and not a feature
Today the axis is "what kind of project is this". The proposal is "what does
this change put at risk", which is the question the routing table claims to ask
already (
v2.0.0, STK-01) but answers once per project instead of once per unitof work.
How you would know it worked
Run the same milestone twice, once at today's fixed level and once with the
computed one, and compare per-phase
tokensintrace.jsonl. The win is realonly if the cheap phases got cheaper and no phase that touched a risk surface
resolved lower than it does today.
Cost
Non-trivial. It moves the resolve from a config read to something that must read
the phase's plan, which means
route.mjsgains a dependency on planning stateit does not have today. Worth arguing about before writing.
Decided: keep the problem, cut the mechanism. The diagnosis holds -
stakesis set once, high, and every cheap phase then pays for the most expensive one. The proposed remedy does not: a computed per-phase floor derived from the risk surfaces adds a new precedence layer on top of routing, which is already the densest surface in the project (route-table, rung files, pins, retry escalation, per-trigger gate/tier/effort). That is more complexity in exactly the place that is hardest to hold.Reduced scope, which is what this issue now tracks: a
--stakes <level>override on/cad-plan(and whatever it must thread to for/cad-executeto honour it), so ONE phase can run below the project floor without editing config.json between phases. No computation, no new layer, no change to the STK-03 override rail. It gets the cost saving the issue is actually after and leaves the philosophy alone.The 'ceremony proportional to consequence' framing is not being adopted; if the flag turns out to be used constantly and always in the same direction, that is the evidence for computing it, and this issue can grow back.