Commit Graph

108 Commits

Author SHA1 Message Date
type-two
0f288beff3 THREADS: Sprint 11 gate 1 rulings — venturi (and a correction to my own probe), enum, carport price 2026-07-17 17:20:59 +10:00
m3ultra
bb393566c5 Merge Sprint 10: sites are data, corner block on night 3
Selftest on merged main: 296 pass / 0 fail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 16:43:26 +10:00
m3ultra
df1fd4dd25 Merge remote-tracking branch 'origin/lane/d'
# Conflicts:
#	THREADS.md
2026-07-17 16:39:27 +10:00
m3ultra
a7b859fbbf Merge remote-tracking branch 'origin/lane/b'
# Conflicts:
#	THREADS.md
2026-07-17 16:39:26 +10:00
m3ultra
73e142947b Merge remote-tracking branch 'origin/lane/c'
# Conflicts:
#	THREADS.md
2026-07-17 16:39:26 +10:00
m3ultra
a71d67e390 Merge remote-tracking branch 'origin/lane/e' 2026-07-17 16:39:26 +10:00
m3ultra
9578cde8a8 THREADS: SPRINT10 Lane B update — browser audit built + validated, ready for site_02
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:06:58 +10:00
m3ultra
def481d0c3 Post the site extraction; hand each lane its hook and B the setWorld ask
Records the venturi gap coordinates for C, the needsLadder mechanism-key for D,
the honest-quad geometry for B's audit, and the one Lane B API the site switch
still needs — rigging.setWorld(world) to re-point the clickable markers, already
called guarded from loadSiteInto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:05:58 +10:00
m3ultra
bb1106efec THREADS: SPRINT10 Lane B — answer C (porosity wired+proven), flag dress-source site JSON to A, tree offer to E
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:55:11 +10:00
m3ultra
d5569327c5 Measure the venturi's load cost for B's audit: gain 1.35 = +40%, forces shackles
Load goes as wind^2 but the funnel only fires while aligned, so gain 1.35 adds
+40% not +82% — a small quad in the throat peaks 1.99 kN, above a carabiner
(1.2) and under a shackle (3.2). The funnel punishes the cheap corner
specifically without being unwinnable: the corner block teaching itself.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:34:08 +10:00
m3ultra
7fb30b33dc Post the site_02 venturi handoff: axis derived, gap coords needed
Night 3 = corner block + storm_03b is the right pairing (the funnel teaches the
southerly, 03b is the southerly). Its post-change wind blows toward -1.08 rad,
so that's the venturi axis. Gave A/E the ready template needing only the two gap
coordinates, and flagged B that the venturi is a balance lever their site_audit
must include (gain is mine to tune to their sweep).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:31:23 +10:00
m3ultra
0cee198702 Price the carport trap and add its wreckage
The carport anchors have said collateral="carport" since Sprint 9, but the root
carried no collateral_value — so main.js, which reads world.gnome.collateralValue
for the gnome, had no number to reach for. A trap with no price is a warning
label. The root now carries it in the same shape and place, pinned above the
gnome's 25, with the proposed 180 and its reasoning as a named constant so Lane A
can argue with the number rather than the asset.

carport_01_wrecked is the payoff, on the intact one's origin for a mesh-for-mesh
swap: the pads stay (they were never the weak part), the frame racks over like a
parallelogram, the roof peels off downwind in one piece.

Two bugs found by measuring rather than reasoning, both now comments where the
numbers are: the beams were rotated when a beam spans the axis the frame racks
in, so it rides level — tilting it made the wreck taller than the carport; and
the roof sheets dipped below ground, which is what inflated the height. Asserts
now pin the wreck shorter than its twin and sitting on the grass.

291/0/0, Lane E 64 asserts, 40/40 output files byte-identical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:30:37 +10:00
m3ultra
b285bbd1b0 Log the work-field landing, the type-enum flag for A, and the site_02 block
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:29:13 +10:00
m3ultra
855106d37e Merge Sprint 9: clean $80 win asserted; guard redesigned; pyrrhic wired
Selftest on merged main: 287 pass / 0 fail.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:12:07 +10:00
m3ultra
d3258baaa8 Merge lane/d: keep B's nodeSpeed guard (same redesign, D holds veto)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 15:06:57 +10:00
m3ultra
1f25c05313 Merge remote-tracking branch 'origin/lane/b'
# Conflicts:
#	THREADS.md
2026-07-17 15:05:56 +10:00
m3ultra
b9bd65e67b Merge remote-tracking branch 'origin/lane/c'
# Conflicts:
#	THREADS.md
2026-07-17 15:05:56 +10:00
m3ultra
e8fa8a736e Merge remote-tracking branch 'origin/lane/e' 2026-07-17 15:05:56 +10:00
m3ultra
3e769dbae9 THREADS: SPRINT9 Lane B — retract the p1 claim to C, guard redesign for D, the graybox-yard trap
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:01:49 +10:00
m3ultra
1fc8b8e453 Log the guard redesign and the site_02 ladder audit
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 14:32:36 +10:00
m3ultra
4d4f2d7d7f Add carport_01 for site_02, and the pyrrhic end card
carport_01 is site_02's dressing and its whole design. DESIGN.md wants the
corner block anchor-poor, and the interesting way to build that isn't to give
the yard nothing — an empty yard is just a smaller yard. It's to give it
something that looks like four free anchors and isn't. Light posts on small
pads, a beam sized for one sheet of roofing: tie 25 m2 to it in a southerly and
you take the carport, not the shackle. Ships with the worst ratings in the game
(beam 0.22 vs the fascia's 0.35) and collateral="carport", pinned in e.test.js
below the fascia with the reason attached, so nobody quietly fixes them upward
and turns the site back into a small yard.

The pyrrhic card is the third outcome on the same camera: dawn, bed green, gnome
standing, sail post down across the yard behind him. Warm light on purpose — a
pyrrhic result is a win, and the wreckage is the price, not the verdict. Copy
goes to Lane A in THREADS; cardpreview renders all three.

277/0/0, Lane E 60 asserts, 39/39 output files byte-identical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 14:29:08 +10:00
m3ultra
553d3edd94 Post B's paired-landing recipe and A's site-venturi schema
$80 win re-verified on rebased main (porous + 0.40, hp 52, 1 lost). Not
flipping 0.40 until B's fabric is selectable — the win needs porous cloth.
Handed A the site-JSON venturi shape to wire from their extraction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 14:28:11 +10:00
m3ultra
0d8e36ba0f Post the pyrrhic ruling and answer Lane C's two flagged calls
Both yes, with reasons: the 25%-cover squeak-win is decision 13 paying off
rather than a loophole, and the repair becomes the margin instead of a toll —
SPRINT6's "the line must need the repair" is retired, since enforcing it means
tuning so the best rig always breaks. C gets the go on 0.40, paired with B's
fabric per SPRINT9 decision 2.

Also logs the ninth harness artifact: read 274/0/0 off another session's tree
because my server died on a bound port. The pass count not moving when I added
two asserts was the tell.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 14:20:06 +10:00
m3ultra
704553c82d Merge Sprint 8; the week is live; balance harness stabilized
Selftest on merged main: 274 pass / 0 fail. Trend guard demoted to warn
pending B+D redesign (ponding vs held-clock windows).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 14:02:53 +10:00
m3ultra
d3bb7c2a93 Merge remote-tracking branch 'origin/lane/d'
# Conflicts:
#	THREADS.md
#	web/world/js/tests/balance.test.js
2026-07-17 13:39:44 +10:00
m3ultra
0966aebeee Merge remote-tracking branch 'origin/lane/b'
# Conflicts:
#	THREADS.md
2026-07-17 13:39:44 +10:00
m3ultra
a398d152b1 Merge remote-tracking branch 'origin/lane/c'
# Conflicts:
#	THREADS.md
#	web/world/js/hud.js
2026-07-17 13:39:44 +10:00
m3ultra
f66c1835b4 Merge remote-tracking branch 'origin/lane/e' 2026-07-17 13:39:44 +10:00
m3ultra
422e0760d2 Gate 0': the wild night IS winnable — found the $80 line B ran out of budget for
Swept all 299 bed-covering quads settled: only p1,p2,p3,p4 is holdable, wins
outright ($90 today). Porous shade cloth + downdraft 0.40 drop p1 under the
carabiner tier → the same win at exactly $80. Both levers needed; neither moves
a tier alone. Not flipping 0.40 unilaterally (B's balance pen, needs fabric
wired first) — offered it. Flagged two design calls (25% thin-cover win, wins
without a repair) for A+B.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 13:22:18 +10:00
m3ultra
669038c82c Log gate 0' closed, the retraction, and the pyrrhic-win recommendation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 13:19:42 +10:00
m3ultra
d8af945d91 Post the week; close the grass-atlas and screenshot-POST decisions
grass_atlas.png binned (six sprints, zero refs, Lane E's own recommendation).
Screenshot POST declined — yardshot works standalone, so it buys convenience not
capability. Saying no rather than carrying either an eighth sprint.

Also records the two economy questions the harness can't settle, and the reason
to distrust my own curve: the bad-player model returned fixed gear value
regardless of spend.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 13:14:53 +10:00
m3ultra
cd59e09368 Log gate 0' closure: harnesses agree, the shop is the cause
Live game and suite now agree (hp 58/57, 2 lost). A's number was right,
their corner count was the miscount, and my phase-contamination
hypothesis was wrong. None of the three candidates flips it because
holding all four corners costs $105 on an $80 budget. Hands A the
pyrrhic-win call with a recommendation, and records why D's settle guard
had to be a trend test (the cloth breathes and never converges).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 13:11:17 +10:00
m3ultra
0a80f902e2 Hand Lane A a rendered, paste-ready end-card screen
The lane's brief is "whatever the week's cards need, nothing else", and it's
blocked on the week — so the useful answer to "what do they need" was the wiring
A would otherwise write at the end of a long sprint.

tools/cardpreview/index.html renders both end screens from the JPEGs already on
disk with the drafted copy: headline, sub, kicker, tally, button. The CSS sits
between CUT markers to paste into hud.js, and the COPY object swaps out for a
real week tally. Both screens were screenshotted before handing over, so it's a
tested snippet rather than a hopeful one.

The left scrim only deepens the third the art was already framed to leave empty,
so the yard stays visible behind the score, and the win headline is warm against
the loss's flat white — the diptych should tell you which you got before you
read a word.

No assets touched; Lane E is 57/57 green on merged main.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 13:04:50 +10:00
m3ultra
465bba59a1 Merge Sprint 7 lanes; implement the settle in fly(); gate 0 down to one variable
hp 36 -> 59 through the suite (A's 58 reproduced). Corner count (2 vs 1)
is the last open variable; the assert stays red as the true state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:56:50 +10:00
m3ultra
291270169f Merge remote-tracking branch 'origin/lane/d'
# Conflicts:
#	THREADS.md
2026-07-17 11:51:57 +10:00
m3ultra
abeefad72d Merge remote-tracking branch 'origin/lane/b'
# Conflicts:
#	THREADS.md
#	web/world/js/tests/balance.test.js
2026-07-17 11:51:44 +10:00
m3ultra
2a753a1570 Merge remote-tracking branch 'origin/lane/c'
# Conflicts:
#	THREADS.md
2026-07-17 11:49:48 +10:00
m3ultra
a223a84691 Gate 0 corroboration + the fabric-hail answer for B
Third harness agrees with the suite (2 lost); the two breaks are independent
(t=15.3, t=58.9), so no repair reaches 1-lost; debris makes zero difference
(A's inversion thread crossed off). Delta is in main.js's rigSail/tension path.
Plus hailBlockFor delivered to B with the wiring formula and the rain-weight
ruling (don't raise it).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 11:32:10 +10:00
m3ultra
865a6ad97f Gate 0: name the cause — the rig must settle before the storm
B asked for the rigSail/RiggingSession check and said to say so if it matched.
It matches: their hypothesis is refuted, A scored the rig they bought. Kept
digging and found the actual cause, measured with one variable on fresh pages:

  0s settle  -> 2/4 intact, t2 peak 4.54 kN   (what fly() measures)
  12s settle -> 3/4 intact, t2 peak 1.71 kN   (what a human gets)

A plays through prep so the yard reaches steady state; fly() rigs and advances
in the same tick, so the storm lands on trees still at rest. The corners that
spike are t2/t2b — both tree anchors — while the posts load LESS, so the
transient is mostly tree-sway, not cloth. It also explains B's four identical
tensions: the transient swamps tension, which settled is worth 2.75x.

Not landing a fix — gate 0 is A+B's pen. Also answering A's testkit call: Lane
D's suite has no async tests and no skips, and I proved the new guard fails
before trusting it to pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 11:26:54 +10:00
m3ultra
f8710b56bc Sweep and taper the tree limbs; pin the anchors that ride them
Each limb was one straight uniform tube — a peg poking out of a pole, and the
most visible art problem in docs/yard_day.jpg. They now leave the trunk thick,
sweep up on a bezier and taper to nothing, which is what a gum does. +96 tris on
gum_01, silhouette bounds unchanged.

Nothing physical moved. The tip is a bezier endpoint and the four rng draws per
branch are the same four in the same order, so every branch_anchor_* is
bit-for-bit where it was — verified before and after, all five identical to 6dp.
Lane A's winning line rigs off t2 and is untouched; no balance number can shift.

e.test.js now hard-codes those five world positions as a tripwire, so no future
art change of mine can quietly invalidate a sprint of someone else's physics. If
it goes red, the art moved an anchor — fix the art, not the numbers.

Card text and the dawn-tint treatment go to Lane A in THREADS. The tint is a CSS
snippet rather than a ninth texture: only two of my eight are consumed, and a
full-screen gradient needs no asset at all.

Selftest 262/0/0, 38/38 output files byte-identical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 11:25:03 +10:00
m3ultra
09e5083515 Post the gate 0 post-mortem: camera guard, my undeclared tension, fake skips
Names the cause (camera-less skyfx zeroing the hail shadow), my own error (a win
reported without its tension), what remains open (the corners half, with the next
two suspects), and the testkit find that let the dispute survive a merge — skips
recorded as passes, including two of my own router tests that have asserted
nothing for two sprints.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 10:21:39 +10:00
m3ultra
166f95c839 Log gate 0: A's win refuted, cause named, next search specified
Rules out shelter, tension, drain wiring, yard drift and sway by
measurement; the cause is arithmetic (t2 peaks 4.4-4.9 kN vs a 3.2 kN
shackle, and hp=36 is the bare-bed constant). Hands A a one-line check for
the suspected phase-boundary artifact, and specifies the cheap
peak-load-per-quad filter that either finds a winnable line or proves the
yard needs another anchor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 10:10:52 +10:00
m3ultra
676b58a2bb Merge Sprint 6 lanes; wire hidden_by_default; document the balance harness dispute
Selftest on merged main: 263 pass / 0 fail (winnable-line assert self-skips
pending SPRINT7 gate 0 harness convergence).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 09:47:29 +10:00
m3ultra
26529eeb58 Merge remote-tracking branch 'origin/lane/d'
# Conflicts:
#	THREADS.md
2026-07-17 09:35:12 +10:00
m3ultra
7025ea847e Merge remote-tracking branch 'origin/lane/b'
# Conflicts:
#	THREADS.md
2026-07-17 09:35:12 +10:00
m3ultra
4180e188e2 Merge remote-tracking branch 'origin/lane/c'
# Conflicts:
#	THREADS.md
2026-07-17 09:35:12 +10:00
m3ultra
903e1d5f95 Merge remote-tracking branch 'origin/lane/e' 2026-07-17 09:35:12 +10:00
m3ultra
a0cf23dec8 Log gate-1 lever sweep (declining the downdraft), the porosity ruling, variants
Independently corroborates A's p4 finding: downdraft is the weakest lever
(-4.9% vs porosity's -15%), so storm_02 stays at 0.45. Answers B's blocked
hail-porosity question with the physics and three honest alternatives. Hands A
the week's variants and forecast uncertainty.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:32:42 +10:00
m3ultra
08a1d95903 Add night dressing and end cards; fix the hide_render bug
hide_render does not survive glTF export — verified in three r175, every node
arrives visible:true. So garden_bed has been drawing plants_full, tattered AND
dead superimposed since Sprint 1, and my THREADS note told Lane A the opposite.
The asserts missed it by checking the nodes existed rather than that only one
was on. The flag now rides in extras, which does export, and consumers apply it
in one line; e.test.js pins the flag instead of the node.

Night dressing: house_yardside gains window_glow, an unlit emissive pane marked
hidden_by_default, plus window_light_anchor. A warm window means someone is
inside, which is why the player is out in the dark keeping the sail on. Plus a
moon sprite whose halo, not its disc, is the part that survives cloud.

End cards are rendered from the game's own props as a diptych: identical camera
and yard, only the night's outcome differs. The left third is left empty for
Lane A's text.

Cards are opt-in behind --cards because EEVEE's shadow pass is not
byte-reproducible across processes in 5.1 — proven with a minimal repro, not
PYTHONHASHSEED, and present even with a hard sun. The dawn shadow is the art, so
the cards become committed art rather than build output. Everything the game
loads stays byte-identical: 38/38 verified.

Selftest 241/0/0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:28:26 +10:00
m3ultra
96cd9f0f97 Log gate 1's real blocker, correct my own bad number, brief D and C
The wild night's blocker is geometry, not drain weights: the best
bed-covering quad puts 7.4 kN on p1, above the 6.5 kN rated shackle, so
no loadout at any price holds it. Re-orders the lever list toward load.

Also corrects an hp=99 I measured in-page (the phase machine re-rigs
after rigSail, so I scored a rig I hadn't chosen), posts D the real pond
masses for douse calibration, and asks C the hail-vs-porosity question
before coding fabric choice.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:26:34 +10:00