Repository navigation
Conversation
wow-miley
force-pushed
the
miley/pho-65-t13-lumossequence-as-serialisable-data-steps-of-look-form
branch
from
October 17, 2026 09:53
9834312 to
86c737f
Compare
… form / atmosphere / glyph, a shared clock with control(), captured by Oscilloscope and played by SignalGenerator from one definition Format (:phosphor-lumos): @serializable LumosStep / LumosTransition / LumosSequence with fromJson / toJson, a sealed LumosSequenceError that names the step, and a pure sample(seconds). One segment per step, named by the step; a step naming what the orb already shows applies nothing; names are unique. Clock: LumosSequencePlayer ticks while connected, uncontrolled and playing, dt capped at 0.1 s; control() hands time to an external driver. LiveFrameSource.follow applies steps; OrbStepper advances a player; LumosOrb(source, player) connects it while the orb runs. Capture and live: SignalGenerator.play(sequence | player); CaptureConfig.sequence and CaptureConfig.forSequence derive segments by stepping the same player at 1 / fps. A sequence capture is frame-identical to the cue capture it restates (FormSeamByteIdentityTest, StateMachineDemoSequenceTest). StateMachineDemo loads demo-sequence.json. docs/LUMOS_SEQUENCE.md documents the format. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…s skipped on Kotlin/JS like its peers Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e builds its OrbStepper, which now takes a sequence player before it Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…enceFollower behind closures in LiveFrameSource, SequenceClock on OrbStepper; the DOM bundle returns to 72 KB Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
wow-miley
force-pushed
the
miley/pho-65-t13-lumossequence-as-serialisable-data-steps-of-look-form
branch
from
October 17, 2026 10:46
0620b96 to
9382f89
Compare
wow-miley
deleted the
miley/pho-65-t13-lumossequence-as-serialisable-data-steps-of-look-form
branch
October 17, 2026 11:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #121 (PHO-65).
The gate (Task A)
Recon is in
.context/issue-121-lumos-sequence.mdlocally; the decisions that make this a wire format, for approval:ready→thinkingstraight intothinking→idle) and loops a state only on its first visit; Dots' "loop step with an arriving transition" model cannot say that. Explicit steps round-trip the existing segment list 1:1.samplereports no arrival for it. Loop steps rest where their one-shot landed. Glyphs always fire.TraceStateMachineresolves by name.Tasks B–E are built behind the gate so the format can be read against working code.
What's here
:phosphor-lumos—LumosStep,LumosTransition,LumosSequence(fromJson/toJson, sealedLumosSequenceError, puresample),LumosSequencePlayer(ticks while connected ∧ uncontrolled ∧ playing, dt capped at 0.1 s,control()/connect()return releases),LiveFrameSource.follow(player, clock),OrbStepper(…, player).Lookis now@Serializable.kotlinx-serialization-jsonadded tocommonMain; lockfiles regenerated and unchanged.:phosphor-trace—SignalGenerator.play(sequence)/play(player)/stopSequence(),CaptureConfig.sequence+forSequence(…),LumosSequence.frameLayout(fps); the trace'sparamSnapshotcarries the sequence JSON. Validation: exclusive with cues/segments,fps >= 10, every step at least a frame, clip holds one pass.:phosphor-lumos-compose—LumosOrb(source, player, …)connects while running and releases when off screen or paused.:phosphor-lumos-cli—StateMachineDemoloadsdemo-sequence.json;runStateMachineDemodepends onjvmProcessResources.:phosphor-core—AtmosphereChoreographer.transitionSpec(from, to)made public;timeline {}KDoc points here.docs/LUMOS_SEQUENCE.md.Proofs
FormSeamByteIdentityTest: the T3 20-frame clip restated as a sequence encodes to the same SHA-256 (with the cue config'sparamSnapshotput in place).StateMachineDemoSequenceTest:demo-sequence.jsonlays out to the oldBeatframe table and captures to the same cell columns, ambient, glyphs and ticks as the cue script; every step name resolves throughTraceStateMachine.SequenceCaptureTest: the live generator playing the sequence emits frame for frame what the capture recorded; two captures are byte-identical.Deviations from the ticket, flagged
CHANGELOG.md— AGENTS.md forbids one. KDoc onCaptureConfig.cues,Oscilloscope,SignalGeneratorandtimeline {}carry the notes instead.demo-sequence.jsonis the demo's existing 13-step state-and-form script, not seven PROPEL looks. A look baked into a loop drifts under rotation carry until PHO-59 (thePhaseCueKDoc says so), and the demo's seam tests measure that script. The format supports look steps; the demo doesn't dogfood them yet.Look. The phase→look table stays withCognitiveLookSwitch.Verification
./gradlew ktlintFormat :phosphor-lumos:jvmTest :phosphor-trace:jvmTest :phosphor-lumos-compose:jvmTest :phosphor-lumos-cli:jvmTest ktlintCheck --offlinegreen locally.kotlinUpgradeYarnLock/kotlinWasmUpgradeYarnLockran; no lockfile change. Web, iOS and Dokka are left to CI. The demo was not run interactively.🤖 Generated with Claude Code