The problem we left open
In the last post I named two quiet cheats that survive strict gates.
Features can time-travel: a 14:00 mark trained on a 14:10 print sits today's exam with tomorrow's answer key. Stress packs can turn one dial at a time and call the book resilient while real breaks arrive as bundles. Separate columns are not independence. On the never-traded structure, calm width near 0.60 between 1.50 and 2.10 families can widen toward something uglier under co-break, while overlap stays empty.
That creates headaches:
- Notebook genius, service fool, same model name.
- Agent latest fetches that illegally strengthen ranges.
- Green marginal intervals that never saw the joint day.
- Incident write-ups that blame regime change for a clock bug.
So the question for this post is simple. If that is the failure mode, what does a real feature-and-stress solution look like?
The solution, as one stack
The core idea is dull on purpose: every feature carries an as-of timestamp; every tool fetch inherits the job's clock; offline and online must match under replay; stress packs include named joint bundles; the gate reads co-break fan-out, not only calm width.
I turn that into five moves. Together they are one solution, not five optional add-ons. Dullness is the point. Flashy learners do not fix illegal information. If the stack feels like plumbing, good. Plumbing is where this class of model risk actually lives.
1. Point-in-time features as a hard contract
Build or buy a feature path where a request sounds like: give me feature X as knowable at T. Not latest. Store versions so yesterday's 14:00 can be reconstructed. If a feature cannot declare its as-of semantics, it cannot enter a capital-touching job.
This sounds like data plumbing. It is decision geometry. The mark is a claim about an information set. If the plumbing lies about that set, every downstream object inherits the lie: crowds, ranges, hedges, promotion stories. I would rather fail admission on an undeclared feature than debug a genius that never existed.
2. Agent tools inherit the job clock
Tool gateways accept as-of from the job contract and refuse default-latest for marking paths. If a researcher wants latest for exploration, that is a different tool class without spend tokens. Mixing the two is how leaks return. Research speed and production honesty are different jobs. Give them different doors.
The practical test is simple. Can a marking agent obtain a post-decision revision through any tool path that still ends in a spend token. If yes, the clock is costume.
3. Parity gates in CI
For a frozen job, notebook recipe and service recipe must match marks within a tiny tolerance on a replay pack. Fail the build on mismatch. This is training-serving skew treated as a release blocker, not a wiki page. If the notebook cannot be reproduced at the job clock, it was never evidence. It was a demo.
4. Named joint stress bundles
Write a small catalog: funding squeeze plus spread jump plus missing quotes; curve dislocation plus liquidity drought; and a few more the desk already fears. Each bundle has a name, a generation recipe, and an owner. Re-run near-winner crowds and ranges on bundles, not only on single knobs. Publish calm width and co-break width side by side.
Keep the catalog small enough that people run it. A dozen named co-breaks that block release will change behavior. A hundred lovingly documented ones that nobody executes will not. Ownership matters as much as math. An orphaned scenario file is theater with a filename.
5. Let the gate consume co-break objects
Auto-allow requires tolerances under the relevant bundle set for that structure family, not only under calm holdout. If joint stress makes frames disjoint or coverage breakers trip, escalate. Calm-only green is not a spend license. The gate that cannot see co-break width is still half blind after all the earlier work.
A concrete walkthrough
Same never-traded structure. Same 1.50 versus 2.10 families. Now pin the clock and name the joint.
Job as-of: 14:00 exactly
Tools: pinned; latest blocked on mark path
Parity CI: notebook matches service on replay pack
Bundle co-break A:
frame gap widens ~0.60 to ~0.95
overlap empty
Gate: escalate on co-break
calm allow still blocked by crowd and range rules
1.80 still denied as invented peace
Again the satisfying ending is not a prettier offline score. It is a named escalate with artifacts: as-of stamp, parity pass, co-break widths. Monday can replay why autonomy refused without inventing a story about regime change. That replay is the product.
A practical rollout order that has worked for me: first kill default-latest on any path that can mint a spend token, then add parity CI on a tiny replay pack, then add two or three owned co-break bundles before you grow the catalog. Teams that start by building a museum of scenarios usually ship none.
Parity packs should include the ugly case from the last post: the notebook that looked brilliant because it saw 14:10 information. If that case still passes, your parity gate is naming the wrong equality. Match at the job clock, or admit you are matching two different exams.
When co-break width between the 1.50 and 2.10 families blows out toward 0.95 with empty overlap, the right product outcome is escalate with artifacts, not a cleverer point estimate. The stack succeeds when autonomy refuses for a named joint reason.
The flow in one breath
As-of feature contract, then tools pinned to the job clock, then parity CI, then named joint bundles that re-score crowd and ranges, then a gate that requires co-break tolerances. That is how I want time and dependence to show up in financial AI. Curious how others keep agent fetch paths honest without slowing research to a crawl, and how small they keep a joint-bundle catalog before it becomes shelfware.