Repository navigation
Plan: Engram placement as a fabric/materialization cost decision (RAM vs NVMe vs NFS routes) - #11098
Conversation
… a location string Plan doc only. No .dag implementation; the one non-prose change is the doc_graph_roots bind that makes the file reachable. Models the component's access demand (48 row reads/token, 264 B rows, sub-page granularity, 15.5x read amplification) against the 203,073,076,240 B table, and derives the fleet consequence — TP8/one replica when Engram is resident vs TP4/two replicas when it is not — through axes serving_deployment_selection already funds. The route ordering is deliberately left NeedsEvidence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
…ica axis Under the no-redundancy ruling (#11013 constraint_no_redundancy, in flight), replica count is pinned to 1, so an axis counting replicas is permanently flat and the 8-vs-4 rank difference is a feasibility question instead: TP8x1 needs all eight Sparks, TP4x1 fits the four admissible ones. States how admissible hosts enter. spark_fleet_snapshot carries host_count: 8 and no identities, so fleet_fits silently assumes eight free hosts while cell_role assigns srv5/srv6 and an undischarged llama.cpp RPC reservation walls off srv7/srv8. The fit screen must consume the host binding with each exclusion naming its authority; landed as its own step, since that assumption is wrong today independent of Engram. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
Review's one watch item: step 4 is described as independently correct today, so if it slides behind the Engram work it becomes a known-wrong screen with no owner. States that it is not gated on this plan's approval, must not be sequenced behind the routes, and wants its own work item — with the trigger that retires "wrong and tracked" named as the binding landing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
The step had a sentence saying it needed an owner; it has one, sequenced after #11013 since that PR rewrites the same module. "Wrong and tracked" becomes "wrong and owned", with DSV41-9 landing the binding as the retiring trigger. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
…arged reservation Review 64082 is right and verified against the tree. llama_cpp_rpc_release_receipts carries receipts for BOTH srv7 and srv8, and spark_llama_cpp_rpc_witness pins undischarged == 0, so the reservation that section named is discharged; the prior text read a stale cell_role annotation instead of the declarations the witness executes against. Applying its own stated formula yields six hosts, not the four it claimed — the count was right by accident and the formula wrong. What actually binds srv5-srv8 is spark_pair_serving_groups = [FabricGroupA]: srv6 head, srv5/srv7/srv8 workers, TP4, vLLM, pinned by group_a_is_four_ranks_headed_by_srv6_at_their_rail_addresses. Cell-role assignment lags pair-serving desired state, which is why reading roles alone undercounts. Admissible set is still srv9-srv12, now for the real reason. Route A's cost restated: not "displacing two named subjects" but tearing down a running four-rank serving deployment. DSV41-9 described as a dashboard node with #11013 as the checkable anchor, in the shape the corpus already cites DSV41-2, since the label does not resolve in-tree. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Both findings in review 64082 are correct, verified against the tree, and both are fixed in the head just pushed. 1. Wrong exclusion authority. The sharper half of the finding is the one I want to underline: applying my own stated formula yields six, not the four I claimed. The count was right by accident and the formula that produced it was wrong, which is the worse failure — a confirming number is exactly the kind that does not get audited. What actually binds srv5–srv8 is 2. — sent from nimble-ferret-574 |
…s selection Review 64096, both findings verified. RealizationSelectionResult carries SIX arms and the plan collapsed them to three — a second algebra with fewer distinctions, the exact 3d fork the plan claims elsewhere to avoid. SelectionNeedsPolicy is the arm that bites: B and D can both be fully measured and non-dominated (D wins fill, B wins network bytes and failure domain), which no further measurement resolves. The three-arm vocabulary had to either report NeedsEvidence for evidence that exists or pick a winner off a front of two. And "the answer is A regardless of cost" contradicted 8.2, where A fails host feasibility. If the runtime refuses B/C/D and A fails the host screen, every candidate violated a hard constraint: NoFeasibleRealization naming both causes. A surviving candidate passed every constraint; it is never the last one standing. Reconciled the downstream NeedsEvidence claims: with 11's constraint axis unfunded, today's output is RealizationSelectionRefused, not SelectionNeedsEvidence. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Both findings in review 64096 are correct and fixed in the head just pushed. The first is the more serious of the two and I had the fact wrong, not just the wording. 1.
2. "the answer is A regardless of cost" contradicted §8.2. A is subject to the same screen, and §8.2 establishes A fails it today — TP8 × 1 needs eight Sparks, four are admissible. If the runtime refuses the non-resident routes and A fails host feasibility, every candidate has violated a hard constraint and the result is That state is also the most useful thing the subject can say: it means the deployment does not fit this fleet under any placement, and the reply is to change a constraint — release Group A, patch the runtime, add hosts — rather than to pick a route. I also reconciled the downstream claims this exposed, since fixing §7 and §11 alone would have left four places asserting — sent from nimble-ferret-574 |
Review 64114, verified. 8.2 rejected "roster minus role assignments minus undischarged reservations" — it yields six — and 14.4 still told the worker to build exactly that. Correcting the argument while leaving the recipe is the surviving-attractor shape DESIGN 3 warns about: the dead formula is the one the implementation would have been written against. The desired-serving-deployment term now leads, named as the only non-empty term today and as the one a worker reading the role roster would omit — which admits six hosts and hands four of them to a new shape while Group A serves on them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Correct, and fixed in the head just pushed. §14 step 4 was still telling the worker to build "roster minus role assignments minus undischarged reservations" — the exact two-term formula §8.2 spends three paragraphs rejecting, and which yields six hosts rather than four. This is worse than an inconsistency, and the reviewer named why: the landing order is what a worker actually implements against. I corrected the argument and left the recipe, so the dead formula was the one that would have been built. That is the surviving-attractor shape DESIGN §3 describes — while the old structure stands, the nearby question keeps getting answered in its vocabulary, including by the person who just replaced it. §14.4 now carries the three-term formula with the desired-serving-deployment term first, since that is the term a worker reading the role roster would omit, and omitting it is not a near miss: it admits six hosts and hands four of them to a new shape while Group A is serving on them. It also states which terms are live — pair-serving non-empty, role assignment a strict subset of it because The one remaining instance of the rejected formula is at — sent from nimble-ferret-574 |
Own sweep, not review-driven. 8.2 still said a shape exceeding the admissible set is "Refused"; after 7's correction that arm means the selection itself was defective. A full fleet is NoFeasibleRealization — well-formed selection, no surviving candidate — which is the distinction the six arms exist to keep. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
No action needed from review 64126 (APPROVE, no findings) — but approvals are hygiene, so I re-read the document against the brief rather than stopping on the tally, and my own sweep found one more instance of the propagation failure the last two reviews caught. §8.2 still said a shape needing more admissible hosts than exist is Against the brief, the one deliberate divergence is worth stating rather than leaving for a reader to find: the brief specified a three-arm result ( — sent from nimble-ferret-574 |
Review 64146, both verified. The byte partitions are CitedToAuthority publisher figures, not FootprintObservedOnFleet — deepseek_v4_1_flash_payload_footprint_standing says so, and the only FootprintObservedOnFleet nearby is a different artifact (V4, 168 GB). Claiming the stronger arm was rung inflation in the paragraph whose job is rung honesty. The correction has teeth: weight_fit_of returns WeightFitUnderivable on FootprintReportedExternally, so 8's rank arithmetic run through the screen that exists today yields underivable for every route. The 5-vs-3 split is motivation for the decomposition, not a feasibility finding, until a Spark reads the byte spans. 14 step 1 now takes that read together with the row-size read, since one pass discharges both. EngramPlacement was a second name for the selected route, in a plan whose thesis is that placement is not a property of the component — the exact shape a worker could mint the forbidden location type from. Named as the MaterializationRoute inside SelectedWithin instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Both findings in review 64146 are correct and fixed. The first is the most substantive defect any review has found here, because the fix changes what §8 is allowed to claim. 1. False rung on the byte partitions. The partitions are The correction has teeth, which is why I did not just swap the label. 2. Standing back: five reviews, five real defects, and this document argues for not asserting beyond your evidence. Four of the five were my own corrections failing to propagate or my own standard applied everywhere except the sentence I was writing. That is worth recording in the plan's own terms rather than treating each as a one-off. — sent from nimble-ferret-574 |
F1 coupling. "Two selections, no joint search space" was asserted, not established, and is wrong: fill is per host, the table is row-sharded across ranks, refill scope and storage follow host count, page cache follows route and concurrency, failure cost follows host assignment, and feasible topology follows the route's resident contribution. No invariance proof exists. New 7.1 takes the parameterized shape — route selection per exact serving candidate, outer selection over composed candidates — keeping both authorities distinct without a context-free route winner. Max admitted latency leaves the demand carrier; it is serving policy and belonged to the serving subject, as section 4 already said. F2 logical vs physical. 48 hash IDs is implementation-plus-config derived (n_hash_cols = (max_ngram_size-1)*n_heads), not config-only. The page-read chain is a scenario under named assumptions, not derivation: weight and scale are separate tensors so 264 B is a summed logical payload rather than a layout fact, and page count, coalescing, readahead, cache hits, host page size and per-rank ownership are all unestablished. Split into ComponentLogicalAccessDemand and RoutePhysicalAccessStanding with the standing inseparable from the number. F3 resident memory. "Zero resident bytes" for a non-resident route is fail-open: B and D depend on a retained page cache by construction. RouteResidentMemoryStanding with an unestablished arm that keeps the fit open. TP8/TP4 restated as lower-bound scenario, matching WeightsNotRuledOutByLowerBound. F4 census. Placement has four arms including LocalAccelerator; the hop restated placement and retention that tier_axes and CacheProvider already derive, making contradictory hops writable; CasTier is keying, not locality; ArtifactRequest is a closed coproduct over compiler artifacts and cannot host Engram; the component digest does not exist. Adds the subject/artifact/realization trio. The net-new count is now open rather than "exactly three". F5 consumption. A witness is not the production consumer: step 2 merges with the candidate-field consumption or lands as a declared frontier. F6 two gates. serving_runtime_capability_probe says of itself that presence is prerequisite inventory establishing nothing about serving, with feasibility belonging to RuntimeFeasibility and a launch receipt. Absence rules out; presence does not rule in. Digest grain corrected to the observed local config digest. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Investigated; there is no fix to push from this branch, and pushing one would be worse than leaving it red. Evidence rather than assertion: The "2 failing" is one lane failure counted twice. The same red is on main's own head, so it is not about this PR. Run 34660770145, Identical signature on all three of my heads ( Why I am not pushing a no-op to re-roll it. For this class the outcome tracks whatever page cache the runner cgroup happens to get under co-tenancy, so a retry samples a distribution rather than re-tests anything. A green obtained that way is a draw reported as a pass — a fabricated plausible output with a check mark on it, which is precisely what DESIGN §5 forbids. A real red is more useful than a manufactured green. One correction to my own earlier report on this: I first cited run 34660763884 as evidence that main was red. That run is the The land-or-hold call is with the operator, and the manager has this branch on hold at — sent from nimble-ferret-574 |
|
Correcting an overstatement in my comment above. I wrote "the trunk cannot pass this lane." That is stronger than the evidence supports. What I had was four observations, all red. What I now know: #11013, #11096 and #11088 have since gone fully green on all four checks. So the condition is intermittent, not total — the lane can pass, and my four reds were a sample rather than a demonstration of impossibility. Everything the earlier comment establishes still stands: the red is not about this diff (build green on every head, same signature on main's own head at run 34660770145), and the "2 failing" is one lane plus its aggregator. What does not stand is "cannot", and the difference matters — "cannot pass" invites someone to go looking for a structural defect that is not there, while "does not always pass under memory pressure" points at capacity, which is where the actual cause is. This does not change the hold or the method. Sampling for a green is still the wrong way to clear a check, and I am still not pushing to re-roll. It does mean a green run may simply arrive on its own, which would resolve this without anyone deciding anything. — sent from nimble-ferret-574 |
1. Missing-evidence semantics were self-contradictory across 8.3, 11.1 and 14. std.decision separates unfunded_constraint_axis_defects (constraint naming an axis ABSENT from declared axes: a malformed input) from unread_axis_gaps (a declared axis with no candidate reading: an evidence need). The plan conflated them. 11.1 now states four states in a table; today's output is SelectionNeedsEvidence, not RealizationSelectionRefused. Also deleted the automatic "once the probe lands" progression: a result depends on what a probe OBSERVES plus the remaining evidence, not on an instrument existing. And says the runtime axis is declared on purpose — omitting it to obtain a louder refusal would preserve the six arms' spelling while destroying their meanings. 2. The capability lookup key was wrong, and dangerously. The merged witness the_published_ask_is_keyed_on_the_pull_pin_not_the_config_id asserts the observation is keyed on the pull pin and that architecture_observation_exists(config_id) is FALSE. The prior text would have had a worker query pin-keyed inventory by config ID and read the miss as absence of support — manufacturing a measured negative from a wrong key. Execution identity and observation lookup key are now distinct, with all four terms of the relation kept. 3. Three claims outran their carriers. The 6.2e-8 ratio is (48 x 264 B) / table and rests on the ungrounded 264 B assumption, so it is conditional. 8.3 still called the 48 config-derived; it is implementation-plus-config. 14.1 claimed a byte-span read would make the arithmetic a feasibility finding; it establishes neither resident memory nor working set nor execution. And the third-party patch inference is withdrawn — someone patching their build observes nothing about the published digest. 4. Host set: consume gunbc.spark.host_commitment rather than restate a subtraction, since an independently enumerated recipe misses whatever category lands next — which is how this plan missed the serving-arm claim. No scalar replaces "four"; the document no longer carries the host list as data, which is the rule 8.2 already stated and 8.2 itself broke. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
…solves here Review 64308, all three verified. The citation finding is a base problem, not a false citation: the witness the_published_ask_is_keyed_on_the_pull_pin_not_the_config_id and architecture_observation_exists are on origin/main but were NOT in this branch's tree, which predates that merge. I verified them against origin/main and cited them as if the PR tree carried them. Merged main so the symbols resolve in the corpus this PR actually presents. Steps 3 and the closing line each restated a reading the section above had already corrected — step 3 keyed the probe on the config digest, the exact inversion 11.1 says manufactures a false negative, and the closing line said refusal where 8.3 now says SelectionNeedsEvidence. Both are the brief a worker executes, so a stale restatement there outranks corrected prose everywhere else. Three reviews have now found this same shape in 14. The structural repair, stated in the section: 14 states no semantics of its own — every step names the section that owns its meaning, and where a step and a section disagree, the section wins and the step is the defect. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
All three findings in review 64308 verified and fixed. Origin sha after push: 1. The citation — the reviewer is right, and the diagnosis is more interesting than "stale name". The symbols are real, but they were not in this branch's tree: My branch predates that merge. I verified the witness against 2 and 3 are the same defect twice, and it now has a structural repair. Step 3 keyed the probe on "the observed local config digest, not the pull reference" — the precise inversion §11.1 says manufactures a false negative — and the closing line said "a refusal naming the unfunded runtime constraint" where §8.3 now says Both are in §14, which is the brief a worker executes, so a stale restatement there outranks corrected prose everywhere else. Three separate reviews have now found this same shape in §14: the argument gets corrected and the landing order keeps the abandoned reading. So the repair is not another patch. §14 now states no semantics of its own — every step names the section that owns its meaning and defers to it, and the section says so explicitly: where a step and a section disagree, the section wins and the step is the defect. That removes the class rather than the third instance of it. — sent from nimble-ferret-574 |
|
Both findings in review 64320 are correct — verified against this tree — and I am holding rather than pushing, because this head is frozen pending a review the manager has in flight. Not a disagreement; a sequencing constraint. I pushed over a reported head once already tonight and it cost a reviewer a re-read of a superseded corpus. Finding 2 is self-inflicted, and the causal chain is the interesting part. It resolves because I merged main — the merge that was needed for the #11088 citation in finding 1 of the previous review. So fixing one citation falsified a different status claim three sections away. The generalisation I had not seen: merging main does not only make citations resolve, it invalidates every "in flight / not on main" claim in the same document, and those are precisely the claims that read as settled and get skipped on a re-read. I will therefore re-check all four — Finding 1 is the surviving-attractor shape, in a document that names it. §11 says "only four are admissible" while §8.2, three sections earlier, says the host list must not be carried here as data and records that "four" went stale when srv9 took the GLM canary. Group A still explains why TP8 needs displacement; the cardinality does not follow. The fix is to drop the count and let Both edits are narrow and ready. They go in on one push when the manager authorises it, and I will report the origin sha read back after pushing. — sent from nimble-ferret-574 |
Held per the freeze: the side-chat is reading fc2d382, CI is saturated, and a push now lands a verdict on a stale head for the second time tonight. Pushes when the manager hands over the verdict. Finding 1: section 11 restated "only four are admissible" three sections after 8.2 forbade carrying the host list as data. Count dropped; the displacement argument stays by reference to 8.2. And four is not merely forbidden-as-data, it is now wrong — host_commitment derives three uncommitted units since srv9 took the GLM canary. Recorded in 8.2 to show the value moved, explicitly not as a value to consume: replacing four with three repeats the mistake in a fresher costume. Finding 2: the four status claims do NOT resolve alike, and checking each against gh pr view at edit time rather than memory is the whole content of the finding. #11013 MERGED and #11088 MERGED, so status clauses go and the symbols are cited plainly; #11107 is OPEN, so host_commitment's in-flight wording is still true and STAYS. Sweeping them uniformly would trade one false status claim for another. Adds a standing instruction beside the section 14 rule: merging main does not only make citations resolve, it silently falsifies every "not yet on main" claim in the document, with no conflict and no diagnostic, and those claims read as settled so a re-read skips them exactly when they have gone wrong. Same class as the section 14 rule — a restatement that nothing re-derives — which is why they sit together. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
|
Disposition on review 64320: both findings accepted, edits authorised and written, deliberately not yet pushed. The published head is still Finding 1 is worse than the review states, and the extra fact is worth having. Dropping "and only four are admissible" is right, but four is not merely forbidden-as-data — it is now wrong: Finding 2 is right, and the fix is not the sweep it looks like. The four symbols do not resolve alike, checked against live PR state at edit time rather than memory: Sweeping them uniformly would have traded one false status claim for another, which is the actual content of the finding: the defect is not the in-flight phrasing, it is a status claim that nothing re-derives. And the cause generalises, so it is now a standing instruction in the document rather than a fix to two lines. Merging — sent from nimble-ferret-574 |
…tched Folded with the two REQUEST_CHANGES edits authorised earlier — one push, one head for the reviewer. 1. 8.3 still promoted a byte-span read into feasibility, which corrected 14.1 already denied. That mattered more than a duplicate because 14 DEFERS to 8.3, so the precedence rule routed authority into the error. Replaced with the reviewer's text: the read establishes the fleet-read payload input and not loaded resident memory, route working set, or execution feasibility; the positive arm stays WeightsNotRuledOutByLowerBound. 2. Host claims in three places, not the two named. Section 11 takes the reviewer's wording — a candidate requiring more hosts than host_commitment makes available is excluded, and if that empties the field it is NoFeasibleRealization with causes named. Deleted the 8.2 bullet reasoning admissibility from absence in the preceding categories, immediately before the text explaining why an omitted serving-arm claim invalidates exactly that. And 8.1 carried a third present-tense count the verdict did not name; the sweep found it. Also removed "three uncommitted units" from 8.2, which I had written as a demonstration. The instruction is no replacement number anywhere, and a figure labelled do-not-consume is still a figure that goes stale; the supply gap is an operator decision this plan does not resolve. 3. The patch inference's remainder: "establishes that the capability is not universally present" stood in the same paragraph that granted the author may never have tried the stock path. Replaced with the reviewer's sentence. All three share the shape section 14's note diagnoses, one axis over: sections contradicting each other laterally rather than 14 restating a section. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
…orted it Verdict finding, and it is the same class one level subtler than the last: the availability number is gone but the conclusion it was supporting stayed, stated independently. 8.1's Route A bullet delegated the answer to host_commitment and then supplied it anyway in the next clause — my own replacement text, not survivor prose. Suffix deleted; the TP degree stays, since that is the scenario's demand rather than an authored availability figure. 8.2's "infeasible without displacing a running four-rank serving deployment" paragraph deleted entire, no replacement: section 11 owns the host-fit rule. Swept for the conclusion the way I swept for the number, and found a third: section 11 named "release Group A" as a remedy, which is today's incumbent as data. Now names constraint kinds instead, with the note that which is cheapest to move depends on what is committed at the time and is not a property of any route. The distinction worth carrying: a host-fit refusal establishes that a candidate cannot use the presently admitted supply. It does not establish that a particular incumbent must be displaced whenever that route is selected — a sufficient uncommitted population removes the exclusion without displacement entering the route at all. "A is infeasible without displacing" smuggles today's supply into a permanent property of the route, which is the stale-fact mechanism wearing the shape of a conclusion instead of a number. #11107 re-checked at edit time: still OPEN, so host_commitment's in-flight wording stays. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf
Plan doc only, per DSV41-8 plan-first.
docs/plans/engram-materialization-placement.mdplus the onegunbc.doc_graph_rootsbind that makes it reachable. No.dagimplementation lands from this PR.What it argues
Operator ruling (2026-09-11): model Engram access and cost and let the ordering fall out; do not declare it.
EngramComponentSubject/MaterializedEngramArtifact/FaithfulComponentRealizationrather than one byte digest. The subject's digest does not exist yet — that is step 1 work.n_hash_cols = (max_ngram_size-1) * n_heads). The page-read chain — 48 pages, 196,608 B/token, 15.5×, the IOPS figures — is a scenario under named assumptions, not derivation, and is typed as such. Weight and scale are separate tensors, so 264 B is a summed logical payload; a contiguous record would be a route-specific materialization format.CasTieris keying semantics, not "remote".RealizationSelectionResult<MaterializationRoute>unchanged — six arms, no second algebra,SelectionNeedsPolicyreachable here with full evidence.What it does not claim
The 5-vs-3 rank split is a lower-bound scenario over publisher-cited bytes, not a feasibility finding:
weight_fit_ofreturnsWeightFitUnderivableonFootprintReportedExternally, and its positive arm isWeightsNotRuledOutByLowerBound. No route is declared the winner. D is an expectation.Census and integration
Placementhas four arms (LocalAcceleratorincluded), the route hop no longer restates whattier_axesderives, andArtifactRequestis a closed coproduct over compiler artifacts that Engram cannot inhabit. The net-new count is open, not "exactly three".ArtifactFootprintis not forked. A non-resident route contributes itsRouteResidentMemoryStanding, not zero — the earlier "zero resident bytes" was fail-open, since B and D depend on a retained page cache by construction.RuntimeFeasibilitylaunch receipt satisfies it. Digest grain is the observed local config digest, not the pull reference.fleet_fitsdefect this plan found — un-gated on this approval, owned by DSV41-9, anchored at DSV41-2: V4.1 native serving candidates, constraints against facts, derived topology #11013.🤖 Generated with Claude Code
https://claude.ai/code/session_01DiKZ27VVdsn6hn9V8fN9Kf