Skip to content

Shingler mirror of #100 (do not merge) - #141

Closed
midagedev wants to merge 2 commits into
mainfrom
tmp/shingler-dgx-spark-unified-floor-on-glmres
Closed

midagedev wants to merge 2 commits into
mainfrom
tmp/shingler-dgx-spark-unified-floor-on-glmres

Conversation

@midagedev

Copy link
Copy Markdown
Owner

Temporary internal branch with the same tip as #100 (rebased onto main) so the review workflow runs. #100 itself is what merges; this closes after.

…efuses is planned again under a card budget that leaves the floor

On one pool the card's fill is capped by the pool's reading, and the cards' share of the pool is a host term of the
NVMe expert tier's floor (HostTotals::pool_card_bytes in the host terms beside the routed experts). A file above the
pool fills the card to the reading, so the floor's base alone passes the room and the plan is refused with
HostRoomFloor at every context: on a DGX Spark, DeepSeek-V4.1-Flash Q3_K_M (room 124.14 GB, floor 153.02 GB) and
GLM-5.3-Flash UD-Q4_K_XL (room 119.57 GB, floor 141.64 GB) at serving defaults. Only BLOOMERY_CARD_BUDGET loaded them.

placement::plan_in_pool runs a family's plan and split as a closure. On a unified machine with no given budget, a
HostRoomFloor refusal plans the closure again under a card budget lowered by the shortfall the refusal names, at
least a granule, until the floor holds; the plan is marked budget_from_pool. A given budget, a machine whose cards
have memory of their own and a shortfall past the card's whole budget are the first plan's result. A lowered budget
refused for another reason, a budget that runs out and a floor unmet after 64 rounds are refused by name
(PlacementError::PoolBudget: the rounds, the last budget, the last refusal). The V4.1 plan and both GLM plans (with
and without NextN) go through it. HostNeed names BLOOMERY_CARD_BUDGET only for a budget the caller gave, and the
lever's unset text and PlanLevers say what unset means on a unified pool.

Rounds on the DGX Spark at serving defaults: V4.1 two plan_in_pool calls of two rounds each; GLM eleven calls (the
context ladder and the session's plan) of one to five rounds, twenty rounds in all. A round under one expert's card
bytes walks the budget a granule at a time until an expert leaves the card.

Tests: a_unified_pool_lowers_the_card_budget_to_the_tiers_floor holds plan_in_pool's rule on a scripted planner
(red with the rule reduced to one call); slot_plans_on_one_pool_lower_the_card_budget_to_the_tiers_floor plans
GLM's plain and NextN plans at one and two slots on a pool under the floor (red at each call site with its wiring
reverted, and a room under the NextN experts refused by name); hw_placement_unified_pool_lowers_the_card_budget
plans the V4.1 file on a GB10's pool at one and two slots (red with the wiring reverted). gate-placement now reaches
crates/models/src/shape.rs through the V4.1 plan inputs, so the row lists it.

Mac: just mac-static ok (fmt, lint 41 = ratchet, combos, every check script), just mac-test ok (placement 145
tests). DGX Spark (GB10, aarch64): bloomery-model's glm5next and deepseek41 lib tests and the V4.1 hw test green;
both models load at serving defaults and answer; Qwen3.6 Q4_K_M and Qwen3.8 UD-Q4_K_XL, which meet the floor, print
the same --plan output as the base at one given room.
@github-actions github-actions Bot added host Host crates: qdot, threads, engram, engram-lab, runtime, sampler, levers, decision, vision, refset model The CPU engine and model files: crates/model, models, hf, gguf, tokenizer, jinja placement Placement planning: crates/placement labels Oct 13, 2026
github-actions[bot]
github-actions Bot previously approved these changes Oct 13, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: CLEAN: No must-fix finding remains after validation.

Non-blocking

⚠ Supply FAIL-first evidence: crates/model/tests/placement.rs:1070 adds a regression gate, but the PR body includes no failing or passing run output.
Attach just gate-placement output with the retry removed and restored. Include the model file, both commit hashes and the card/driver line to demonstrate that the gate catches the defect.

Checked

Duplicates: 7 new functions/constants checked; the retry policy has one common owner used by DeepSeek and both GLM placement paths.
Complexity: plan_in_pool owns the retry policy; model closures retain their architecture-specific terms.
Silent failure: 4 arithmetic/error sites checked. Budget exhaustion and draft-room underflow preserve named refusals; the test helper's fallback causes an assertion failure.
Tests, static mutations: keep the old budget at placement.rs:3393 and the budget-sequence assertion fails; bypass the GLM wrapper at glm5next/place.rs:972 and the slot test rejects the plan; bypass the DeepSeek wrapper at deepseek41/place.rs:177 and the new gate fails. Dropping the provenance assignment also fails unit assertions. Tests were not executed.
Gates: no existing pin, tolerance or case removed or relaxed. The new hardware gate is hw_-prefixed and ignored.
Bounds: explicit budgets bypass retries; card and pool checks validate the final plans, including draft terms.
Performance: placement runs at load time; no decode or prefill execution path changed.
Escape catalog: no pattern matched. No ledger lessons are in force.

🔨 Shingler, bloomery's review bot: approves a clean pull request and requests changes on a must-fix (how it works)

…the machine's node, after #94 moved host and unified onto nodes[0]

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the last review: the FAIL-first evidence request is still open at crates/model/tests/placement.rs:1070.

Verdict: CLEAN: The accessor and fixture adaptation preserve the local pool and retry contract.

Non-blocking

⚠ Supply FAIL-first evidence: crates/model/tests/placement.rs:1070; the earlier request remains unanswered in the PR body.
Attach just gate-placement output with the retry removed and restored, plus the model file and both commit hashes. This gate reads model headers and uses a synthetic card description; it does not open a GPU.

Checked

Duplicates: 0 new functions, types or constants; dryer reported 0 candidate pairs.
Complexity: crapper flagged no changed function; neither hunk adds a decision branch.
Silent failure: 1 accessor result followed into retry selection; no new default or discarded error. An empty node list raises the existing named panic.
Tests, static mutation: replace the pool lookup at crates/placement/src/placement.rs:3380 with None::<UnifiedPool>; the retry-sequence assertion at :3987 fails. Setting the discrete fixture's pool to Some fails the first-result check at :4004. Tests were not executed.
Gates: no pin, threshold, assertion or case removed or relaxed.
Adversarial: the accessor uses this process's node, as documented; discrete cards and explicit budgets retain the first result. The fixture supplies that node in both modes.
Performance: load-time placement only; no decode, prefill or kernel changes.
Escape catalog: no pattern matched. No ledger lessons are in force.

🔨 Shingler, bloomery's review bot: approves a clean pull request and requests changes on a must-fix (how it works)

@midagedev midagedev closed this Oct 13, 2026
@midagedev
midagedev deleted the tmp/shingler-dgx-spark-unified-floor-on-glmres branch October 13, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

host Host crates: qdot, threads, engram, engram-lab, runtime, sampler, levers, decision, vision, refset model The CPU engine and model files: crates/model, models, hf, gguf, tokenizer, jinja placement Placement planning: crates/placement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants