What PPortal shipped.
Every entry in docs/CHANGELOG.md, read at d376f56 and dated by the commit that wrote it.
- PP63 · 80cf9bfnothing in the tree can configure a Qt build carrying WebEngine, so PP46's before cannot be produced at all
reference-build-msvc.ps1 builds the WebEngine Qt client from e4e482e7; measure-startup exits 0 on it, 208.6 MB of Chromium present (design recorded in
tools/measure-startup/README.md). - PP858 · d132e07the rumble intensity and haptic override sliders change nothing in a session
A stream run reads the Controllers tab's rumble intensity and haptic override from the store and hands them to the haptics player and the actuator matrix.
- PP857 · 1b654b4a console set to haptics Off still drives the pad, because the intensity it raises is held and never read
The console's haptic intensity reaches the haptics player as it arrives, and Off now silences both the rumble fold and the actuator waveform, stopping a rumbling pad once.
- PP856 · 2dba27cno workflow builds the installer or attaches it to a GitHub release, so every installer comes off one desk
release.yml builds through compile.cmd and package.cmd on a runner, refuses a tag the exe disagrees with, and drafts the release with the installer and SHA256SUMS.txt.
- PP855 · 2cf56c5the picture smears for the rest of a scene and nothing asks for a keyframe, because no loss the port counts occurred
The live video receiver now gets the slice parser and the run's IDR flag, so a P-frame without its reference is dropped, its gap reported and a FEC failure asks for a keyframe.
- PP852 · 4974aedRawBody reads a block-commented function as a real one, and nothing checks that the C contains none
CFunction now finds block-commented definitions and bodies whose comment braces do not balance, and a test sweeps lib/src and shim for both on every run.
- PP850 · 14f3b68a call-shaped check names the whole argument list, so an added argument breaks checks about something else
CalledWith asks a callee and a prefix of its arguments, with the argument boundary the hand fixes lacked; four checks converted and the reader is not C-only.
- PP849 · ac50227the prose census states its four per-verdict counts in a docstring, and the method deriving them has no caller
the breakdown is qualitative now and the one number left, the fragile four, is held against Count in the census's own test (design superseded: Count had three callers, all in that test).
- PP848 · 913753f51 files credit PP696 and PP763 reverted it whole, so no check can tell a live attribution from a dead one
PP696's ledger entry names the revert and the three that put each half back, so one write answers all 92 mentions and a check holds that write.
- PP847 · 6e672d7the function-body reader keeps comments, so a note inside a body is a use and a check finds its own explanation
Body strips before it counts braces and RawBody is the named door; 160 call sites get the safe answer and the two that are about a comment ask for one.
- PP846 · 8baf264the console's haptics reach no motor: HapticsRumble and DualSenseEffects are modelled and neither has a caller
the fold reaches a motor at last: three strengths averaged every thirty milliseconds, routed by the pad's own vendor and product, and one zero to stop it.
- PP845 · ad182d0PadTranslation writes buttons, triggers and sticks only, so a PS4 or PS5 pad's touchpad and sensors reach no console
the three touchpad events reach PP129's tracker and sensor updates reach PP130's, scaled by the console's own pad, and the run reports which halves arrived.
- PP844 · c7ef773a check's control names a file a prepared deletion aims at, so it goes red about its own fixture when that lands
each control's file is declared with its polarity and held against what an arranged deletion claims and against the build graph, so one aimed at is answerable before the commit.
- PP843 · 45325c4ShimFramePathShape says the flip has happened and the option is off, and PP763 put the four files back
the flip state is read from the build files and the loaded shim and held against the class's own claim, so a revert that leaves the prose is red.
- PP842 · 44932ddthe frame path's oracle has no recording, so the flip that must turn it off to delete takion spends it
tests/oracles/framepath.json holds what jerasure, the frame processor and the video receiver answered, and six comparisons now run on every build instead of declining with the C.
- PP841 · 6e23508the shim's takion wrappers are not behind their define, so the flip that deletes the C cannot be one commit
Five regions of the body carry them behind an option that is on by default: configured off the shim links, exports 25 fewer and still answers the guard.
- PP840 · b9d818fopening the microphone makes Windows duck the stream's own audio, so the game the port is playing goes quiet
The render session's opt-out is asked and reported; Windows 11 26200 accepts it and ducks anyway, so the run says which and the docs name the setting that works.
- PP839 · 8ce5762the capture pump outlives the takion, so a session ending with the microphone open throws and kills the process
The capture stops when the run returns and a closed takion refuses there: a 20-second run sent 1601 mic packets and ended clean, where the same one crashed before.
- PP838 · 711c41fa pad connected after the stream starts is never opened, so it works only if it was plugged in first
SDL's device-added event now reaches an open on the pump's own thread: a run that began with no pad ended holding an Xbox Series X Controller, 1 adopted and 156 states pushed.
- PP837 · 718684fno live run has opened the microphone, so nothing says a console accepts the packets the port now formats
A run with --microphone sent 1601 signed mic packets and the console kept streaming: 828 frames decoded and 807 shown beside them, with the canceller in the path.
- PP836 · 459943bthe ported fullscreen state machine has no consumer, so nothing in the app can go fullscreen
F11 toggles as handleShortcut does and alt+enter as Windows does, driving PP11's state machine onto the run's window: the minimum pinned, and adjustable a second after.
- PP835 · 9a079ddthe picture waits on SDL opening a pad, so connecting one after the stream starts freezes the window
A person plugged one in mid-session and the picture neither froze nor stopped, so the freeze is gone and the death at 741 arrivals did not recur with it.
- PP834 · 4cf891cthe relay records only what the console sent, so no capture can answer what the port actually put on the wire
A second writer takes both directions off the relay callback, leg per row: a relayed run wrote 4565 datagrams, 318 sent by this machine, and the replay corpus is untouched.
- PP833 · 0713640the audio engine is fed one frame at a time as they decode, so a late frame empties the queue and the sound gaps
A prefill holds the first n frames and releases them together: ten read 0 and 1 dry against 0 to 17 without one, five changed nothing, and it stays off unless a run asks.
- PP832 · 52b30c7the stream report never says how many IDR requests went out, so a corrupted picture cannot be read back
StreamOutbound counts the requests, the refusals and the reports beside them, and the run prints all four: a 20-second session read 0 requested against 28 frames lost to the network.
- PP831 · 3dbcbe1no check joins a managed send's arguments to the C call it ports, so an inverted pair passes every builder test
A check reads the C's parameter names off takion.h and compares each argument's KIND - constant against constant, varying against varying - so the inversion that shipped twice is refused.
- PP828 · 74b0ee1the copy off the decode surface is known to exist and untimed, so the FFmpeg decision still has no total
The GPU clock says ~25us a copy - 25.3, 28.9, 25.1 over 64-copy batches - so Media Foundation totals ~775us and the copy is 89 times cheaper than d3d11va's readback.
- PP825 · e8a14e3the microphone's packet is built and no takion sends one, so PP676's mic layout has only tests as callers
ManagedMicrophone runs a WASAPI unit through the canceller, the encoder and audiosender.c's window into SendMicrophone; --microphone opens one, off by default.
- PP824 · 9592675the stream's arrivals never set the ack sink, so a live session answers no data message the console sends
The root hands the arrivals the takion, and two live runs streamed through it: 81 signed acks at key_pos_local, 958 frames drawn, and no teardown where 1170 unsigned ones ended a session.
- PP821 · e791f7dthe shim downloads every hardware frame to system memory and uploads it back, including d3d11va's own texture
The decoder is put on the presenter's device and the frame goes over as a texture: 931 decoded, 911 shown, the round trip gone and the picture unchanged.
- PP784 · 3520634senkusha runs before the stream phase and calls four of takion's exports, so the transport cannot leave with it
session.c had two arms and a console said they agree at 1454 both ways, so the callback is the only one now and senkusha.c has lost its last caller.
- PP30 · 48d825fforward error correction is two vendored C libraries doing Galois field arithmetic per lost packet
gf-complete and jerasure are out of the build: sixteen vendored C files gone, the link line, the option, the find module, and the field init in chiaki_lib_init that outlived every FEC caller.
- PP27 · 6c9da1ftakion.c is 2007 lines of C over raw sockets and timers, and the whole stream rides on it
Twelve files leave lib in one commit and not three - videoreceiver.c holds two of streamconnection.c's symbols - and a live PS5 session showed 943 frames afterwards.
- PP830 · 6350e6athe stream dies within 85ms through the relay, so a capture holds the handshake and none of the traffic
The stream phase dialled the console while the session went through the relay, so it rode past the forwarder; pointed at the target it carries 10521 datagrams over twenty seconds.
- PP829 · 03265abthe relay never carries senkusha's handshake, so a capture through it dies before the session reaches the stream
Senkusha's port is forwarded now, so a session through the relay completes its first handshake and measures the link instead of timing out on loopback.
- PP827 · 3ffee9fthe port sends the BIG whole where the C splits it against the MTU, so a long launch spec leaves as one datagram
The sink cuts the BIG against senkusha's own MTU and sends the fragments through both takion exports, the last one carrying the end-of-message flag.
- PP826 · f741ca8PP818's whole margin is a readback it did not measure, because no renderer has taken one of its textures
The decoded surface is D3D11_BIND_DECODER with no shader-resource bind, so a renderer cannot sample it and PP818's readback of none is wrong.
- PP823 · 898184aevery send takes its key position from the receive ledger, so the MAC is stamped where the console never advanced
ManagedTakion keeps key_pos_local now, advanced at each of the four sizings the C passes, so a send's position counts what left rather than what arrived.
- PP818 · 7130cc6no Media Foundation decode has ever been timed, so 87.6 MB of FFmpeg is weighed against a guess
Paced, Media Foundation decodes a frame in about 750us and pays no readback, which is second of four and beats both paths it would replace.
- PP817 · 26526c5the GCM tag is a hand-written GHASH, and the only thing ever asked about it was AesGcm's contract
CNG takes the block-sized nonce AesGcm refuses and reports 12-to-16-byte tags, so the crypt's GMAC is the platform's now and the hand-written GHASH is its oracle.
- PP814 · 040208bnothing reports whether audio dropped, so a crackling stream and a clean one read identically
The engine's own queue depth is the only thing that knows, and it says a live run ran dry seven times in twenty-four seconds while every decode counter read clean.
- PP813 · 1fb3e79the port's senkusha gets the bang then loses every pong, so the RTT test answers Unknown and the link is unmeasured
senkusha's data_type is takion's CHANNEL and the port spent it as the chunk flags, so every command left on channel one - acked by a console that then echoed nothing.
- PP812 · c410f68the datagram capture taps the C's takion and the port opens its own, so a run without a relay records nothing
The managed dispatch fills the capture now, so a run without a relay records the port's whole stream where it recorded nothing.
- PP811 · e94791dthe ported send path has no caller, so a live takion stamps its MAC and sends with no lock across the two
ManagedTakion's four sends go through the ported paths now, so a live takion signs under gkcrypt_local (design superseded: the C unlocks between the MAC and send_raw, so the send is outside).
- PP809 · 7bdb0d5no path installs a senkusha phase, so every session still measures the link with the C's run
The live run reaches MtuOutMeasured and the session carries the port's own numbers - rtt 5721us and 1454 both ways - which the C's fallback triple is not.
- PP807 · 3ca5636the port never sends the data ack the C sends after a drained message, so nothing tells the console it arrived
Senkusha's router acks what its queue releases and nothing else, through the path PP811 wired; the stream's own join still waits on a live run.
- PP820 · c9a86a4the ring, the drain and the pump are built and never started, so the code the click came from is still in the tree
AudioRing, AudioRingSink, AudioPlayback and WasapiRender are gone with their tests, and a live run still plays every frame it decodes - 3330 of them, none lost.
- PP816 · e72fccfthe port hand-rolls a ring, a drain and a pump over WASAPI, and two attempts to make that path lossless both failed
A listener reports the click gone: 4846 decoded, 4846 submitted, every sample played or queued over sixty seconds against a console in a game.
- PP815 · f7d45f3the audio ring is written by the receive thread and drained by the pump with no lock, so its cursors and fill tear
Write, Read and Reset run under one gate, so a drain cannot take a span the writer's eviction is moving; the assertion reads bytes, because no counter could see this.
- PP808 · 9e98218nothing raises a takion disconnect, so a wait on a transport that died runs its whole timeout
ManagedTakion raises it at the C's own
beach- every exit the receive thread has, and the close - once per takion, and both composition roots hand it to the arrivals that were waiting. - PP806 · 31cdf61the stream driver reads any .InstallOn( in a path file, so a second seam's install answers the stream's question
A session path that composes its own must now name the stream's seam as well as call the install, so a senkusha phase installed beside it answers nothing.
- PP805 · d8e016fsenkusha's four arrival arms are called by tests alone, so a run driving a real takion ends every wait in a timeout
A datagram now walks to the arm the C's callback would reach, an ack calls the arm once per released number, and the wiring ties the knot a run over a real takion needs.
- PP804 · 7904189senkusha's ack expectation is set around the send where the C sets it inside one, so a fast ack meets the wrong number
The state, the send and the wait now run under one lock, so the number is written BY the send and an ack arriving mid-send blocks instead of meeting a number nobody awaits.
- PP803 · 1be4e2ethe two arranged flips are checked by reading text, and nothing ever builds the shape either one leaves
flip.cmd builds chiaki-unit as either arranged deletion leaves it, in a build directory of its own - and both shapes link, which PP786's repair had only ever been read about.
- PP802 · 6e48d4cPP785's sixty takion guards are named by no census row, and the closed-list check cannot see a guard it never heard of
The takion wrappers are three declared guards with nineteen rows, so the sweep can see them at all: the floor the gate prints goes from 35 declined assertions to 88.
- PP801 · ffeb083two of the three paths that open a session install no phase, so the captures and the front door stop where the port runs
The captures and the front door install a phase before the session starts, and a closed check names any path that opens one, means to stream and does not.
- PP800 · 93c1f6eSeamReach counts an implementation that no path in app ever constructs, so a sink only tests build reads as reached
A third axis asks whether an implementation is ever built, in both of C#'s spellings, and it found a ported send path with no caller on the commit that wrote the check.
- PP798 · 4d5f835one access unit per session is refused by the decoder and the log says which error, never which frame
A refused unit is recorded with its ordinal, its size and whether anything had decoded yet - which is the fact that tells a first unit before the codec's extradata from a corruption mid-session.
- PP797 · 6c432a4the console's audio reaches a receiver whose output goes nowhere, and nothing drains the ring into a speaker
The root's audio arm is an opus decoder writing into the ring, and a drain above the renderer moves it out on the engine's cadence - filling to two buffers and clearing past three.
- PP796 · 617d943a stale suite binary is a warning and the floor then fails naming ffmpeg, so it reads as a shrunken suite
A binary ninja says is out of date ends the run, so no count is read off the previous build; and where a suite did shrink, the stale case is ruled out before the build option is named.
- PP792 · f9dfdfcsession.c runs senkusha itself and there is no callback to hand it to, so a managed run is unreachable
session.c asks for an installed run before starting its own, and the three measurements cross with the outcome that decides whether they are used; the C's run stays as the other arm.
- PP799 · d1c72eathe port streams and never says it connected, so a window waiting on the event holds a spinner over a live picture
The composition root attaches PP747's router now, and the run's CONNECTED travels on to the session's own handler - so a caller hears the port's stream as it hears the C's.
- PP795 · 5755f95the takion takes its AV arm at construction and the keys arrive with the bang, so video reaches nothing
The arm is installed where the C installs its crypt - inside the keying - and a live console went from zero decoded frames to 2675.
- PP794 · a0ea56ethe record says one export dies with the flip and a trial says four, because the measurement counted prose
Four, measured through a sweep that reads code - and the idr request is the one PP758 was right about, referenced through the shim.
- PP793 · 6b91df3the export sweep counts a symbol named in a comment as a reference, so prose keeps dead C looking alive
The sweep reads code and not text, and seven exports that prose alone was holding alive are now on the record as dead C nobody has decided about.
- PP791 · 24240b4nothing implements senkusha's run host or turns its arrivals into the flags its waits end on
ManagedSenkushaRunHost drives the run over the port's own takion, with the six protobufs written, a raw send for the pings, and senkusha's three waits moved out of the unported group.
- PP790 · bc2fbd7chiaki_senkusha_run's sequence has no managed counterpart, so the ordering that is its behaviour cannot be held
The nine calls in the C's order over a host that records them, and three exits that differ in whether the console is told at all.
- PP789 · 023e672senkusha's three measurements have no managed model, and they are the numbers the launch spec spends
The average divides by the pings that answered, the two searches start apart and answer with the floor, and the timeout is five round trips clamped.
- PP788 · dd2ca90senkusha's nine states and the flags its waits end on have no managed model, so nothing can drive its run
Nine states, eight reachable, and the predicate reads two of three flags - each held against the file, so a repair upstream turns a check red.
- PP787 · 873e0b5the decoder is reachable only through the C's video callback, so a managed run has no way to hand it a frame
The C's own sample callback is reachable with the same decoder, and its managed shape is the delegate a composition root already takes.
- PP786 · ac7915fthree of the C suite's files exercise takion directly and the case floor counts them, so the deletion drops it silently
CHIAKI_UNIT_HAVE_TAKION guards the three suites, each switch answers for its own files, and the allocator wrap follows allocbudget.c - the link failure both flips had.
- PP785 · 5503821the shim's eighteen takion symbols are the oracle, so the deletion takes away what proves the port right
tests/oracles/takion.json holds what the C answered for the queue scripts, the send buffer, the MAC gate and both AV parsers, and the managed four are compared against it on every build.
- PP783 · f86d7c5session.c runs the stream itself and nothing in app installs the port's phase, so PP295's four files cannot leave
session.c stops asking and StreamRun installs the phase; a live PS5 gave 890 shown against the C path's 972, with the pad's sink armed and pushing.
- PP782 · 7314f6dthe deletion's blocker list names six lib files and the link answers four, two of them never reaching it
Four, and the two that came off are kept beside it with the reason each is not a blocker - one permanent, one true of this tree.
- PP781 · 55ba715the deferral line still says the suite never calls the two broken queue functions, which its section retracts
The line carries the corrected sentence, and a seventh fact refuses the retracted one on PP107's own row rather than in its section.
- PP780 · 6cd15b7nothing counts what deleting takion's three files leaves undefined, and the biggest consumer is this port's oracle
Twenty-four symbols across eight units, in three groups - and eighteen are the shim's, which is the oracle the deletion would take with it.
- PP779 · 455a38fevery arrival is appended to a list nothing releases, so a session holds one reading per datagram
A ring of the last thirty-two, and twenty thousand arrivals through the AV path allocate zero bytes, measured.
- PP778 · bb9d153every stream message goes out with the data type in the chunk flags and the channel left at zero
The data type rides in the channel field and the flags are the constant one, so a console reads each message where it looks for it.
- PP777 · 8cdda94the BIG's launch spec is hidden with a zeroed rpcrypt, so the console acks it and never bangs
The crypt, the mtu, the profile and the target come off the session, and a console answers the spec with a bang it accepts.
- PP776 · 5520cb8a seam filled by a refusal reads as reached, so the sweep cannot tell a stub from an implementation
A seam every one of whose fillers has a constant-bodied member is reported as filled by a stand-in, which the type graph cannot say.
- PP775 · 47a6e2ethe state wait restarts its whole timeout on every pulse, so anything pulsing faster than it never times out
The wait honours an absolute deadline across every wake, so a 300ms timeout under a 5ms pulse now returns in 320ms where it used to return never.
- PP774 · cb9ec4ethe run enters four states without clearing the flags, which its own model requires of the C
The run clears both flags at all four state entries, in the C's position - after the state and before the action - and PP746's driver stops setting finished once.
- PP773 · 8cdda94nothing turns a takion event into the host's signal, so every state the run waits on times out
A live PS5 keyed the session and announced the stream: the bang and the streaminfo each finished their state, and audio arrived on the run's own thread.
- PP772 · 8d2b1b5the rung report stops at congestion control, and the six steps after it are where a live run now fails
The walk climbs its own eleven-step ladder beside the teardown's six, and a live run now names the step it stops at: CongestionStarted, the wait after it.
- PP771 · 7b4cf6athe phase lets a caller pick the port and the first one picked 9295, so a console answered nothing at all
The phase takes an address and aims at 9296 itself, and the same handshake then completed with a real PS5 first try each way - the run now stops at CongestionControl.
- PP770 · 4cafbccthe run collapses every rung's failure into Unknown, so a live one cannot be told from any other
The run carries out the rung its cascade already computes, so five failures that answered one code now say which of the five, and the old one-argument shape is unchanged.
- PP769 · 86e254athe managed run opens its own socket and the console's stream rides the one senkusha left, so a handover fails at once
The socket crosses the trampoline, the runner and the host, and the takion adopts it without owning it; a live handover now reaches the run instead of failing at the connect.
- PP768 · 3674bbbthe phase frees its handover while the runner still waits on it, so the gate crashes intermittently
A cancel that sets the flag before both signals, a runner that reads it rather than building, and a Dispose that joins first and leaks rather than freeing under a waiter.
- PP767 · 6022ffcthe driver check counts a call inside a class nothing constructs, so a phase nobody uses reads as a driver
The port's half is a path that opens a session and installs on it, so a composition root nothing constructs no longer reads as a driver.
- PP766 · 13125c6a managed BIG needs four things out of a live session - the id, the handshake key, senkusha's numbers and an ecdh pair
Four shim readers over fields the C holds, each answering null before a session has one, and a real BIG of 1346 bytes built from what they return.
- PP765 · a18ed1cthe run host takes eleven parts and nothing says which a live session supplies, so the wiring is unsized
Eleven rows held against the constructor by reflection: none is missing, two reach into the session, and the BIG is a factory every test has been handing a heartbeat.
- PP764 · 01ab86cthe gate passes on a tree whose stream phase has no driver, which is how it shipped a client that cannot stream
The C's run and the port's install are read together as four states, and putting session.c back the way PP696 left it turns the gate red on Nobody.
- PP763 · a546b61the frame path's deletion shipped and left no way to stream, so the four files and the C's run are back
The four files, session.c's run and the floor are back and a five-second capture records 4025 datagrams again; the callback, the trampoline and the runner stay unused.
- PP762 · 07c34a4the stream phase is a callback now and nothing installs one, so a live session ends at senkusha
The eleven parts compose in one class, the runner's thread goes up before the install, and the BIG is built late and refuses by naming which of its four pieces is missing.
- PP761 · ee2aba3two readers hold lib's build list and session.c's reason line, which the deletion rewrites
Both read the shape first, and a second trial of the whole deletion leaves only the two new exports the port has yet to import.
- PP760 · bab20f0test/main.c names the four suites unguarded, so removing their files breaks the link
The four suites sit behind a switch the test target defines, read in both directions; the suite still runs 149 cases, which is the no-op it should be.
- PP759 · f95cc78the handoff names the call it replaces and not what replaces it, and lib cannot reach the shim's handover
The callback's shape, the borrowed reason, the sliced wait and the stop's replacement are written and asserted, so PP696 writes against a contract.
- PP758 · 5b592b8PP696 may edit no test file, and twelve assertions still demand the calls and files it deletes
Twelve assertions in seven classes ask the shape first, and a trial deletion runs the managed suite green on both sides of the flip.
- PP757 · f6147e3the port's resting feedback state is ten zeroes and the C's is not, so a still pad reports free fall
FeedbackSnapshot.Idle rests under gravity as the C's does, asserted as a round trip off a fresh state rather than against a constant of this side's own.
- PP756 · e377658the pad's state goes to the C session, and the deletion leaves that call with no feedback sender to reach
PadFeed takes an IControllerStateSink, satisfied by the C session and by a managed sink over the port's own sender; gyro and accel now read back in one call.
- PP755 · 378a353the disconnect reason is parsed and the host holds no field for it, so the runner takes it as a parameter
The host carries the reason where the C keeps it, set with the flag in one call as the disconnect handler sets them, and the runner reads it rather than being handed one.
- PP754 · 3d248c8nothing in the application builds a run host or calls the run, so the deletion would leave it with no streaming
ManagedStreamRunner waits on the seam, builds the host from parts a caller supplies, runs and reports both values - so a session thread handing over is answered rather than timing out.
- PP753 · fe355bdthe session thread has no way to hand the stream phase over and take an outcome back, so the deletion cannot land
Two bool-pred conds and a copied reason let the C thread block where its run was and take back the error and the disconnect reason, with no managed pointer crossing.
- PP752 · 1f52335the handoff that replaces the C's stream run is undecided, so the commit that edits the C has nothing to aim at
One of PP28's seven steps becomes managed and six stay, held against session.c: the run is replaced, unlocked across as the C leaves it, and the C thread waits rather than returns.
- PP751 · 599a465the audio path decodes nothing, so a frame the receiver delivers has no way to become sound
Four shim exports and ManagedOpusDecoder turn a received frame into PCM, and PP740's concealed frame becomes the NULL packet Opus fills in rather than a dropped one.
- PP750 · ff50ee1the port derives a gmac key and a key stream and composes neither, so nothing encrypts or signs a packet
ManagedGkCrypt gained Encrypt and Gmac, and the takion's feedback send spends the three positions the C uses, so a state arrives encrypted and signed on a real socket.
- PP749 · 807ec3athe congestion report has no bytes and no way out, so the thread that produces one reports into a double
TakionCongestion writes the fifteen bytes at the C's offsets and SendCongestion puts them on the socket, so PP714's thread reports to a wire instead of a double.
- PP748 · e17233fthe takion frames a data message and owns a wire, and nothing joins the two, so no managed message ever leaves
ManagedTakion.SendData spends the key position, the sequence number and the socket in PP671's order, and TakionMessageSink puts the run's built messages through it onto a real wire.
- PP742 · 8aa4013the port holds 3681 real AV heads and its own parser can read none of them, two bytes short of the cheapest layout
The tap keeps twenty-eight bytes, the capture was recorded again, and the differential parses 7506 real heads across three passes where every AV head used to be refused.
- PP707 · 4092ac7nothing managed drives a live session, so the flip that stops session.c asking removes the only path that streams
A host outside the test project drives the sequence over a loopback socket to SUCCESS, every output seam it needs is filled, and the handoff the C's deletion must make is decided.
- PP697 · 3013b33after the frame-path flip the models describe a C that has gone, in the present tense
Eight models say what the frame path was rather than what it is, and a swept floor of 101 predicates over the four files says none was deleted with them.
- PP696 · 0defc5bthe frame path's deletion has no commit that edits the C, so four files stay while their ports exist
session.c handed the run to a callback and the four library files left the build; PP763 reverted all of it, and PP27, PP783 and PP784 re-established each half.
- PP671 · 9293cb7Fec.Recovers with no decoder named runs the C, so after the flip a default becomes a loader failure
Fec.Recovers defaults to the managed decoder, so the sixty-four recorded cases assert on the build this tree ships and the guarded differentials fall from six to five.
- PP295 · 148de68streamconnection.c is 1540 lines and calls the video receiver, so every deletion below waits on it
The five ports beneath it are the only implementation now: the stream connection, the video receiver, the frame processor and the codec are all out of the build.
- PP747 · 0cc89efthe nine events reach a seam nothing in app implements, so the pad state they carry is counted unheard and dropped
SessionEventRouter holds what each of the nine decides - rumble, triggers, LED, index, both intensities, the motion reset and the FEC failure - so the seam stops counting them unheard.
- PP746 · 68fade9the run's sequence has never executed against a socket, so every ordering is asserted over a script
The sequence runs to SUCCESS over a loopback socket on a real takion, congestion thread and feedback sender, and the failed connect unwinds without closing one that never opened.
- PP745 · 9546239the run's host has twenty-five counterparts and no implementation outside the test project
ManagedStreamRunHost delegates twenty-four members to the counterparts the census names and waits on the C's own predicate, so three censuses lost the row that said the host was a shape.
- PP744 · b31d048the pad-info order is read by a copy of the raiser sweep, still anchored on the local name PP722 widened
ReportOrderIn composes on the widened sweep and strips the prefix, so the second copy is gone and a renamed local no longer reads as a handler that sends nothing.
- PP743 · 7def4a2eleven fixture ids sit 158 ids ahead of the ledger, so the tasks that reach them are born counted as covered
The eleven moved above the floor two comments already stated, and FixturesBelowTheFloor holds them there, so no task arrives with its coverage debt already paid.
- PP741 · 490aa04seven interfaces in app are implemented only by test doubles, and only two of them were ever counted
SeamReach asks the reached question of every public interface the assembly declares, so the seven are a declared list with a reason each rather than two censuses' blind spot.
- PP740 · 31f970enothing managed receives audio, so the run's two audio arms answer with a seam only the test project implements
ManagedAudioReceiver ports the jitter buffer and a pair puts two behind IAudioSink, so the run host's seam-only axis is empty and both sound arms reach shipping code.
- PP739 · 45a8130the ratchet's absent id is a constant any other file can spell, and a comment is what guards it
AnAbsentId asks the suites what they spell and returns one they do not, so no literal in any file can turn the ratchet's absent-id question red again.
- PP738 · 5f5ba8cthe run-host census answers two members with an audio seam only doubles implement, and calls its list empty
Both censuses now answer the reached question with the same three lines, and this one names its two audio rows rather than reporting only that nothing is owed.
- PP737 · 671c905the key stream makes an AES object and an array per block on every call, and nothing has held it to PP44's budget
The measurement named the wrong suspect: 88 bytes a block was the one-shot cipher call, not the counter array, and one ECB call over pooled counters takes it to zero.
- PP736 · 9629a7dthe stats count one push per audio packet against a ceiling that advances per unit, and nothing states the ratio
Measured on the 439 Opus heads a PS5 sent: one source unit per packet, so the stats' count and span advance together and the feared loss report does not exist.
- PP735 · 726f8f0a census naming an export in a string counts as its caller, so the sweep's dead list is short by an unknown amount
Five, measured before the rule was applied: four new names and the one PP716 kept by hand, so the exclusion list goes and the dead list is sixteen.
- PP734 · a56c391one census row is answered by an interface member nothing in app implements, and the check cannot tell that apart
Reflection finds the one row on its own and proves the other interface row is filled, so the census says which counterpart is a shape rather than a call.
- PP733 · f11ebaanothing counts the managed readers that parse a takion message, so a fourth one can be lenient in silence
Four files and six sites, swept rather than remembered, and a row claiming the check is read for the call that makes it - so a verdict cannot be taken on trust.
- PP732 · 580f393two more managed readers decide on a message nanopb would refuse, and one of them is the streaminfo
The check goes where PP687's bound goes, so an absent audio header is a failed decode and an absent reason is not an empty one - and one test had said otherwise.
- PP731 · 301617bthe step after the bang builds two gk crypts at fixed indices and hands them to takion, and none of it is ported
Two crypts at 2 and 3 share nothing but their inputs, the window advances forward only, and the release order is a list rather than a comment.
- PP730 · a5689b1nanopb refuses a bang with no required fields and this port reads it as a refusal, so one message leaves two states
Required is read off the descriptor and checked ahead of every refusal, so what this port accepts is what nanopb accepts across four cases.
- PP729 · 5710298the third dispatch layer routes a protobuf to three handlers and the one that keys the session has no port
Four refusals in the C's order set a flag PP365 proved dead, and the four not-a-bang arms leave both flags alone, so only a keyed bang ends the wait.
- PP728 · 838f9fda criterion can state a count from a program and go false as that program changes, with the gate green
CriterionCounts joins three of PP295's numbers to the census each was copied from, two-sided: the stated number is the program's and the phrase spells it, so a row added anywhere goes red.
- PP727 · eeda3adnothing turns the launch spec into the BIG's payload, and the obfuscation there is not the encryption it looks like
The spec is hidden by a key stream rather than encrypted, its terminator rides inside, and one block of agreement with a direct encrypt is what the test asserts.
- PP726 · 718e065nothing managed formats the launch spec, so the JSON that tells the console the stream's shape has no port
The C's own template is the oracle, joined out of its literals and compared byte for byte; a PS5 HDR spec takes 912 of the buffer's 1024, and 951 at its widest.
- PP725 · 42a96b8the sender's overflow rung copies a packet buffer onto itself, and nothing records that the port left it out
The identity holds for all sixty-four positions, so the copy is a no-op by arithmetic rather than by inspection, and the departure is a row with a reading behind it.
- PP724 · 8077d3dnothing notices when an unported wait gains a managed counterpart, which happened once already and was caught by hand
The define-reading sweep found SESSION_EXPECT_TIMEOUT_MS answered while filed as unported, and now holds every unported row's group against the managed tree.
- PP723 · aa37d9dnothing composes PP676's serialisers into a sender, so a controller change is recorded and never reaches a wire
A button press rides the history alone, a quiet 200ms still sends a state, and a flush leaves four events to send again - so PP707's host owes one subsystem.
- PP722 · 9e06c9cseven events outside the frame path have no managed raiser, and one enum member is raised by nothing at all
All seventeen are held against the C that raises them: the eight outside are four subsystems, two already consumed, and the owed pair is one callback where only one can fire.
- PP721 · b094e7enothing calls the managed event seam, so the five a pad info decides and the FEC failure still reach nobody
The pad state is held across messages, so the same pad info decides five things and then one, and the FEC failure reaches the seam without crossing a wire.
- PP720 · 727a7a3the suite's staleness warning globs every .c under lib, so a file no target builds warns on every run
The launcher asks ninja whether the target has work to do rather than globbing the tree, so the warning fires on a real edit and clears when compile.cmd runs.
- PP719 · dc5dcc1nothing managed raises a session event, so the frame path's nine reach nobody and the run's CONNECTED is owed
The nine the frame path raises go through one seam whose send drops an event where nothing is listening, so PP707's host owes two subsystems rather than three.
- PP716 · 3079f3apacketstats' sequence arm is pushed with no mutex while three neighbours take one, and two threads reach it
The lock stays, on PP499's reasoning rather than PP402's, and the departure is one row of five with the reading of packetstats.c that keeps it honest.
- PP715 · a932267one wrap past 65535 makes the client report 1.8e19 packets lost, and nothing says what the console does then
The console is told 16425 and 49152 - three quarters - because narrowing to sixteen bits discards the clamp's ratio (design superseded: the console sees far above the ceiling).
- PP713 · 3cecb94eleven rows of the frame path's census name a type with no member, and nothing says which are ctors
Seven of the eleven had a member waiting, two are constructors and two are finis; the four file rows say the type itself, so no row is silent now.
- PP718 · 7a666abPP585's wait census still calls congestioncontrol.c unported, and nothing in the gate can tell it is wrong
The macro moved to the mirrored group, twenty against twelve, and a row calling a file unported that another row follows now fails rather than counting correctly.
- PP717 · 0522f27nothing decides which history events a controller change becomes, so PP676's serialisers have no caller
A controller change becomes history events in the C's own order, with eleven decisions read out of feedbacksender.c and every event serialised by PP676's formatters.
- PP714 · 3421fa9nothing managed reports congestion, so a managed run would tell the console nothing about what it lost
The thread reports every 200ms out of stats held to the C over fifteen cases, so PP707's host owes five members across three subsystems rather than seven across four.
- PP712 · 49cd04athree rows of the run-host census name a type with no member that answers, and the check cannot see it
An answered row names a member now, so the three that named a type alone became owed: seven members and four subsystems where the census had said four and two.
- PP711 · c3db86dWasapiCapture can only be asked for the announced format, so the cleaning stage resamples both inputs itself
A capture takes a format now, so a real microphone opened at 16000 delivering 320-byte units, and the stage has a door that skips both downward legs and cancels just as well.
- PP710 · 96ade28the port cannot change an audio rate, so the cleaner's 22050 ceiling keeps it out of the announced 48000 chain
Every rate the canceller accepts reaches the announced one through the in-box resampler, and the DMO plumbing both are driven through is written once.
- PP709 · 63adfd8nothing drives the in-box echo canceller, so PP52's second criterion has a reading of it and no stage
Filter mode reports its two inputs and cleans - fifty frames in, twenty-one kilobytes back - and it refuses the announced 48000, taking 22050 and below.
- PP708 · 1fd2886nothing in the port renders audio, so a session shows a picture and plays no sound at all
The default render endpoint opens and plays, and PP698's loopback hears the tone back off the same endpoint - two of this port's subsystems, one playing and one listening.
- PP706 · 0a78cb8the microphone has a capture, a unit splitter, an encoder and a head, and nothing runs them as one path
Captured bytes reach a packet through all four pieces, and the C's two surprises are reproduced: two frames of silence at the start, and the newest frame sent twice while the oldest never is.
- PP705 · 9e9985bfour sweeps over app/ hand-write their own exclusion, so a new census has to be added to the others by hand
A recording file says so in a comment and the four sweeps ask, so a sixth needs no edit in a file it does not own - and the fixture in tests turned out to be one of them.
- PP704 · 08bad7dFeedbackPayloadTests guards eight comparisons on an oracle the census does not name, and it is not the only file
The floor rose from eighteen to thirty-one and the list is closed: a file calling a guard the census knows and naming no row fails by name.
- PP703 · 717ea22ManagedTakion's video queue is only ever set to null, so one step of its recorded teardown is unreachable
A takion given a sink owns an arm, so one video datagram opens the queue and the teardown step reserved for it is appended where the C releases it.
- PP702 · 45fa731senkusha.c calls five takion symbols, so PP27's fourth criterion cannot be met while the file stands
The five are read out of senkusha.c and each resolves to a managed member; a sixth would fail by name, because the reader matches takion's whole namespace.
- PP701 · e7eb6bethe host shows a console's picture and sends it no input, so nothing can be played on it
One SDL pad opened, translated from Controller::HandleButtonEvent and pushed on change; a real session sent 1210 states and a person played on it.
- PP700 · de6f8b5every piece of the video path exists and none is joined to a session, so a stream decodes and shows nothing
A window shows a PS5's home screen: decoder on the session, a renderer held between frames, the shared surface WPF takes, and the D3DImage bound and empty since PP10.
- PP699 · 076978fthere is no managed presenter to count dropped frames, and the counter that did is in the retired client
The presenter tallies what it showed and what it never did, folding in the receiver's total as the Qt client does, and a live session appends a row to the ledger both builds share.
- PP698 · 40b5f62the echo canceller wants a reference of what is playing and nothing captures the render side
The render endpoint opens as a capture with one flag more, and a tone played into it comes back in the microphone's own units; a quiet one reads as PP695's silence.
- PP695 · 595b785the capture opens the default endpoint and a Bluetooth headset answers with silence, reporting success
The capture reads its own clock and counter, so an endpoint that opened and never spoke is a named state with advice; the two-second grace sits between a 222ms success and a 30s silence.
- PP694 · 4d6842cthe microphone's units reach nothing, and libopus's second consumer is why the dependency cannot leave
The encoder is managed and agrees with libopus on every frame's length and TOC and on no payload; libopus stays, held by the unported decoder and by the oracle itself.
- PP693 · b1a8669a COM method declared without PreserveSig reads an uninitialised int as its HRESULT and answers anyway
A sweep over app, tests, spike and tools names any COM method returning int or uint without the attribute; the tree is clean, and the check demonstrates the omission on its own excluded fixture.
- PP692 · 009bdcfgf-complete's only caller is the library init, and the census counting FEC callers reads the decode alone
gf-complete's one caller is chiaki_lib_init, swept from the tree and not in fec.c, and fec.h's six includers are placed three ways: four use the decode, one the word size, one neither.
- PP691 · 74e7ebdchecks that match a roadmap sentence literally go red when the sentence gets more precise
The census is thirty-two literals, judged and swept so the list cannot go stale; four demand a spelling that prose is free to improve, and PP666's two are not among them.
- PP690 · 4c7bc24a deletion's end state names a shipped task as what must happen first, so its blocker resolves to nothing
PP295's end state names the order that closes it instead of a shipped id, and a check reads every criterion's blockers against the ledger so the next one fails rather than waits.
- PP689 · b957bfdthe pad info message has two layouts and five reports, and nothing managed reads either one
Both layouts read at their own offsets, a third length reports nothing and holds its state, and the five go out in the C's order rather than the order they were parsed.
- PP688 · f42e274the idle handler's switch has no counterpart, so a running stream's four messages reach nothing managed
The four arms route and the rest is dropped as the C drops it, and a round trip is milliseconds unless it is zero, negative or not finite, when the last reading stands.
- PP687 · 3ed785ca bounded field longer than its buffer fails the whole decode in the C, and PP686 reads it as a wrong size
A field past its bound is undecodable on both readers, PP686's case names fifteen the other way now, and a disconnect's reason reads back with 255 and 256 one apart.
- PP686 · fc43238nothing managed reads a console's STREAMINFO, so the video receiver is only ever handed headers a test wrote
A PS5's own streaminfo parses into padded profiles and a fourteen-byte audio header, a ninth is dropped, a wrong size refuses, and the receiver takes what the console announced.
- PP685 · 6845348PP395's chokepoint comment calls the two data-type-2 sends the keyboard pair, which they are not
The clause now names the video receiver's pair, and a check reads the file for the word it used instead - so a correction that merely deleted the sentence would not pass.
- PP684 · 6a75aacfour of the stream connection's seven sends have no managed bytes, two of them the video receiver's own
The disconnect equals the one a PS5 was sent, all seven round-trip through both generators with the data type their call site passes, and a lost frame reaches a sink as bytes.
- PP683 · 63ef103the oracle guard census reads test files only, so the selftest's guarded comparisons are invisible to it
The host's selftest is a row now, so the floor the gate prints stops at what a bare build skips instead of at a project boundary.
- PP682 · 0eb8976test.cmd reads a step's exit code with 'if errorlevel 1', so a crash's negative code passes the gate
Seven steps in both launchers now test both signs, measured at -532462766, 3 and 0; a named list holds each, and a half-written verdict is red.
- PP681 · 717e192the selftest asks the header whether the device id oracle exists, so a default build's shim crashes it
The guard asks chiaki_shim_has_holepunch like the nine, the bare side proves the DLL agrees by requiring the throw, and the selftest runs 460 checks to exit zero.
- PP680 · f21c23etakion_handle_packet_av is only a branch in managed code, so no video packet reaches the flush
The arm delivers the capture's video in the flush's own order, and the video gate before the parse is what keeps a disabled stream from keying its cipher.
- PP679 · 12c7318the v7 AV parse and header formatter are unported, and the formatter's callers are senkusha's
Both go managed and the C's copy stands until senkusha is ported; the round trip found a fourth difference and a key position the formatter never byte-swaps.
- PP678 · a253382the receive loop runs only against test doubles, and nothing owns takion's state
A takion that owns its tags, ledger, queues, send buffer and socket: it connects to PP606's responder over loopback, loops on that socket, and releases in the C's order.
- PP677 · aa9d5d9the key state has no managed transcription, so every key position the port expands is the shim's
The expansion is managed now and agrees with the shim's at every step of 4025 real positions, 26 repeats among them, committed and peeked alike.
- PP676 · 77a66f4the feedback and mic sends have no managed code, and each places its MAC where packet_mac's table does not look
feedback.c's serialisers ported and compared byte for byte through six new shim wrappers; the mic head is held to audiosender.c, which exports none.
- PP675 · 824f6a7no managed code sends a takion datagram, so every takion send is a model that emits no bytes
The three layouts are written into a caller's span and read back by PP673's parser, and one send path stamps and sends under the recursive cipher lock at zero bytes over a thousand sends.
- PP674 · e7fa1e7takion's data queue is 32-bit and the managed reorder queue is 16-bit only, so no managed push can hold a data packet
The width is injected as the C injects it, held against a new create_32 export step for step across the wrap, and a data message becomes an entry with PP491's drops freeing.
- PP673 · dec1b94no managed code parses a takion control message, so a control datagram stops at the dispatch branch
The parse is PP672's reader lifted, with the commit the C makes on every message and the switch whose arms differ in who owns the buffer; 344 recorded control heads run through it.
- PP672 · 9d631d0no managed code writes the INIT or reads the INIT_ACK, so the port's only takion client is the C
The client writes both datagrams and reads both acks, byte for byte the C's over one exchange, and connects against PP606's responder over loopback in one attempt each way.
- PP668 · 523d223AvPacket is built from the v9 parse alone, so IsHaptics is false on every packet the port sees
The AV header is parsed in managed code for both versions, so the haptics bit can be true; the v9 arm agrees with the shim field for field on every length across all four lead bytes.
- PP666 · 1554de8a table and the test written from it were wrong together at every rung, and only a consumer noticed
Two of the three tables already had a consumer; the third had none and was wrong in both rows, so it derives from the criteria now — and two literal readers beside it were wrong the same way.
- PP659 · 2848b43a relay test sends real UDP between three loopback sockets and failed once in a run that passed twice
The count moves after the send, so receiving was never a receipt for it; the test waits, the counter is interlocked across its two threads, and 200 runs failed none.
- PP652 · 9eb999cfour subsystems carry the microphone and nothing in the host opens a capture device
WasapiCapture opens the default communications endpoint and delivers 100 units a second of the announced format; the resample the spike implied is Windows's, not the port's.
- PP650 · 4c6bf59the decoder stays native and nobody has priced FFmpeg against Media Foundation for the job
One D3D11-aware decoder per codec here and neither is a vendor MFT, against 87.6 MB of FFmpeg and the two paths - cuda and vulkan - Media Foundation has no concept of.
- PP643 · ef2fcc8two
<summary>elements on one member compile, and the wrong one wins silentlyTwelve members carried a stacked summary, ten were another member's docstring stranded by an insertion, and a scan over 933 files now refuses the next one.
- PP642 · 69864ffa ship's
recorded inclause names a file and nothing checks the file ever received the designEvery clause's file is opened and has to name the id, three exempt by name because the file is a recording with no room for one, and PP446's own paragraph was the miss it found.
- PP641 · 20f7dd9PP10's HUD is XAML, and the compositor tree PP319 chose covers a WPF window's own drawing entirely
The bitmap shape wins because its price was a premise, not a property: the HUD measures 156x138, costing 0.8% of a 60fps frame, while the full-plane render the section priced needs 125%.
- PP76 · f18ba89the decoder preference is measured on synthetic frames, and drops under network jitter are what a stream is judged by
Three played sessions on a jittering link: cuda loses 1.44% of decoded frames, vulkan 1.65%, d3d11va 2.23-2.27% across two runs.
- PP52 · 2e25f62nothing runs echo cancellation, and the vendor answer is absent on a machine with the card
A stage sits between the capture and the encoder and is read off the samples: a perfect echo goes in at 11584 and comes back at 44, while a voice the speakers never played survives.
- PP33 · 99b10d8HTTP and JSON in the core are curl and json-c, two vendored dependencies for what the runtime already does
The curl submodule, json-c, the option and both shim oracles left the tree; json-c's answers were recorded first, so 16 comparisons now run on every build instead of none.
- PP670 · da9a78bSix managed test files call the frame-path oracles unguarded, so the flip that deletes the four files turns them red
chiaki_shim_has_framepath answers for the built DLL, nine guards in six files ask it before an oracle runs, and NativeSeam allows the fourteen only once the shape is bare.
- PP669 · 92821d5PP295's third criterion has no check: the seventeen consumers PP638 named are a count in the ledger, not a mapping
FramePathConsumers reads session.c's five, the shim's thirteen and the suite's four and resolves each by reflection; a call with no row, or a row with no call, fails by name.
- PP667 · b9c04e5The AV route has no managed counterpart: video, haptics and audio reach only a C receiver
StreamAvDispatch decrypts with gkcrypt's own padding or drops, tests haptics before audio, and drives PP291's receiver; the frame it delivers is the unit less its two-byte head.
- PP665 · f3c4215PP663 made 23 assertions opt-in and an early return is a pass, so the gate prints the same total either way
Every run now prints which oracles are present and how many comparisons their absence costs, counted from the five files that guard rather than declared beside them.
- PP664 · 52a4200the seam's prose reads as though the shim wraps holepunch unconditionally, which PP663 made false
Both places gain a sentence rather than losing one, and PP655's order is complete at three of three - PP33 is not, because the flag still carries PP481's oracle.
- PP663 · 113caf2libchiaki links curl and json-c in every build for one file two console-only test groups reach
The default build links neither library and the suite is green; -DCHIAKI_ENABLE_HOLEPUNCH=ON restores curl, json-c, the file and both oracles, and it is green there too.
- PP662 · 0126991the seam's shape was read from source text, and an #ifdef is invisible to a text reader
Two exports the shim carries whichever way the option went answer it now, so a guard asks the DLL it loaded rather than a file on disk beside it.
- PP661 · 0a78517sixteen comparisons hold managed JSON against json-c and would throw rather than fail once it is gone
The sixteen decline on a shim with no json oracle and a counterpart says which state the tree is in, so PP655's first step now covers all three sets of callers.
- PP660 · d53592dPP655 sized the flip from a linker answer taken while json-c was still linked, so it counted one oracle
The flip's surface is both oracles counted from the shim - 25 exports where the linker named 10 - so PP655's first step has a third set of callers still to convert.
- PP658 · 755df24five tests drive the C through the nine wrappers and would throw rather than fail once they are gone
The five that call the C decline on a bare seam and a counterpart asserts the removal instead, so PP655's first step is finished and its flip edits no test file.
- PP657 · 3121bd6PP656 taught the seam its two shapes and the census that reads it still knows only one
The allowance is derived from the seam's shape, so it is empty today and becomes the nine when the header goes bare - and the flip edits neither this check nor a test.
- PP656 · 08302aaPP655's first step has no mechanism, so each model of the shim's seam would learn two shapes its own way
One reading answers while the shim wraps and a counterpart answers once it does not, keyed on the header NativeSeam reads - so exactly one side runs on any tree.
- PP655 · 6a6b590PP33's remaining blocker is an oracle, and the obvious way to gate it is the one PP437 exists to catch
The second flip has an order now: two-state the seam, gate the header with the bodies and the host's imports, then turn the prose - three landable commits instead of one diff.
- PP654 · 7c28c6ethe one holepunch wrapper the host actually runs makes a device id from a prefix and 16 random bytes
The login generates its own device id and the C is kept beside it as the oracle, so every consumer of holepunch.c is now a testing seam rather than a feature.
- PP653 · 2e9313cPP33's fourth criterion names a linker question and nobody had asked it since two callers left
Everything compiles, one target fails, and its ten undefined references are all holepunch's - no curl, no json-c - so the callers are down to the shim, which has ten wrappers and not nine.
- PP651 · 9d9ac7cPP32's Opus half was a preference with no measurement, and both decoders were reachable all along
Managed costs 1.58x the native p50 at 24.9us a frame - 0.25% of one - so cost decides nothing; its p99 is 5.6x its own median in every run, and the audio differs by 15 of 32767.
- PP649 · 724b76fthe switch-ack wait has a predicate reading three fields and an arm after it reading one
PP28's second join is modelled: the five wakes, the one arm three of them share, and the stop check too late to record a stop - reproduced rather than repaired.
- PP648 · fe38492PP47 read VSR as not engaging with the driver switch off, and PP49's HDR extension engaged on the same card
Still 0 of 8,294,400 pixels, on the card where PP49's extension moved 2.07 million - so the toggles are per feature and a call that succeeds is not a feature that ran.
- PP647 · eab3efdPP53 is a vendor-neutral DXGI mechanism sitting in the block titled NVIDIA path
The label is a schedule and the floor is where the claim belongs, so a fourth row says the present needs no vendor and a test reads the shim for one (design recorded in
docs/HARDWARE-CONTRACT.md). - PP646 · 1834975the tearing probe presents to a composition swapchain with no visual, the one place a no-op would hide
It survives the tree: a ten-bit composition swapchain that is a visual's content, committed, takes the tearing present and refuses it where the flag was not asked for.
- PP645 · 44cbbe4both NVIDIA spikes report a mean, and four of PP49's six runs carried 200-300us outliers on it
The eye is a check: both spikes print p99/p50 and the gate holds the two committed runs to 1.5, with decode-path named as excluded because its tail is PP65's finding.
- PP644 · c0002a4spike/video-upscale calls the extension read-back a hint, and PP49 measured that it is not one
Both spikes say what PP49 measured and the call stays: the two committed runs echo identical zeros while disagreeing on engagement, and a test holds the pair.
- PP32 · e15fd32audio decode is Opus in lib and the microphone's noise and echo stages are speexdsp in the Qt client
The audio path says which three it is: speex left with the client, Opus is measured and moves with the encoder it shares a library with, and the capture is PP652.
- PP31 · 6eb9dc5the video decoder is where 100% managed stops being achievable, and no task above says so
The boundary is a non-goal now, not a paragraph: no managed video decoder, 100% Windows rather than 100% managed, with a guard so the promise cannot come back.
- PP28 · 79498f2session.c 1196, ctrl.c 1767 and streamconnection.c 1531, three state machines with no oracle
The three joins are modelled: senkusha's fallback, the switch wait that reports three endings as one, and the handover that releases the lock for exactly the run.
- PP11 · e2d90f4fullscreen, HDR handoff and refresh-rate switching are handled by the Qt window
HDR has a presentation path: a container visual, ten bits below and an eight-bit premultiplied overlay above, read on a screen and not only committed (design recorded in
app/Views/DcompDemo.cs). - PP640 · fe59bb0PP295's first criterion has no oracle: nothing states the sequence a port has to reproduce
Six orderings held as positions in streamconnection.c, each with what a port loses by not keeping it, and readers that see each one broken.
- PP639 · db773cathree deletion lines have an end state their own dependents come before, and each was untied by hand
PP295 has criteria that separate its port from its deletion, PP28 is released, and a check holds that no line an end state waits on declares a dep on it.
- PP638 · 79820fbPP295 names the video receiver's callers and not streamconnection's own, which is session.c
The build named seventeen symbols over three consumers: session.c drives the stream connection, one of its six calls carries no prefix, and the C suite links four of the files.
- PP637 · 4469395the vendored-C rule names PP33 and PP30 as what it does not reach, and PP295's deliverable is a deletion too
The rule names PP295 beside PP33 and PP30, and the three checks that pin the exempt list say why PP27 is still not among them.
- PP636 · fd1030aPP295 waits on the whole of PP27, whose last criterion is the deletion PP295 has to happen before
PP295 no longer declares PP27, the six files the fourth criterion waits on are named, and an assertion holds that the criterion is still the end state.
- PP635 · 1e54eaaPP27's timing criterion asks for the loop against the C, and that comparison would measure the socket
The criterion carries the reason now: the gate is comparable, the loop is not, and what answers it is a thousandth of the arrival gap with nothing allocated.
- PP634 · 3c2e5d9PP623's third step would delete the predicates that keep session.c's nine from coming back
The predicates stay and the prose around them is what turns, and the plan says so before PP27 follows the same three steps by reading them.
- PP633 · 36147c9PP44's budget is measured over heads, and the copy the keeping branches do needs a payload to exist
Over 3.69MB a PS5 sent, the keeping branches copied 3693956 bytes and the loop allocated nothing, and the gate's share is unchanged because it stops at eighteen.
- PP632 · b3f6ed7nothing has taken PP623's middle step, so session.c still asks and the Qt client's build still stands
The nine and both fields are gone, the Qt client's build retired with them, and GuiFreshness answers Retired so no checkout is left permanently stale.
- PP631 · 0cf455fthe census's tests read session.c directly, so PP33's flip would turn every one of them red
Ten test files read session.c through the pair now, so the flip makes them decline rather than fail, and a drift check catches any that go back to reading it themselves.
- PP630 · f5ebb9ePP623's first step has no mechanism, so ten models would each hold two shapes of session.c their own way
One reading answers while session.c asks and a counterpart answers once it stops, so exactly one side runs on any tree and neither is a check that declined to look.
- PP629 · 3e97179this port writes the Qt client's settings now, and a running client saves its own cache back over them
The client owns the store and the person is told: a removal made while one is running says so, by both the built name and the released one, and locking was never available.
- PP628 · ab2348bthe console list connects, holds a session and answers a PIN, and only a flag opens it
A run with no flag opens the list, one screen is chosen rather than two queued, and two screen flags are answered by order so both spellings still mean something.
- PP627 · 75a348fa console asking for a login PIN gets no answer, so the front door sits at Connecting for ever
A shim wrapper carries the PIN to the waiting session, the prompt goes up when the console asks and down when it is spent, and the second ask raises it again.
- PP626 · a3e35daConsoleActions models a wake and three removals, and the row draws a Connect button and nothing else
The wake sends the client's own credential, hiding and deleting write the store through the inverse of the reader's rules, and the silent third outcome stays silent.
- PP625 · f3e5615the front door starts a session and releases it in the same call, so a connect that succeeds ends at once
The starter hands back a handle the list holds, a second connect releases the first, and a quit becomes the sentence qmlbackend's own dialog composes.
- PP624 · 3d14ce7ConsoleList keys registration and hiding on a MAC, and discovery answers with a host-id in another spelling
The Qt client's own six-byte parse is read, so both sets are the store's bytes, the hidden one works, and a row carries the identity that tells two nicknames apart.
- PP623 · c3abc34PP33's deletion has no order, and PP598 has it riding in one commit that PP621 shows is an oracle rewrite
Three steps, of which exactly one edits the C and it is the middle: the models learn both shapes first, and the shape that cannot occur goes last.
- PP622 · 6b68251PP33's line cannot honestly say one caller, because the check demands the phrase 'one files call it'
The clause is chosen per count rather than assembled from a plural, so one takes a singular verb and zero says no file calls it at all.
- PP621 · ebdd854nothing counts what reads session.c's holepunch handle, so PP33's deletion is sized at its two C callers
The handle's readers are found from the tree and the tests asserting against them counted apart, so PP33's two callers are no longer the size of its deletion.
- PP620 · c939e3bfive probe methods still write the STA scaffolding out inline, around bodies that hand a value back
The five inline runners are Apartment.Run now - four through the Func overload that hands the value back - and the exception list naming their two files is deleted rather than emptied.
- PP600 · a94fb96the host starts a session only from the capture flags, so nothing a user can click reaches one
--consoles opens the list against real discovery and a row's button reaches a session through a seam, so every refusal is a named sentence on the screen rather than silence.
- PP322 · 1acc7b6the two-layer tree commits and nobody has looked at it, which is the mistake PP163 made one layer down
Read on a screen: a green block inside the red with no blue, and its half-alpha half olive - so the overlay composes above and the alpha is taken once.
- PP619 · 602e47athe mapping screen's row slots are templated buttons with no automation id
The slot carries an id built from the row's stable key, so a check addresses one by name instead of by the absence of the field an application controls.
- PP618 · 86f2404twenty-six view test files each carry their own copy of the STA runner every one of them depends on
Deleted twenty-six times over for one package reference: 589 lines out, 178 in, and a thread that times out now names itself and rethrows what it caught.
- PP617 · 309ce7bthe relay's one UDP socket is bound to loopback, so a datagram sent to the console has a source it cannot answer
Two sockets, one facing each side: a real console answered and the capture holds whole datagrams at a 956 byte mean, where one loopback-bound socket got no init ack.
- PP616 · aa37564the relay, the address and the wider keep are three pieces and nothing composes them into a run
One word composes the three: the writer takes no tap, the relay offers the console's arrivals whole, and the session points at loopback.
- PP615 · a8a3344the capture truncates to eighteen on the managed side too, so a relay handing it whole datagrams gains nothing
The width is the caller's now: eighteen unasked, so every tap capture is unchanged, and whole where PP613's relay is what fed it.
- PP614 · b66884bthe capture connects to the registered host's own address, so no session can be aimed at a relay
The capture takes an address to go through, the console still supplies the keys and the discovery, and the host passes the flag to the call rather than dropping it.
- PP613 · 25c2a01no relay sits between the console and the C, so whole datagrams are reachable only by patching the vendored C
A TCP forwarder on 9295 and a UDP forwarder on 9296, reporting every datagram whole and telling the two directions apart by endpoint, which is what loopback needs.
- PP612 · 3e72e72the tap truncates at eighteen inside the vendored C, so a full capture is the patch PP27 is not exempt from
The constant is in messagetap.h and takion.c applies it, both asserted, and the patch route is joined to the rule that closes it - so payloads are a decision, not a task.
- PP611 · cac05bbPP27's section says its loop is unreachable, which PP607 made false, and omits what the capture cannot time
PP27's section says the loop is reachable and names the eighteen-byte head as what bounds the rest, so the next session reads the state it is in.
- PP610 · edd8836PP531's MAC gate numbers were never taken over a console's own traffic, and nothing holds the headroom
Both sides timed over 4025 heads a PS5 sent: 0.18us managed against 0.08us for the C, and what is asserted is the share of a 1159us gap, not the microseconds.
- PP609 · a8d17c0the replay prints its report over the committed capture and nothing asserts a line of it
The replay's report over the committed capture is a gate now: the MAC gate agrees on every head, no branch is unknown, and nothing allocates after the warm-up.
- PP608 · 9c478f7the loopback harness has no datagrams to pump, and no capture is on this machine to give it any
A five-second capture of a live PS5 is in tests/corpus - 4025 datagrams at a 1159us mean gap, heads only - and its count and spacing are checked against the file.
- PP607 · dea3fcano shim entry point creates a takion, so the responder has nothing to answer and the C loop stays unreached
A real takion connects to loopback, our responder answers, and the connected event fires - so the receive loop runs with no patch to the vendored C.
- PP606 · 4057081the three handshake pieces are functions and nothing owns a socket, so the responder cannot run
The three pieces are a peer with a state now: it answers a retried init again, refuses a wrong cookie or tag, and runs the whole exchange over loopback.
- PP605 · 954e1d4the responder can answer and cannot read, so nothing parses the INIT that carries the client's tag
The INIT is read into the same record the ack is written from, the header tag is zero before the ack as the C sends it, and the cookie is compared.
- PP604 · b1999f0the cookie ack is the responder's second datagram and the header writer is sealed inside the init ack
One writer serves both answers, the INIT_ACK's header is compared byte for byte against it, and the COOKIE_ACK is that header with the addend alone.
- PP603 · 66591eeTakionHandshake models the handshake's rules and sizes and cannot produce a datagram, which a responder is made of
The INIT_ACK is written from TakionHandshake's own sizes, checked field by field at the offsets the C reads, and joined to takion.c's header writer.
- PP602 · 1a204aba recorded peer cannot drive takion's handshake, because the client's tag is fresh on every connect
The fresh tag and the tagless connect info are both asserted, so the harness PP601 opened needs a responder on the far end and a recording cannot be one.
- PP601 · b203b37takion's receive is static in the C and a non-goal forbids exposing it, which PP27's section records as merely absent
Every receive handler is asserted file-local and the header receive-free, the patch route joined to the rule that closes it, and the socket parameter held as the way in.
- PP599 · 2349e6fPP533 settled that session.c takes five results, and decision A means nothing will ask it for PSN at all
The retiring client is the only PSN driver of the C session, held as an identity between two models, so PP533's five-result conversion has no caller left.
- PP598 · 62a1006retiring the Qt client's build touches compile.cmd, GuiFreshness and the client path, and nothing holds the three
The decision is recorded and the argument asserted; two of the three pieces are joined by a compile-time reference, so a retirement cannot land halfway.
- PP597 · 32a6cd0deleting session.c's nine would make gui/ uncompilable, and GuiFreshness then fails forever for anyone who built it
The join is asserted, so the commit that deletes the field goes red naming the choice it owes: retire the client's build, or give GuiFreshness a state for it.
- PP596 · 9fe4940session.c's nine holepunch asks are unreachable in everything this port builds, and PP33 is sized as if they run
Two files call chiaki_session_init and only the unbuilt Qt client passes a handle; rudp's one assignment is inside the guard, so gui/ blocks the deletion.
- PP595 · 0073314the roadkeep skills, hook and launcher this checkout ships are older than the engine answering here, and lint says so
install wrote all four surfaces - the launcher, SKILL.md and the two skill files that were absent - and the wiring to the committed launcher is asserted rather than assumed.
- PP594 · 1ad825b--recount prints the calls that fix a stale count and cannot see the same numbers hardcoded in the suite's InlineData
The rows keep the subject and drop the count CountedClaimTests already holds, so a .c line change is answered once, where --recount can print it.
- PP593 · 6973ff0the vendored-C rule names PP33 as what it does not reach and says nothing about PP30, which lint flags the same way
The rule names PP30 beside PP33 and the check requires all of them, so a second line bounded by it cannot pass on the first being named.
- PP592 · 8d10078session.c and the shim both fini a holepunch session, and they are disjoint only because the shim never wires one in
The Qt client creates and never destroys, so the two finis are its only destructor; the shim is a second owner, and the guard is on the shim not wiring a handle in.
- PP591 · dae85d9holepunch-test.c reads /tmp/token.txt on a Windows-only port, and its only live effect is to be PP33's second consumer
holepunch-test.c and its target are deleted: PP544's three outcomes settled on removal, and PP33's deletion is down to session.c and the shim.
- PP590 · 6e60c51ctrl.c asks holepunch.c for a port session.c already read, and that one ask is all that makes it PP33's fourth consumer
ctrl.c no longer calls into holepunch.c: session.c records the control port where it already reads it, and ctrl.c takes the record, keeping its own fallback for paths with none.
- PP572 · 60767e8nothing parses build.yml, so a syntax error in it is invisible until a push spends a run
every .github/workflows/*.yml is parsed as a YAML document by WorkflowParseTests, so a syntax error is red in the local gate rather than on the first push that spends a run.
- PP589 · 15b971athe C suite's pass is satisfied by a temp-file variable named ctest_out, so deleting the ctest call leaves it green
The C suite is joined to its call the way the tools are: named outright in CI, reached through $CTEST in the gate, with an assignment and a banner counting as neither.
- PP588 · d972249either tool's pass is satisfied by its own echo plus the other tool's flag, so deleting a call leaves it green
Each tool's pass is now the join its files make - one line in CI, a set and its variable in the gate - and an echo is excluded, so deleting either call turns that pass red.
- PP587 · 2871578the local gate never runs roadkeep lint, so a governed-file drift is first reported by a CI run
test.cmd runs roadkeep lint now - a note when the tool is absent, a failure when it says so - the gate-and-CI table reads all three workflows, and a step's own banner no longer counts as running it.
- PP586 · 5f7d279compile.cmd's deploy ending names the Qt client whenever one exists on disk, not when this run built it
The deploy ending asks CHIAKI_ENABLE_GUI now, so a default run names the .NET host and marks a leftover Qt client as an earlier run's, and a one-line if exist guards its own claim.
- PP585 · e861d8931 C timeout macros and 33 managed waits mirror each other by hand, and nothing says which are meant to agree
The C names 32 timing macros, not 31: nineteen are followed by a managed constant, thirteen are unported, and four managed waits follow an inline number a same-file macro would mis-join.
- PP584 · ae029a8the third deletion line understates its callers, and all three omitted the same one
PP295's why names the shim, and a check holds that every deletion line says the seam is among what calls its target.
- PP583 · ef27401the open count mixes lines somebody could start with lines that cannot be begun until hardware arrives
A --backlog reading splits the open lines into startable and waiting, naming what each waiting line waits for, guarded against a stale host like the other two.
- PP582 · 7d0bc65five of the six partial lines carry no definition of done, so how much is left has no answer
All six partial lines carry criteria derived from their own sections, and a hard assertion names any partial line that arrives without one.
- PP581 · 29b9535six function pointers cross to the shim and nothing checks a managed signature against the C typedef
Each typedef's signature is read from the header and each thunk's from the source and compared, with bool mapped to byte because C's is one and .NET's default is four.
- PP580 · 53e66f0nothing checks that every shim entry point the host imports is one the shim exports, or the reverse
Both sets are read from the shim's definitions and the host's entry points and asserted equal, so a rename fails the gate instead of the call.
- PP579 · 7bd3466the SDL_Event size is a hand-written 56 in a StructLayout and nothing holds it against SDL's header
The size is a named constant the layout uses, held against SDL's padding declaration and its own compile-time assert, reading the 64-bit arm rather than the digits.
- PP578 · 1ee5268two more managed enums are cast from C values on the lines after the one PP577 held, and neither is checked
The three mirrors are one list compared once, the error-specific copy is gone, and the count is asserted so a fourth cast cannot arrive unchecked.
- PP577 · 373f4afthe managed error enum mirrors an implicitly valued C enum by hand and nothing compares them
The header's members are read in order and compared with the enum's by letters, and an insertion in the middle is caught by index rather than by membership.
- PP576 · 95a9513the sized-buffer names are declared in a list nothing reads and again inside the regex that does the work
The pattern is named so its names can be compared with the list's, and a name the list carries that the pattern ignores turns the suite red.
- PP575 · c9407a9PresetIsPersisted is the one check method nothing calls, and its body tests a different question from its summary
The rule is the row of buttons: the five that have one write both the window and the setting, Fast has neither, and the check now has a caller holding it against the QML.
- PP574 · ffbc73cPP30's line says fec has one caller left and it has three, the shim among them as in PP33's
PP30's line names three callers, held against a list that names the shim, with the two declaring files excluded so a plain sweep's five is not the number.
- PP573 · a7edb16PP33's own line says session.c is its only caller, which three shipped tasks have each falsified
PP33's line names four callers and the count is asserted against HolepunchConsumers, so a line claiming one turns the suite red.
- PP571 · 631d6b6the no-local-patch non-goal reads as forbidding PP33's deletion, which must edit session.c and ctrl.c
The rule names PP33 as what it does not reach, and the exemption is asserted inside its own paragraph so a check cannot pass on PP33 being named elsewhere.
- PP570 · 2f55c7cmeasure-startup ships the same selftest and is not in the solution, so no gate builds it let alone runs it
It carries the warning policy and joins the solution, both gates run its selftest, and PP433's table names binaries so one tool wired no longer answers for two.
- PP569 · 192f80dcompare-baselines ships a selftest its README calls its own assertion, and neither the gate nor CI ran it
The gate and CI both run it now, recorded as PP433's fourth pass; it is safe in CI where the host's selftest is not, so the local-only ceiling stays at one.
- PP568 · d95183fthe decision not to patch vendored C is argued only in a deferred section, so resolving that line deletes it
The rule is the seventh non-goal, durable and refused at input, and an assertion holds that it is still there and still under the non-goals.
- PP567 · cc8c0dbthe CI workflow runs the managed suite with no filter, so it would run the interaction tests on a runner with no desk
The step carries the trait expression the gate uses, and both sides are held to the same word so a rename cannot put the five back silently.
- PP566 · 61f0548PP33's build criterion reads as one step and is two, so the measured half of it cannot be recorded as met
The criterion's reason names both halves and what each waits on: compiling without either is already true, linking waits on the four callers rather than on the libraries.
- PP565 · 6b20512PP33's done-when line about building without curl and json-c rests on a grep, and nothing has tried the build
Built with holepunch.c out and both libraries unlinked, every other source in lib compiles and the archive is produced: the dependency is one file deep.
- PP564 · 2d74ad0nothing has asked the build what PP33's deletion costs, and reading the tree missed ctrl.c
Building the library without holepunch.c names four consumers and thirty-four references: ctrl.c is the fourth, and one export carries no chiaki prefix.
- PP563 · aff3951PP33's deletion has a third consumer nothing names: the port's own shim wraps nine holepunch exports
The shim's nine wrappers are named beside the harness, and the deletion's three consumers are listed rather than counted - four of the nine overlap session.c's, five do not.
- PP562 · dbfa4a5PP107's deferral opens by saying the C suite never calls the two broken functions, and the suite calls and pins both
A sixth fact holds the claim: the suite calls both and pins the drop defect in C, and PP107's opening sentence and title are corrected to say so.
- PP561 · 0e473f8the three sequences and the session are each joined to nothing, so eight tasks are pieces that fit and were never fitted
The three sequences run over one queue and one stop, the stage that failed is named, and no session comes back unless every stage ran.
- PP560 · 0fe49fcthe punch's eleven steps are declared and nothing reads holepunch.c to check them, so five tasks rest on a belief
The ten steps that are calls are read out of the punch's own body in order and compared with the sequence's list; the eleventh is named as a guard this cannot check.
- PP559 · 60cbe66the create's wait ends on either of the C's two notifications, leaving the client's own join for the start to find
The wait runs until both halves have come, which also consumes the client's own join before the start looks - so PP546's departure cannot fire on it.
- PP558 · c0e7b92no adapter removes a handled notification, so the second punch completes on the first punch's messages having sent none
Each wait now takes what it handled off the queue as the C's loops do, and leaves what is not its business, so the data punch cannot finish on the ctrl punch's messages.
- PP557 · c774a45the start's wait handles one of the C's two notification types, so a member joining reports a started session on its own
The wait is the C's loop over both notification types until both halves arrive, each half checked once, and PP257's three custom data failures can happen for the first time.
- PP556 · 9e245e3the prepare cannot record the socket it punched, so a prepared session throws on the first ask session.c makes
The prepare is an instance call that records the socket the ctrl punch produced, and a punch with no socket is not prepared rather than success until the first ask.
- PP555 · 9570710the offer step's guard cannot fire against the sequenced session, so a refused offer reads as an ordinary punch failure
The session records that the punch stopped on the offer it sends, so the cause survives a failure that arrives a step later under another name.
- PP554 · 0071e3ca cancelled token throws out of PunchHole, whose contract is an error code and whose caller is C
A cancellation is Canceled, the answer the one-shot would have given; anything else is Unknown and the exception is kept for a managed caller.
- PP553 · 08006cfthe session interface has only the implementation that P/Invokes holepunch.c, so nothing answers it the other way
The seven are answered from PP548's create, PP549's start and PP550's punch, and PP479's flow runs to the end over it with no library loaded.
- PP552 · 471f3d1the start and punch waits poll on after the websocket has ended, costing minutes of deadline that cannot be met
The channel's end is exposed by the create and given to the other two as a predicate, and the queue is read before it is asked so a message that already arrived is still delivered.
- PP551 · 7d409fcPP533 restated PP478's five carried values and said five results without saying four outlive their call
The five are read from PP478's list rather than restated, four are marked as outliving their call, and PP479's outcome is asserted to carry those four and not the scoped one.
- PP550 · 3b490eePP547's punch interface has nothing behind it, so the last of the three sequences runs only against a test double
The punch runs over the queue, SessionCalls and PP459's race; the eleven steps map to four wire actions, and the action is read from its key so a RESULT naming an OFFER is not one.
- PP549 · c06b7dcthe start sequence has no implementation behind its interface, and its HostDown outcome is unreachable
The start runs over SessionCalls and PP212's queue, following the C's own pointer to name each way the joining console is wrong; and one that never joins answers null, the only path to HostDown.
- PP548 · cb94e89PP545's create interface has nothing behind it, so the sequence runs only against a test double
SessionCalls, PushChannel and PP212's queue now sit behind the create's steps, with the connect started in one step and bounded in the next.
- PP547 · 6bd0fcffifteen files model parts of the punch and nothing sequences them, so its five checkpoints have no order to sit in
The eleven steps run in the C's order, and each of the five checkpoints is reached by cancelling from inside the step before it.
- PP546 · d5f4f03the start is modelled and never run, so the failure the C reports as success has nowhere to be reported
The four steps run in the C's order, the PS4 wakeup is skipped rather than ignored, and the wrong console is a failure here and success in the C.
- PP545 · 2b89d8cnothing composes the ported holepunch pieces, so the create sequence is modelled and never run
The five steps run in the C's order over PP538's one-shot at PP539's four points, with the websocket wait bounded and that departure carried as a value.
- PP544 · 5bb862fPP33 records holepunch-test.c as absent, and it is a built executable calling eight holepunch exports
holepunch-test.c is in the tree, built every time, and calls eight exports - so PP33's deletion has a second consumer its own design recorded as absent.
- PP543 · b029136PP541 added a second reader of a shape SessionCreateSource already checks, so one repair would turn two red
The second reader is gone, and its one new fact - that the cancel signals both conds - moved into SessionCreateSource, which already held the other four.
- PP541 · ef47058session_create waits for the websocket with no timeout, and every failure path leaves the bit it waits on unset
Four facts hold it: the wait is untimed, one line sets its bit, the thread's cleanup sets and signals nothing, and the cancel wakes a loop that cannot leave.
- PP540 · 878cf6bthe census list must equal the sweep's output, so a model naming a C symbol in a comment turns the suite red
The list is no longer required to equal the sweep, so only an unquoted function nothing answers is news; entries stay when a model mentions them.
- PP539 · bfb310bnothing says where the holepunch honours a cancel, and three of the fourteen places are inside the waits
The fourteen sit in six functions and three are the blocking waits, which is how a cancel gets out of a wait instead of serving it out.
- PP538 · 4edf70fnothing models the holepunch stop, whose cancel is consumed by whichever of fourteen checkpoints reaches it first
The stop is a one-shot the C consumes at all fourteen checkpoints, beside a websocket flag it never consumes, with the signal outside the lock.
- PP537 · e11cb41the census annotation says nothing builds the session-id header, and PsnEndpoints builds it
PsnEndpoints builds the session-id header too, so nine of ten are answered and the tenth is the cancel, which arrives with the loop PP533 writes.
- PP536 · 2e7c884the census reads a function no managed file quotes as one nothing has looked at, and eight of its ten have counterparts
Eight of the ten are answered under names that do not quote the C symbol, each now carried beside it and checked to exist.
- PP535 · 686cb52the CI configure hands cmake a literal dollar-env token, so build.yml has never once been green
The toolchain value is quoted, so pwsh expands it instead of handing cmake the text; a rule now refuses a bare env reference in any run step.
- PP534 · c05bcffnothing counts which of holepunch.c's functions app/ already answers, so PP533's scope is a sentence
57 of holepunch.c's 67 functions are already named under app/ and ten are not; the candidate and STUN work is among the 57, not the remainder.
- PP533 · e1352e5session.c asks the C holepunch for all nine, and those asks are the only reason libchiaki links curl and json-c
Every mention of the handle in session.c is the assignment, a guard or one of the nine, so it carries nothing between them: session.c takes five results, not four, and holepunch.c goes.
- PP532 · 66f3614compile.cmd reports a Qt client it no longer builds, as the nodeploy output and in the failure line
Four lines named a client no ordinary run builds, and a rule now refuses any that claims it without testing the flag or the file first.
- PP531 · 8d62edfnothing times the managed transport against the C, so PP27's comparison is bytes and never cost
Over 24150 real heads the managed gate costs 0.13us against the C's 0.06us, both inside a copy of 0.04us and a mean arrival gap of 1178us.
- PP530 · d643c2cChiakiNg.exe exists twice, only Debug is built by the gate, and --recount and --ratchet answer from whichever was run
--recount and --ratchet now refuse and name the source that moved, on the two flags whose whole value is being trusted; a host built before this cannot guard itself.
- PP529 · a5e2a2fnothing compiles gui/ - the gate and CI both pass ENABLE_GUI=OFF - while the drift checks keep it edited
compile.cmd gui builds the client nothing else compiles - the old note named a -D the script refuses - and a client older than gui/ now fails the suite.
- PP528 · 1b2c51cthe pulled loss count is discarded on the two returns before presentFrame, so frames_dropped under-reports
The two returns now carry the count to the next frame that presents, and a check over the region refuses a third that would not.
- PP481 · b489acfnothing implements the nine asks over the real C, and no test can exercise one without a live console
Nine wrappers, an ABI bump to 35, and a session built from a recorded exchange: six of the seven asks now run against the real C, and only the punch needs a console.
- PP72 · 835c6b0the auto decoder order prefers cuda over d3d11va on an OpenGL renderer, and the paced numbers now say the opposite
The default stands - one synthetic stream on one card reverses nothing - and an explicit d3d11va outranking it is now asserted, so the comparison stays collectable.
- PP50 · a034cddframe generation would smooth a 30fps stream and cost a frame of latency to do it
No FRAME_RATE_CONVERSION under any usage, and the 2-out-per-1-in doubling returns a byte-identical copy: the 33.3ms hold buys nothing (design recorded in
spike/frame-generation/README.md). - PP527 · 8de24e5the replay calls the key stream NOT MONOTONIC and never says by how much, so 16 reorderings read as a fault
The key position line now reports how many datagrams arrived out of send order and how far the worst one moved, which is the reordering the video indices cannot see.
- PP526 · 5c76880the capture's bounds and the session's hold are constants, so a longer sample cannot be asked for
--capture-seconds sets the window, the count and the hold from one asked-for length, so a longer sample is a longer file rather than the same one.
- PP525 · 7fa5718PP523 could not tell a quiet link from a lost packet, and the capture's packet indices settle it
The indices settle what the gaps could only raise: 1609 steps, 122 frames, zero losses and zero reorders - so the twelve timeout crossings were idle time.
- PP524 · b2dd40bnothing reads the AV head's own fields, so the FEC ratio and the codec byte a console sends are unmeasured
A real session sends one FEC unit per video frame of 13 to 29, codec 5 on audio where the receiver demands it, and 255 in the prologue the postpone keeps from that guard.
- PP523 · a5a2e30nothing has measured arrival gaps against the AV reorder timeout, which a healthy session's p99 reaches
The gaps are reported as a distribution: a real session's p50 is 89us and its p99 13763, with 12 crossings of the 16000us timeout the mean of 1244 hid entirely.
- PP522 · e50421dthe replay says the cipher exists from the first packet, so the postponed branch reads zero on every capture
The cipher's arrival comes from the capture's first nonzero position, so a real opening reports 12 postponed packets and 8332 bytes where the branch had always read zero.
- PP521 · 1f8d15cPP519 counted 26 repeated key positions and all 26 are zero, in the 27 packets before the cipher exists
All 26 repeats are at zero in the 27 packets before the cipher, and the reader now separates those from a repeat after it - of which a real capture has none.
- PP520 · ca8b512PP515 changed what the Length column means and the version did not move, so an old capture reads as new
The version is 2 and a version 1 file is refused by name, so the capture whose lengths were the head's cannot be replayed as a measurement - a fresh one costs one command.
- PP519 · 563e614the key position expansion has never seen a console's own positions, where equal values occur 26 times in 2000
The repeat is pinned as no wrap, and a console's own 2000 positions run through the C's expansion: 1973 advances, 26 repeats, all block-aligned, one monotonic stream.
- PP518 · c65235dtwo send buffers exist in this port, the C's and PP27's model, and nothing has ever compared them
The same pushes and acks run through both and their counts agree after every step, including across the wrap where integer order would keep what the C releases.
- PP517 · 54b8d25PP497's MAC gate model has never been run against the C, which exports the function it models
The model and the C agree on all 1040 swept inputs and on 2000 real heads, once the shim stopped refusing the null crypt that made the no-cipher path unreachable.
- PP516 · 6044518the two captures on disk have no reader, so PP513's replay has never run against a datagram a console sent
A real capture replays through the managed path and reports 0 bytes allocated over 2000 datagrams a PS5 sent, with the wire bytes per branch that PP515 made readable.
- PP515 · e929932every captured datagram records length 18: the emit truncates before the capture sees the real size
The tap's type carries the datagram's length, so a second real capture reports video at a mean of 1137 bytes and control at 33 where every packet read 18.
- PP514 · 35234dcthe datagram capture has no command: the one thing that starts a real session records the other four channels
One session path records either kind, chosen by a flag, so --capture-datagrams wakes the console and writes PP512's file where --capture-exchange writes PP297's.
- PP513 · f4c7b87a capture can be written and nothing replays one, so the file a session leaves has no managed number beside it
A written capture reads back and replays through PP500's path at zero allocated bytes, reporting branches and copies - the managed half, with the C's named as the console's.
- PP512 · 17c068fPP511 fills a capture that lives in memory, so the session PP27 waits for would end with nothing on disk
The capture writes and reads back as a versioned file, and a writer that owns the tap leaves one on dispose - driven end to end through lib/src's own emit.
- PP511 · b63ecb1the tap has four channels and none carries a datagram, so PP510's capture has nothing to fill it from
Every arrival crosses a fifth channel above the MAC gate, guarded by the tap's active check, with the base type as its type and the head truncated at the emit.
- PP510 · d4634f5PP27's timing run needs takion datagrams with arrival times, and nothing in this tree records one
The capture keeps arrival, length, base type and an 18-byte head under two bounds, with the head's length derived from the furthest offset PP497's gate reads.
- PP509 · c5383a8three deferred lines are set aside for a console the project has, so nothing can offer them to a caller who has one
PP50, PP72 and PP76 are roadmap lines declaring console, and a check refuses any set-aside reason naming a requirement this project declares.
- PP508 · 72287bethe seam joins nine call sites to seven methods and nothing says the managed flow ever calls all seven
Three runs of the flow invoke exactly the seam's seven, with both socket ports seen and Fini reached only by the failing runs - which one good run would have reported as six.
- PP507 · 9919c97the session teardown runs ten steps in a fixed order and hands freeaddrinfo the NULL a PSN session leaves
The nine steps are managed in order, with the mutex outliving its users and the unguarded freeaddrinfo named as a reliance rather than repaired.
- PP506 · b4f2fecPP33's deletion depends on PP340's object but not on PP481, which is what puts an implementation behind it
PP481 is in PP33's deps and a reader for the group holds it there, so the deletion waits on the implementation as well as on the object PP340 delivers.
- PP505 · 7ea5604the session request is addressed two ways, and the local one can send Host: unknown after a failed lookup
Both arms are managed with their four hostname sources, and the fallback is stated as a request that is built and reaches the console while naming nothing.
- PP504 · 5b81089a PSN session's regist key comes from the console, and the wait for it has a timeout arm that leaves it zeroed
The fork's two arms and the wait's three endings are modelled, with the timed-out one named as the only path reaching the session request holding no key and no reason.
- PP503 · 330953athe punch's start event is unconditional and its finish fires only on success, so a failure leaves it mid-punch
The three runs of the punch block end in three different states, and the managed model has no finally - so the start left standing alone is reproduced rather than balanced.
- PP502 · bd62f91the holepunch session creates both sockets and closes neither, so a managed owner double-closes or leaks
The two closers are named and the creator is neither, held by an interface with no member that could close one - so the reflex to make the flow's owner IDisposable is refused.
- PP501 · 431022fPP27's remaining half is a timing run needing hardware, and its line still promises a transport that shipped
PP27 now declares the live console its timing run needs and no longer promises PP500's work, so pick stops offering a half nothing in a checkout can start.
- PP500 · dc329d1the takion pieces modelled so far allocate for their traces, so none is the receive path PP44's budget applies to
One composed path from datagram to branch allocates zero bytes across 200 datagrams, with PP487's loop asserted to still allocate so the zero cannot be read as vacuous.
- PP499 · a80111cthe v9/v12 audio bound stops before the nalu-info structs the parser then skips, so av_size underflows
The audio bound reserves the skip's three bytes, so the two lengths that used to parse into a payload past the buffer - measured at DataSize -2 and -1 - are refused.
- PP498 · 765fee9the pre-start socket drain has no success return, so its normal outcome is the timeout its caller forgives
The drain is managed with all four of its endings and none of them success, and the caller's forgiveness of exactly the timeout is asserted from the other side.
- PP497 · 05917b2the MAC gate rewrites the packet it checks, and only control and congestion hide key_pos from the MAC
The gate is managed as the rewrite it is, with the six offsets read out of the C and the invariant they carry - key_pos begins where the MAC ends - asserted for all four types.
- PP496 · b424414a data send spends a sequence number and a key position before it can fail, and neither is ever given back
Both variants are managed with their six outcomes, and the two that leave an unresendable gap are named - one reports the error and the other reports success.
- PP495 · 1a5f8dcadvance_key_pos rounds by adding the remainder and its six callers pass four different sizes, all of it protocol
The ledger is managed with its arithmetic unimproved, and the six call sites are read out of the C - which is what caught two of them being attributed to the wrong functions.
- PP494 · 1d099e3takion refuses a data ack that is not exactly 12 bytes, so a gap ack is rejected before the branch that names it
The received ack is managed and cumulative-only by arithmetic: a payload carrying blocks is never 12 bytes, so the first check refuses it and the gap-ack branch names nothing.
- PP493 · 86748b6takion acks the data queue once per drain with the last sequence pulled, and a dropped or unnamed entry still acks
The drain is managed with its four per-entry outcomes and one ack, whose flag is set on the pull - so a drain that delivered nothing still acks the last sequence it took.
- PP492 · 9f0e4f8compile.cmd clean with the GUI off leaves the portable tree holding two DLLs and none of what they import
The native-only deploy stages SDL2 and walks the closure through one script the Qt path shares, so a clean GUI-off build leaves a tree the host can load from.
- PP491 · 170c0a4takion_handle_packet_message_data drops the datagram on both early returns, and its one caller frees nothing
Both early returns free packet_buf, so the reachable one - a tagged control datagram of 17 to 25 bytes arriving before the cipher - drops it rather than leaking it once per packet.
- PP490 · c8775d9takion_handle_packet's five branches each end the datagram's life, and over a pooled buffer none of them can free
The dispatch is managed with a borrow-or-copy verdict per branch: three of the six keep the datagram past the call, and audio borrows where video, sharing its case label, copies.
- PP489 · a306d76the receive step's allocation budget is measured in the C and nothing states the managed number against it
The managed receive step costs none of PP59's measured three per packet, with the drop path stated as the exception and 1500 asserted equal in all three places.
- PP488 · 7212081takion_recv's four outcomes collapse to two in the loop, and a zero-length UDP datagram is one that ends it
The socket read is managed, with the four codes collapsed to the loop's two on purpose and an empty datagram pinned as the network error that ends the thread.
- PP487 · 19fc4eanothing models takion's receive loop, where two once-only transitions and three exits decide what the thread does
The thread's order is managed over PP485's buffer, with the MAC re-check and the postpone flush firing once each and their differing guards asserted against the C.
- PP486 · 31d4001PP481 says no test can run without a live console and declares no requirement, so pick offers it as ready
A line whose prose names a live console or a person looking must declare it, so PP481 reports as needing hardware instead of as the next ready thing, and console is declared again.
- PP485 · 53471b9takion.c mallocs 1500 bytes per datagram and reallocs it down, on the thread the whole stream rides on
The receive buffer is rented once and reused, so ten thousand datagrams allocate zero where the C mallocs and reallocs each one, with a copy only where postpone keeps a packet.
- PP484 · f9de546the two dead guards in request_header_format are harmless only because the head cannot exceed 190 of its 256 bytes
The head is 190 of 256 at the subtraction and writes 211 in all, derived from the format strings and asserted, so a longer header eats the margin loudly.
- PP483 · 75267dctwo lib/ defects are recorded not repaired because this port does not edit lib/, and 20 files in lib/src are edited
Both rationales now say what is true, and a guard over app/ goes red on any reason resting on lib/ being untouched, with the census that falsifies it asserted.
- PP482 · ab898afPP303's middle option needs a size budget for this application, and nothing measures the package at all
the payload and the installer are measured against ceilings that may fall and may not rise, on PP38's contract, needing no Qt build to produce a number.
- PP480 · 43cab17PP479's interface is joined to nothing, so a tenth holepunch call site could arrive with no method to answer it
the nine sites are joined to the seven methods that answer them, with the two collapses named and the socket's port-type distinction asserted.
- PP479 · 9996855nothing managed owns the PSN flow: the order, the guards and the state are all modelled and nothing drives them
a managed flow drives PP460's order against the nine asks as an interface, applies each guard, and holds the four pieces that outlive the block but not the fifth.
- PP478 · 292bbdcnothing states what the PSN flow holds between its nine calls, and one piece is a pointer to a stack local
the five pieces and their three lifetimes are stated, with the four calls that must stay inside the registration info's block and the null that means a local session.
- PP477 · a80d975takion's socket setup is unported and four of its logs name IP_MTU_DISCOVER where the call sets IP_DONTFRAGMENT
the socket is modelled with its two branches and the window it buffers to, and all four fragment-bit logs now name the option the call sets.
- PP476 · b32ff0ePP464's guarded step-back is in takion's resend loop too, but the ack there removes an unknown number of packets
the scan restarts after a give-up, because the ack removes every packet at or before that sequence number and the buffer is in send order.
- PP475 · 6b651b7takion's resend loop is unported: the two waits, the try limit, and that giving up acks the packet to itself
the resend loop is modelled: a timeout with packets and none without, the strictly-greater due test, and the give-up that takes the console's own ack path.
- PP474 · b4fcecathree paths in takion's postpone lose a datagram it owns, and the array is never freed if the cipher never arrives
both early returns free the buffer the dispatcher let go of, and the teardown releases anything still postponed - so a session dying before the cipher leaks nothing.
- PP473 · c00463etakion holds AV packets back until the cipher exists, and three paths lose the datagram buffers it took ownership of
the postpone buffer is modelled with its ownership rule: two of four outcomes lose the packet, and the array is released only by a flush the cipher guards.
- PP472 · 2ad9a49PP470 says the six-edit fix changes no sequence, and nothing has read what each of the six ctrl_failed calls relies on
the six are read: five leave the loop at once so a release around them is unobservable, and the sixth breaks only its switch, so the fix is not uniform.
- PP470 · 45325fcthe ctrl channel's two mutexes can deadlock, and the two fixes trade one edit against a changed atomic sequence
the PIN is taken out of the session under state_mutex and the lock released before crossing into ctrl, so one order is left and the cycle is gone.
- PP469 · b3c2d4esix of seven ctrl_failed calls hold notif_mutex while it takes state_mutex, and nothing has checked for reverse order
both orders exist: the session thread holds state_mutex across the PIN call which takes notif_mutex, and the ctrl thread holds notif across ctrl_failed which takes state.
- PP468 · 02632eactrl.c has two mutexes on two objects and nothing states which guards what, or that one call site treats them apart
the two mutexes are stated with the fields each guards and what wakes its waiter, and the seven ctrl_failed calls are counted with the one that releases first.
- PP467 · 5fc4b12two arriving ctrl types are once-only and nothing states it, and their flags take the lock in one of four reads
the two once-only types are stated with their different log levels, and the locking is recorded with why levelling it in either direction would break.
- PP466 · 6da3385PP440's census does not say which ctrl types arrive, so a missing handler and a type no console sends look the same
the ten arriving types are read out of the switch and held against the census, and the remote counter is stated: a bare message spends nothing, as on the send side.
- PP340 · 5ca3f54the PSN path lives in session.c's nine holepunch call sites, so PP33's deletion would take remote play with it
The managed flow owns the PSN sequence: PP479 drives it, PP502 to PP507 settle the rules around it, and PP508 shows by running it that all seven seam methods are reached.
- PP294 · f3e7789ctrl.c is 1763 lines of control channel and PP28 sizes it together with two files it does not resemble
the control channel is modelled end to end: all 22 message types with their direction, the once-only state, both mutexes and the deadlock they formed, and a real PS5 capture replayed.
- PP465 · e8a8d58one selftest asserts a 400ms deadline within 30ms, and its design forces two waits that can each overshoot a quantum
the wake moves to 300 of 2000 so the bound sits 150ms from a correct wait and from a per-wake one, against two scheduler quanta of jitter.
- PP464 · c589b49the drop pass guards its step-back, so a stale host that moves into slot 0 is skipped and waits a whole ping cycle
the step-back is unconditional, so the increment lands on the slot the shift filled at every index including zero, and a whole table going stale empties in one pass.
- PP463 · 48a3fa4both bind-failure logs in discovery print the port after moving it on, so each names the rung it is about to try
both branches log before moving the port on, so a failure on 9303 says 9303 and one on 9319 says 9319 instead of naming the rung it is about to try.
- PP462 · 96c82cethe discovery socket's bind ladder and receive thread are unported, so nothing states where it binds or when it leaves
the ladder is eighteen rungs with each log's port beside the real one, and the loop's six turns are stated including the failed receive that leaves.
- PP460 · 4d8ec62the nine holepunch calls are recorded in file order, which is not the order they run and says nothing about failures
execution order is held apart from PP429's file order, the finis are excluded as teardown, and each step's guard is named: two quit, one is caught indirectly, one is not.
- PP459 · ac88e06the candidate race has never run over sockets, so its own claim that the first to answer wins cannot be shown
the race runs over three stub sockets: the last candidate offered wins by answering first, and an answer from an unprobed port becomes a derived candidate.
- PP458 · a7c2098PP238 and PP256 each ported the same punch loop, so two step machines model one function and neither knows it
one enum, one decision and one source reader for the loop, with the guard counting files that name its definition rather than files that mention it.
- PP457 · 0e32bbfextra responses and failed receives both re-arm the punch loop's full timeout, so a stream of either never times out
both discard paths count against a consecutive limit read from the C's own define, and a request gives the budget back so no legitimate flow reaches it.
- PP456 · c57f5bcthe punch answering loop has never run, so nothing shows that receiving something never returns success
the loop runs against a stub console: every request is answered, silence after one is the only success, and an ignored response is measured not counting as one.
- PP455 · 04b1130the punch response's masked tail is built and never sent, and nothing in the port un-masks one
the reply crosses a socket, the session-id key is un-masked from the other side, and a v6 candidate is measured sending four of its sixteen bytes.
- PP454 · 4e8bd21three classes each read the probe packet's thirteen offsets out of holepunch.c, and all three agreeing hid it
PunchResponse is the one place the packet's geometry is a number, the other three derive, and a fourth copy or a re-literalised constant now fails a test.
- PP453 · baa2416the STUN reader skips an attribute by 4 + length, so a conformant response with a padded attribute loses its address
both halves round the attribute advance up to the next multiple of four, so a conformant response with a padded attribute keeps its mapped address.
- PP452 · 45971b7the STUN exchange has never sent a datagram, so the request layout and the address reader only check each other
one binding request crosses a loopback socket and both XOR round trips come back, and the unpadded skip is now measured: a conformant response loses its address entirely.
- PP451 · 36d40f6takion's cookie ack tests byte 0xd before the length check, and the second receive inherits the first datagram's size
one helper receives a cookie ack and refuses it before any byte is read, taking its capacity from the caller's sizeof so neither datagram can narrow the other.
- PP450 · a76fa0dtakion's handshake is unported, so nothing states that a send failure aborts it while a lost ack costs a retry
the handshake is modelled - the send-aborts/receive-retries asymmetry, both init ack gates in order, the crossed stream check, and the tag as both initial sequence numbers.
- PP449 · 6af9aa7takion's AV reorder timeout is unported, and nothing states that a loss burst costs one timeout rather than one each
the AV reorder timeout is managed - one timeout per loss burst, a skip that jumps to the first buffered packet, and the two deadline tests that disagree at the deadline itself.
- PP448 · 75764aca PIN reply over rudp is encrypted one counter behind every other ctrl message, and nothing managed models that
The send's counter is modelled: a PIN reply over rudp encrypts one behind, a bare message spends nothing, and the zero-counter underflow is the arithmetic the C performs and unreachable.
- PP447 · 753a4edthe two sections declaring a remaining query state its count in prose, and one of the two is stale
Both stated counts are held against the query that answers them, run over the tree - and the count may be stated outside the section that declares the fence, as PP33's is.
- PP446 · c9c48cfthe site has no documentation area, so a page explaining how a frame reaches the screen has nowhere to be published
A documentation area at /pportal/docs, built by Starlight into the site's dist, with three joins between the two builds asserted on both sides (design recorded in
site/README.md). - PP445 · d2f1394the shim exports no general rpcrypt aeropause, so the PS5 half of the registration payload has no oracle
The PS5 aeropause is exported, so the managed derivation and layout reproduce the C's head byte for byte; the offset is bounded here because the C bounds only the target.
- PP444 · 5fb6dc4the registration request payload is still C behind a P/Invoke wrapper, so nothing managed lays out the PIN exchange
The fill, both aeropause layouts and the two inner-header forms are managed and hold against the C's own payload byte for byte; the general aeropause stays C, unexported.
- PP443 · 986c9c6three backlog lines state a line total no filename anchors, and all three are stale - one by 561
Three stale totals restated as one number per file so the recount checks them, and a guard that reports any line total no claim covers - which found a fourth, correct and uncheckable.
- PP442 · 18b4042the ctrl participant's payloads are C literals transcribed once, and nothing holds them against ctrl.c
The five payloads copied from a C array are read back out of ctrl.c and compared whole, zero-filled to the declared size so PP383's fifteen initialisers for sixteen bytes is not a false alarm.
- PP441 · 251107aseven of ctrl.c's 22 message types appear in the only recording, and nothing says which fifteen are unwitnessed
Seven of the 22 are witnessed by the recording and fifteen are not, read from the corpus so a new capture moves a type on its own; the eighth value seen is the one the enum cannot name.
- PP440 · e3f6b84nothing says which of ctrl.c's message types the port already answers, so what is left of PP294 is a guess
The 22 types ctrl.c declares, each with the managed type that answers it and a phrase saying what, compared by value and checked by reflection.
- PP439 · d4bb093ctest reports the C suite as one test, so a whole munit suite can vanish and the gate still prints 100 percent passed
The gate reads munit's own count through ctest -V and holds it against a floor of 145 that may rise and may not fall, printing the whole capture on a red or a hang.
- PP438 · 28a9069PP436 gated a third project and WarningPolicy names two, so the gate builds code whose warnings nothing enforces
The gated set is read out of ChiakiNg.slnx, so what compile.cmd builds is what the policy binds, and compare-baselines refuses every warning like the other two.
- PP437 · a9f5004nothing holds the host's imported entry points against the shim's exports, and a mismatch is a runtime crash
The 241 entry points the host names are held against the 242 the two shim headers declare, comments stripped, and the one export nothing imports is named with its reason.
- PP436 · d5f0721the site's hand-written prose names a tool and two flags, and nothing holds any of the three against the tree
compare-baselines is in the solution now, so compile.cmd builds what the front page promises, and the two flags typed into the prose are joined to the host's table.
- PP435 · c20be45scripts/holepunch carries the only two tracked ELF binaries, 14.4 MB nothing references, in a Windows-only port
Two unreferenced Linux binaries and a session log gone from HEAD, the .go source kept, a .gitignore against their return, and a check that no ELF sits under this port's source.
- PP434 · 1667415PP230's manifest check reads only the root CMakeLists.txt, so an unconditional REQUIRED in lib/ is invisible
The walk reaches lib/ and shim/ by the same column-zero rule the lookups use, so what lib/CMakeLists.txt requires is measured rather than assumed; Threads is excluded on purpose.
- PP433 · 6bb8b34CI runs two of the three suites test.cmd runs, and the third is 454 runtime checks over the native seam
the three passes are held against both files, the selftest is named local-only with PP117's hang as the reason, and a second cannot appear quietly.
- PP432 · d576a58the site's generated flag list is two behind the host, and nothing joins it to the table it is derived from
the site states the sixteen flags the host declares, and a rule in the suite that runs refuses a disagreement either way.
- PP431 · ba5e23fthe build finds Python through a module CMake removed, and its comment names a purpose the call does not serve
FindPython3 replaces the module CMake removed, the generator runs as its interpreter, and a rule refuses both by name.
- PP430 · 1aa264cCHIAKI_ENABLE_RUDP is declared and never read, so turning Remote Play over Internet off does nothing at all
the option nothing read is gone rather than wired up, and a rule refuses any option the build declares and never reads.
- PP429 · 86793d2PP340's nine holepunch call sites are named only in prose, so a tenth would change what PP33 is blocked on in silence
the nine are named by what each asks for and held in file order, and the two sockets are told apart by their port type.
- PP428 · 3ffcd8aseventeen asserted error codes are their variable's only reader, and nothing joins that count to PP404's census
a derived reader finds the seventeen the compiler prints, every one is in PP404's census, and only bright_ambassador can fail.
- PP427 · ca58835ecdh.c's eight calls are all deprecated as of OpenSSL 3.0, and they are the whole of the key agreement
ecdh.c is written against EVP: EVP_EC_gen for the key, EVP_PKEY_fromdata for both halves, EVP_PKEY_derive for the secret - and the recorded vector agrees byte for byte.
- PP426 · 42a75d2two of eleven socket calls in lib/src pass an unsigned buffer uncast, and the build has printed their warnings all along
takion's two socket calls carry the cast, and a rule over lib refuses an unsigned buffer handed over uncast, read from its declaration.
- PP425 · a9e05a1the senkusha and stream participants carry bytes copied from the capture, so the replay confirms a table not the port
the two participants build their messages from field numbers and values, and the capture judges the encoding rather than supplying it.
- PP424 · b7f7ba9the stream connection has no replay participant, so the last of PP23's four channels replays against nothing
the handshake replays against the capture and the BANG's four checks are read from it, with the derivation named as the boundary.
- PP423 · 442ae48the stream's BANG is redacted whole, so the console's verdict on the handshake goes with the keys beside it
the BANG's three key fields are zeroed in place and its six others stay, so the console's verdict is in the corpus (design recorded in
tests/corpus/exchange-ps5-four-channels.txt). - PP422 · 5d91a8ethe microphone's audio header is built with channels and bits swapped, so the console is told 16 channels at 1 bit
the channel count goes where the signature wants it, both callers are held to that, and a fresh capture carries 16 (design recorded in
tests/corpus/exchange-ps5-four-channels.txt). - PP421 · a7038a4senkusha's handshake has no replay participant, so the one channel the corpus holds whole replays against nothing
the handshake replays against PP396's capture byte for byte, and the measurement after BANG is named as out of scope rather than left to be found.
- PP420 · 3e75dd6nothing says which recorded entries belong in a corpus, and the first stream capture is 566 corrupt-frame reports of 677
the corpus selects and the recorder still records everything, with the recurring types listed per channel and the dropped counts reported.
- PP419 · ddd7e22the senkusha tap emits takion's data type where the recording says protobuf payload type, and redaction reads it as one
both protobuf channels emit the payload type: senkusha's send chain threads it and its receive peeks for it, as the stream already did.
- PP418 · a41c66cthe senkusha channel's redaction set is empty on prose alone, and the first capture of it is about to be published
both BIGs are read out of the C: senkusha's three fields still empty, and the stream's session key still the session id that earns its redaction.
- PP417 · 1712d15every commit touching a .c file restates four counted claims by hand, from commands --recount already prints exactly
--recount --apply runs the calls it prints through roadkeep, off one argument list, and stops on the first refusal.
- PP416 · 6eadd1fthe ctrl drain's failure breaks the inner loop only, so the outer loop re-enters and sends what it meant to leave
leaving the drain now drops what is still queued, so the outer loop finds nothing to re-enter it for, and the count no longer races.
- PP415 · 09330eectrl_connect_tcp is unported, and its sockaddr allocation failure reaches the user as a connect failure
the connect is modelled with its five outcomes and its dropped mutex, and the sockaddr allocation failure now reports memory rather than the network.
- PP414 · 1ac468ethe rudp offset helper carries takion's doc comment, promising a -1 nobody returns for a default that is a real answer
the comment says what the helper returns, the default is stated as an answer rather than a sentinel, and the linkage matches its neighbours.
- PP413 · 72605d0the rudp unknown-subtype arm acks a counter it never read, and zero drops half the resend buffer
the unknown arm acks no packet, the rule is that an arm may only ack a counter it read, and the send-ack it does make is unchanged.
- PP412 · 11d2193a quoted example in a rationale section is read as a claim, so citing a stale number turns the gate red on the citation
the shape is refused rather than the reader blinded, and a quoted example writes a placeholder where the number would go.
- PP411 · 6612db1the ctrl login-PIN request handler is unported, so a PIN asked for after the session id ends the session unstated
the request is modelled with the session id test between the two flags, and a PIN asked for too late ends the session rather than prompting.
- PP410 · 5b6d4c9three line-count claims sit in a shape the recount reader cannot see, and one of them is stale by 139 lines
the reader takes up to six lowercase words between a filename and its number, which brings three unscanned claims under the gate and turned the stale one red.
- PP409 · b1c744ethe three keyboard messages the console sends are unported, and an empty text arrives as no text at all
the three arrivals are modelled with PP357's size check whole, and an empty text is stated to reach a screen as the same nothing a close carries.
- PP408 · c26cefethe ctrl login-result handler is unported, so nothing states that an unsolicited PIN-incorrect raises no prompt
the handler is modelled with its warn-and-carry-on size guard, and an unsolicited PIN-incorrect is stated to raise no prompt.
- PP396 · 7530015all four tap channels exist and two have never been recorded, so PP23 owes a capture and nothing else
a run against PS5-385 recorded all four channels, and PP420's rule selected 33 entries of 677 with the dropped counts reported (design recorded in
tests/corpus/exchange-ps5-four-channels.txt). - PP369 · e6e41eeeight asserts still carry weight about data across four files, and PP357's check reads only one of them
seven of the eight are guarded elsewhere or state a fact, each with its reason censused, and the init ack's payload size is a check.
- PP29 · 8014d20regist.c 918, discovery.c 495 and discoveryservice.c 384, which decide whether a console pairs
registration and discovery are modelled end to end: the reply parser, the wake packet, the PIN exchange, the bind ladder, both read loops and the service's own ping and host table.
- PP23 · 8c5e0cbthe protocol has no specification, so a managed rewrite has no oracle except the C code it replaces
Four channels of a real PS5 exchange replay with derived bytes, so the oracle is hardware and not the C; the opaque BIG, the ECDH derivation and the MTU remain declared limits.
- PP407 · 9d7e59aeight stop-pipe inits in lib/src check their result and take a failure path, and the two in holepunch.c assert it
both stop pipes take a failure path with a cleanup ladder behind them, and a rule over lib/src refuses an asserted one.
- PP406 · 412cb9bPP404 counts 53 asserted error codes without asking which callee can fail, and on Windows most of them cannot
the census splits by whether the callee has a failure path, read out of thread.c, and the twenty that can fail carry their own ceiling.
- PP405 · cfefa2etwo logs print a sized receive buffer with %s, and neither buffer is terminated at the length the caller knows
both take %.*s with the length the caller already had, and a rule over lib/src refuses a third.
- PP404 · 701f3ee54 asserts in lib/src inspect an error code, and PP357 established that the shipped build compiles every assert out
a census counts every error code inspected by nothing but an assert, ratcheted so it may fall and not rise, and the websocket thread checks its notification lock.
- PP403 · 334cd92three strncpy copies in holepunch.c are bounded by sizeof(dest), so a full-length name or address leaves no terminator
the three copies go through copy_bounded, which truncates as before and terminates, and a rule over holepunch.c refuses any copy bounded by the size of what it writes into.
- PP401 · 5568c9ba short duid leaves the rest of a stack local untouched, so a device identifier carries stack contents to PSN
the decoder fills its destination before parsing, so a short duid yields zeros rather than stack contents.
- PP400 · fabc824the session id comes from srand(time(NULL)) and rand(), so two sessions in the same second share it
the session id draws sixteen bytes from the crypto generator, a nibble per digit, and PP33's shape is unchanged.
- PP399 · a36ee75bytes_to_hex clamps against twice its output buffer, so its bound permits four times the room it has
the clamp is against the room it has, a zero destination leaves first, and PP33's check now watches for the old shape.
- PP398 · e9247b6two allocations in lib/src are used without being checked, and one is a null dereference on the PSN path
the two are checked and the rule is stated over lib/src, with the shapes where NULL is a correct answer excused by their consumer.
- PP397 · 192f476a recorded BIG would publish the session id PP326 redacts on ctrl, because the secret list is keyed by ctrl type
the recorder asks the channel as well as the type, the tap carries the protobuf payload type, and a BIG is redacted.
- PP395 · 93ba9ebstreamconnection has no tap channel, which is the last of PP23's four modules without one
the last of PP23's four modules gets a channel: eight sends behind a chokepoint, the BIG tapped whole, the receive above the lock.
- PP394 · 9341535senkusha has no tap channel, so PP393's first half is unbuilt for one of the two modules PP23 owes
senkusha gets a channel: six protobuf sends behind one chokepoint that taps, and the receive tapped above the decode.
- PP392 · cfa499bthe session request and its answer are asserted as two halves, and nothing says the request comes first
the client-opened channel replays as a conversation, and a participant can say what it opens with.
- PP391 · 7f0ae96the replay harness has only ever been fed recordings the tests wrote, so no managed module answers the real capture
PP342's table answers PP297's capture end to end, and the harness learns which conversation a participant owns.
- PP390 · 6e8916athe fourth attempt to fix holepunch.c's log prefixes, and nothing in that file records the three decisions against it
the seven carry a marker naming the decision that made them, and the rule asks whether the file still matches PP235 and PP238.
- PP388 · 61b32f520 ordering predicates mix compacted call positions with raw offsets, so none can move onto CCall alone
every ordering predicate reads one compacted space, and the raw slicer keeps its anchor without the terminator.
- PP386 · 52b3aef47 drift predicates pin a bare call to its exact spelling, semicolon included, and four broke this block
the 27 occurrence predicates ask CCall whether a call happens; the 20 ordering ones need their arithmetic moved and are PP388.
- PP385 · 242d88aseven more sends in ctrl.c discard their result, and PP383's rule ships as a ceiling of seven rather than zero
the drain leaves, the PIN and heartbeat fail the channel, the four fallbacks report, and the ceiling is zero.
- PP384 · be99c56chiaki_rudp_send_recv discards all four send results, so a send that never left is reported as a receive timeout
all four arms read what they sent, a failed send skips the wait, and the summary says how many tries never left.
- PP383 · ca00a69ctrl_enable_features sends seven messages, discards every result, and returns void so its caller cannot know either
the feature burst returns a code, stops at the first failure, and both callers end a channel whose counter has drifted.
- PP382 · 17cad9b22 multi-byte accesses in lib/src go through a plain cast on pointers that carry no alignment guarantee
22 plain casts go through the unaligned type, four keep theirs by name, and the locator that left both lib/src sweeps dead resolves directories.
- PP381 · 6fab75aPP374's width check reads 5 of the 38 byte-order conversions in lib/src, missing every doubled parenthesis
the width reader matches both spellings of the cast, and a floor under the sweep's count is what asserts its reach.
- PP380 · f6db5c3six waits in senkusha.c log that nothing arrived and then report the measurement, or the whole run, as passed
all six wait blocks answer a silence the way the RTT loop always did, under a rule over every wait in the file.
- PP379 · 5325828the senkusha disconnect is sent and its answer dropped, so one that never left is never logged
the senkusha disconnect reads and logs its answer, and the rule covers every answering call in the file.
- PP378 · 86d26c4the pong tag is read through a plain uint32_t pointer, three lines from where the file uses the unaligned type
the pong tag reads through the unaligned type, and a rule over senkusha.c covers every cast in it.
- PP377 · eceba65three failure logs in the generic ack helper name the echo command, which is only one of its two callers
the name arrives as an argument now, and the check reads both files: senkusha's five encoders are the negative control PP373's file could not be.
- PP376 · 61735d2a BIG that lands exactly on a fragment boundary never gets its end-of-message flag
the remainder was tested against the first-message overhead even on a continuation, so a remainder of exactly mtu - 25 was consumed whole and the trailing send that carries the end flag was skipped.
- PP375 · bc1695ethe BIG fragment loop discards every send result but the last, so a truncated BIG reports success
err was assigned per fragment and read after the loop, where the trailing send had already overwritten it; the loop now leaves on the fragment that failed and names it.
- PP374 · 3b114dethe pad info timestamp is read 32 bits wide and byte-swapped 16, so the logged value is the field's top half
ntohs takes a uint16_t, so the four-byte read was truncated to its top network half before any swap; the rule is now over every conversion in lib/src, and this was the only mismatch.
- PP373 · efa9ce4two encoding-failure logs name a message the function is not encoding
both lines were the neighbour's, and one existed verbatim in two functions; the rule is now derived from each function's own name rather than from a table.
- PP372 · d14cdc5a decoded video header has no owner until the receiver takes it, and three paths lose it
the count check sat below the realloc, the streaminfo exits freed nothing, and the handover was void so a refusal could not be told from a transfer; it answers now.
- PP371 · 7c3227ba NULL disconnect reason is dereferenced twice, on the path that runs whenever a console hangs up
the flag saying the reason is there is set before the strdup that fills it; both reads now go through one tested local, and the comparison stays exact so PP336 holds.
- PP370 · 1d29a0dthe streaminfo ack's result was discarded, so a client reports connected while the console waits to be told
the ack's result is read and failing ends the state, the disconnect logs, and a check over all eight sends refuses any answer thrown away.
- PP368 · 85b4d86a gkcrypt owning a live thread was released with a bare free, leaving that thread writing into freed memory
the gkcrypt goes through the wrapper that joins its thread, the early buffer is tested before it is written, and both are checked as shapes across three files.
- PP367 · 3ed3866the AV decrypt's result is discarded, so a failed decrypt hands ciphertext to the video receiver
the AV decrypt's result is read and a failed packet is dropped, and a check over every cipher call refuses any result thrown away.
- PP366 · 9b3ec75one protobuf on the wire is three messages depending on the state, and the AV route is where every deletion waits
the three dispatch layers are a table, and the AV route's block offset and video call are asserted as PP30's premise.
- PP365 · 2e78d60state_failed is written eight times in streamconnection.c and read nowhere, so a failed handler waits out its timeout
reproduced as dead, with the predicate and the spent signal both asserted - and the same shape found in senkusha.c, ten writes and a two-field predicate, so both files are checked.
- PP364 · 9195949six cascading exit labels lift two measurements before freeing what made them, and the order is load-bearing
the six-label cascade is a table, and both measurement rescues are asserted against the frees that would lose them.
- PP363 · e8bd643the stream's idle loop treats a timeout as work, which is the inverse of the ctrl loop PP349 ported
the idle loop is a table where a timeout is the work, asserted against the ctrl loop it inverts.
- PP362 · 2fb8f99the stream connection walks three states before a stream exists, and one message can arrive before it is expected
the three states, the predicate the wait actually uses, and the early streaminfo that is replayed rather than dropped.
- PP361 · 383f388the microphone toggle logs the opposite of what it sends, and the rudp subtype switch says it is wrong
the log word is derived from the byte it describes, and the switch's three fallthroughs are a table rather than four tidy arms.
- PP360 · 383f388the ctrl handshake's response side is unported, and the remote counter starts at one or zero depending on it
the one-shot retry, the remote counter spent only where the server type decrypts, and the two downgrades - only one of which the auto-downgrade flag gates.
- PP359 · ecea469RP-Prohibit hides the stream without touching either display flag, so any DisplayA zero un-hides it
RP-Prohibit raises a third flag the DisplayA recovery branch also guards on, so nothing un-hides a prohibited session.
- PP358 · 89a2f61the ctrl response parser matches headers with strcmp, which is the defect PP296 fixed in its sibling
both ctrl headers matched without regard to case, and the check runs over every parser in lib/src rather than the one PP296 reached.
- PP357 · 9000ecathe two keyboard handlers bound their copy with an assert, and the shipped build defines NDEBUG
both handlers check the announced length against what arrived, and a shape check refuses any assert left as the only bound on a copy.
- PP356 · 1dfe4acthe ctrl connect spends the crypt counter three to six times, so the first message is not encrypted at zero
the counter accounting per target and transport, the little-endian streaming type, and the conditional headers appended last.
- PP355 · 001a6bectrl fini frees the login pin and never the message queue, so anything queued when the loop errors out leaks
the fini releases the queue as well as the pin, and the check is the symmetry over both rather than a note about one.
- PP354 · 89e5f43two ctrl receive buffers share one size field, and the rudp read limit subtracts the wrong buffer's fill
the dead 520-byte field is gone and the rudp receive takes the whole datagram, which on a UDP socket is a truncated ctrl message no longer lost.
- PP353 · 3a5f6eetwo display flags decide whether the stream is shown, and the one value the capture holds is the clearing one
the table over both flags: A raises silently, B stops the stream once, clearing is silent, and only a DisplayA zero ever says it is back.
- PP352 · e412450the two display handlers read payload bytes without checking the size, so a short message is decided by leftovers
both display handlers check before they index, and a count over every handler holds at zero rather than a check on the two that were wrong.
- PP351 · 73fc62eaccept and reject are the same ctrl message told apart by one unnamed byte, and nothing managed builds either
the 36-byte header with its length in two fields, the pre-incremented counter, and accept and reject named rather than spelled four bytes at a time.
- PP350 · d72bda6the ctrl channel owns two stop pipes for different jobs and nothing managed states which wakes what
each pipe's job named and read out of the source: the select waits on notify, a blocking send is given stop, and only a stop pokes both.
- PP349 · 704853fthe ctrl thread's loop is unported, and a cancelled select is its work branch rather than a failure
a cancelled wait is the work branch, the three conditions are read in order before and after it, and the buffer frames two messages out of one read.
- PP348 · ba08dfcctrl.c's ctrl_failed overwrites a recorded quit reason, which is the rule PP336 asserted the label keeps
the generic ctrl failure guards on NONE like the label does, so a cause the user can act on outlives the control channel dying after it.
- PP347 · 17c24c4the rudp arm copies a message into the 512-byte ctrl buffer with no bound, and its source buffer is 520
both rudp arms check the room left in the destination, and a count of unbounded copies into it holds at zero rather than a check on the two that were wrong.
- PP346 · db652fethe ctrl read loop adds eight to a uint32 length, and the wrap defeats the overflow check below it
the bound is on the announced length alone, before anything is added to it, so a header claiming four gigabytes ends the channel instead of being decrypted in place.
- PP345 · f79fb4echiaki_ctrl_set_login_pin returns void, so an allocation failure reaches the user as a wrong PIN
the ctrl login PIN handover returns a code, and a dropped PIN ends the session naming memory instead of accusing the user.
- PP344 · dcf240athe two ctrl send paths disagree about a null payload with a size, and nothing managed has either
the queue's copy, its order and the null-payload disagreement, both answers reproduced and each held against the path that gives it.
- PP343 · 22c6bfdthe only reader that finds a C function body rather than its prototype is named after the reorder queue
one reader named for what it reads, counting braces rather than trusting a closing one in column zero, with the two copies delegating to it.
- PP342 · 64fdac6a session id makes the client send three messages and nothing managed reproduces the order
the burst a session id triggers, in order, held against the capture; the heartbeat answered regardless; and the four rungs that substitute an id rather than fail.
- PP331 · e8f18efa ctrl type the enum does not name arrives on every session, and the line that would say which is commented out
the unhandled ctrl branch names the type at an informational level, and its hexdump no longer shouts.
- PP341 · c0a2226the rudp ctrl send sizes a stack buffer with a uint8_t, so a payload of 248 bytes or more overflows it
the length is a size_t, so the sum that fills the buffer is the sum that sized it, and a check reads for the shape rather than the line.
- PP339 · 7ef7843a failed rudp init is logged as an error and then ignored, so the session fails later naming something else
both failures now quit instead of polling for a stop nobody asked for, and a check finds the shape rather than the line - which is how the second one was found.
- PP338 · f8f2513stop, join and fini have an order nothing states, and both wrong orders fail as something else
the phase table saying what stop, join and fini do in each phase, and the four wake-ups a stop performs, held against session.c.
- PP337 · 5cbfdc2the device id a console is told is mostly fixed bytes, and nothing managed builds one
the device id's fixed prefix and written zeroes, the colon that pins the address family, the target, and the 360p a disabled video actually asks for.
- PP336 · a3f0ae5the session thread ends through two labels with different cleanup, and nothing managed says which reason a client sees
the two exits, the fall-through that guarantees one quit event, and the rule that a recorded reason outlives the generic failure after it.
- PP335 · 9f77a95the login PIN loop says a PIN was wrong from a flag set before anyone could know, and nothing managed has it
the loop, the unbounded wait for a person, the inner ctrl-failure check, and the flag that says a PIN was wrong because the console asked twice.
- PP334 · 0ada1fethe RP-Version retry is three attempts and the third reads the same reply differently, and nothing managed reproduces it
the three rungs, the strcmp guard, the 5.0 substitution and the asymmetry the last attempt reads a reply with, as a decision table over one answer.
- PP333 · f68dd94PP332 added a second HTTP head parser beside PP33's, and the two disagree about spacing and duplicates
the duplicate reader is gone and the answer goes through PP33's parser, so libchiaki's three transcribed quirks apply to it like every other reply.
- PP332 · 3adf853nothing managed builds the session request, so PP297's recording is an oracle with nothing to judge
the managed session request, redacted the way the capture was, is character for character the head that reached a real PS5.
- PP330 · e847c3ethe executable, its window and the installer carry upstream's chiaki mark, and the site now ships a different one
the site's mark rendered to a seven-size .ico that the executable, its window and the installer all carry, stamped with the SVG's hash so a redrawn logo turns the suite red.
- PP329 · 2c5966f--capture-mapping and --ratchet take whatever follows them, so a flag after either is swallowed as its argument
one rule reads the value a flag takes and refuses a following --flag as that value, so the three callers that take an optional argument all answer the same way.
- PP328 · d6f2b97the recorder divides the tick rate down first, so every offset it stamps is wrong where that division has a remainder
the offset is the ticks scaled by the counter's own rate, so a machine whose counter is not a whole number of ticks per microsecond records the time that passed.
- PP327 · 067016cthe recorder exists and nothing turns it on, so making a capture is still a code change rather than a flag
--record arms the recorder before any window opens and writes the exchange on exit, so a capture is a session with a console rather than a code change.
- PP326 · 2188bb7nothing joins PP323's tap to PP297's recording, and a ctrl payload rendered as hex is eaten by the log sanitiser
a recorder turns tapped messages into entries, rendering ctrl bytes as dash-separated pairs no sanitiser rule matches and dropping the payload of the six types that carry a secret.
- PP325 · 45e3818the recording's redaction is shaped for log lines, so RP-Nonce reaches the file the moment a payload is structured
a second sanitiser takes a value because of the header above it, composed in front of PP88's, so a short registration key and a base64 nonce never reach the recording.
- PP323 · e47b3eelibchiaki hands a managed caller a log and nothing else, so a recording of a session has no payload to hold
the four chokepoints where a session is still plaintext now emit a direction, a channel, a type and the bytes to an installable tap, so PP297's recording has a source the log could never be.
- PP297 · e49691cno session exchange has ever been captured, so the four modules with no test cannot be ported against anything
a real PS5 woken out of standby, one session driven end to end, and the exchange recorded to tests/corpus with every secret redacted by the rule written for it.
- PP293 · 7cdd146session.c is 1206 lines and owns the session lifetime, and PP28 sizes it together with two files it does not resemble
the connect sequence, the retry ladder, the PIN loop, the teardown, the init constants and the stop-join-fini order, each against session.c or against PP297's capture.
- PP321 · a1e8c4cthe buffered pacer's interval comes from the display and nothing states what a rate change mid-stream does to it
the display's rate paces the present, a rate change gets past an armed pace thread, and a missed deadline catches up in whole intervals.
- PP320 · 103d02fthe log sanitiser redacts nothing in a hexdump, so RP-RegistKey and RP-Nonce survive in the bytes and the ASCII gutter
a hexdump row is redacted whole, bytes and gutter, before any line rule runs (design §PP320 superseded: field names and grouped hex leave the tail on the next row unlabelled).
- PP319 · bd0367eno presentation path carries HDR: D3DImage refuses ten bits and a DirectComposition visual hides WPF's overlay
the overlay goes above the video in the compositor's tree, measured to Commit and the only one of three that keeps both (design §PP319 superseded: topmost is about child windows).
- PP318 · cdd8389an assertion comparing two constants passes every analyzer, and one grep found one still standing in the suite
A source sweep over the assertion corpus fails on the shape, and the one Assert.Equal(0, 0) it was written against is deleted.
- PP317 · 4db91acfour MSBuild warnings print on every build of the test project, and PP316's policy cannot reach any of them
The two bare Reference items are gone and the framework reference supplies both assemblies, so the build prints zero warnings where it printed four.
- PP316 · d353ae6a test named for the UUID's four dashes asserts one literal against another, and the analyzer says so in every run
TreatWarningsAsErrors on both gated projects, and the four it would have refused are fixed - one of them a property whose rename found a caller no grep for its type could see.
- PP163 · 59d757ban HDR picture cannot reach the display through D3DImage, which refuses any surface wider than eight bits
topmost FALSE and TRUE draw the same red over WPF's content, so PP10's overlay is not seen either way (design §PP163 superseded: the compositor accepts the tree and the pixel does not follow).
- PP315 · a0597aethe ceiling reads 32 and none of the 32 is a task that needs a test written, so the number still is not the debt
the index takes every file a commit carried, twenty gates and measurements say so, and the ceiling reads zero.
- PP314 · f8f97afthe ceiling says 95 and the port owes about one, so the number a reader acts on overstates the debt by two orders
an index of which assertion file each shipping commit carried, generated from git: 95 to 32.
- PP312 · 3b28dd1brief has offered the same unstartable task four sessions running, because what blocks it is a console and not a dep
five lines say what they wait on, and the names are held against the config that declares them.
- PP311 · 46596c1an id written in a fixture or an expected value pays a real task's debt, because the join reads the whole file
the join cannot be parsed apart, so every payment is auditable: --ratchet <id> says where.
- PP310 · 4226476a task whose output is prose cannot ship: nothing asserts it, so the debt rises past a ceiling that may not rise
an exempt line in the ceiling file, refused unless it carries the reason it is exempt.
- PP309 · cb9aa9fPP225 is the one code change in the port that shipped with nothing asserting it, and it is still unasserted
the two silent halves of PP225 read out of the source, and the ratchet down to 95.
- PP308 · 3510a9cthe ratchet's id join misses 75 tasks whose test shipped in the same commit, and only git can see that
git answers where the test already is, as a diagnostic; the gate stays the id join, free and offline.
- PP307 · 1be2d07the ratchet holds 96 tasks with no assertion naming them and nothing schedules paying any of them
the 96 read against git: 75 have a test in their own commit, 11 could not, and 1 is real.
- PP306 · 52579adthe host has seven command-line flags, nothing lists them, and a mistyped one opens the window instead of refusing
--help lists every flag, an unknown one is refused, and the list is held against the dispatch.
- PP305 · cdcd65athe ratchet's join is one id per task, so work asserted under the id it continued reads as untested
--ratchet lists the debt beside the ledger's sentences, and PP300's own assertions now name it.
- PP304 · 3799373every counted claim a commit invalidates is restated by hand, from a list a red test produces after the work is done
ChiakiNg.exe --recount prints each stale size with the governed call that fixes it, anchor resolved.
- PP300 · 5dbfe67discovery's protocol half is wrapped rather than ported, so its parser and classifier are still C
Discovery's packets, classifier and reply parser are now managed code, each answer compared with the C's on the same bytes.
- PP299 · 46e78daa console omitting system-version crashes discovery through an unguarded atoi(NULL) in the classifier
the guard in discovery.c, and the shim's substitution deleted so a test can reach the null.
- PP298 · b5f6f56the GMAC needs a 16-byte nonce and a 4-byte tag, and .NET's AesGcm accepts neither, so PP26 cannot finish on the BCL
GHASH and the GCM tag by hand, agreeing with the runtime's GCM where it answers and with chiaki's where it will not.
- PP296 · 1030a0bRP-Nonce is matched case-sensitively though HTTP header names are not, so a console spelling it otherwise fails
all three header names matched without regard to case, in session.c and in the port together.
- PP292 · e4fe156the frames-lost count subtracts a wrapped sequence number as a plain int, so a loss across the wrap counts -65528
the count reduced against the wrap on both sides, so the two still agree and the number is right.
- PP291 · c9517f7videoreceiver.c is the next link above the ported frame processor and no task owns it, so the chain stops there
a managed receiver assembles the ported decisions behind a four-method seam, and matches the C frame for frame where the C can be driven.
- PP290 · 166e6c5thirteen exported C functions are referenced nowhere in the tree, and nothing names them as deletable
a test names the thirteen exports nothing references, asserts the set exactly, and reports movement in either direction.
- PP289 · 4a867ffframeprocessor.c is the only caller of the FEC decode and no task owns porting it, so PP30 cannot finish
a managed assembler produces the same frame and verdict as the C on six loss patterns, and the two agree on a second flush being destructive.
- PP288 · 01acad3chiaki_fec_encode has no caller anywhere in the tree, and it is the half of fec.c that pulls in jerasure_matrix_encode
the dead encode and its jerasure call are gone, PP30 reads 13, and PP285's guard caught the lib/src total the deletion moved.
- PP287 · 759231efec.c's encode and decode are jerasure calls with no managed counterpart, so PP30's 14 sites cannot go
a managed decode produces byte-identical frames to jerasure on all 64 recorded cases, and nothing in the suite survives a decoder that does nothing.
- PP286 · cde332fthe Galois field and Cauchy matrix jerasure computes have no managed counterpart, so PP30 has nothing to build on
a managed GF(2^8) and Cauchy matrix agree with jerasure's entry for entry on eight shapes, and a rival polynomial is what proves the comparison bites.
- PP285 · a359c7cPP23 sizes the oracle from 16935 lines in lib/src and 5512 in test, and no reading of the tree produces either
a directory total is checked where it names its counting rule, and PP23's two are restated from the tree instead of from memory.
- PP284 · d92bccaPP163's last question needs somebody to look at a window, and nothing in the tree opens one to look at
--dcomp-demo puts the visual and a WPF overlay on screen in the arrangement the design proposes, and says what each colour means.
- PP283 · a734c9dnothing asks whether a WPF window's own HWND accepts a DirectComposition target, which PP163's design assumes
a WPF window's own HWND takes the target and the tree Commits, so the compositor half of PP163's option survives the window it would run in.
- PP282 · 1ea0807PP281 built the DirectComposition path with the visual on top of the window, the arrangement that hides PP10's overlay
the probe takes the topmost flag and both arrangements Commit, including the one that puts the video behind PP10's overlay.
- PP281 · 0a26a80PP163 names DirectComposition the only way out that keeps PP10's overlay, and never built the path to see if it holds
the path is built to Commit and it succeeds on a ten-bit composition swapchain, and mingw's dcomp.h forced the shim's one C++ file.
- PP280 · 582cd39a line-count premise is prose, so nothing rechecks it and two of seven no longer match the tree
every line count the backlog states about a file is now checked against the file, and the four that had drifted are corrected.
- PP279 · 022a9a4a one-segment drift path is recognised by existing, so deleting roadkeep.toml or package.cmd leaves the corpus silently
the five root files are named and tested on membership, so one going missing fails by name, and a constant naming an undeclared one is reported.
- PP278 · 089d4e8the corpus guard sweeps only paths starting gui\, so every drift source outside it is held by a hand-written list
the corpus is reflected against the checkout instead of filtered on a prefix - 17 hand-listed paths became 58 found ones, and a literal is now refused.
- PP277 · a0e6b49the installer keeps upstream's AppId, so it upgrades an installed chiaki-ng in place rather than sitting beside it
an AppId and an install name of this port's own, held against the assembly rather than a literal.
- PP276 · 20b59ada drift locator returns the first match walking up, so a name that also exists under app\ resolves to the wrong file
one walk finds the root and every repository path is built from it, proved on a tree with a decoy nearer the caller than the real file.
- PP275 · 003556f.gitignore ignores scripts/chiaki-ng.iss, which this port maintains by hand rather than generates
the inherited rule deleted; git add -A stages the script's removal with no message, and two assertions now read the root's ignore list.
- PP274 · a587955the Inno Setup script packages ..\chiaki-ng-Win\chiaki.exe, a path no build creates and a client that is off
the script points at PP273's payload, ISCC compiles it to a 92 MB installer at 1.10.0 read off the exe, and three assertions hold the spellings.
- PP273 · cf021b6nothing assembles what an installer would ship, so the native libraries the host loads beside itself are never packaged
package.cmd walks the payload from the resolver's own table and proves it under TEMP, where no checkout can answer for a DLL it missed.
- PP38 · d6ac72dnothing counts the shipped lines that carry no assertion, so the rule is a sentence rather than a gate
the shipped tasks no assertion names, counted against a ceiling that may fall and not rise.
- PP36 · 62ec429the only CI job is the roadkeep lint gate, so no test result can turn a branch red
both suites fail the job that builds, and their results are kept from the run that goes red.
- PP26 · b5f6f563242 lines of crypto over OpenSSL sit between a registration and a session
rpcrypt and gkcrypt both run on the base class library and a hand-written GHASH, agreeing with the C on every vector and every path.
- PP22 · 014065bevery CI workflow was deleted, so nothing builds, signs or packages the application
MSVC and vcpkg on a runner, with every path the workflow names asserted.
- PP272 · 5333276a drift check whose anchor moved extracts nothing, and its negative assertions then pass
every drift predicate must answer no to an empty file, and the sweep named seven that answered yes.
- PP271 · 86f364bninety drift locators can each answer null, and the test using one then passes without reading anything
every locator in the assembly must find its file, and the sweep named one that never had - unblocking three checks that had asserted nothing.
- PP270 · d10ebf6nothing fails when the shim the managed suite loaded is older than the sources it is built from
a stale native library now fails the managed suite by name, and the check was proved by backdating the one this run loads.
- PP269 · ba67683every managed test since PP21 loads a shim the build did not make, the deploy that refreshes it being off
the deploy refreshes the shim with the Qt client off, and PP261's reading of the encoder is now produced by calling it.
- PP268 · d1e1e26the candidate probe is built and judged and never sent, so the layout has not been across a socket
one probe exchange runs over a real socket, so the packet layout and the judgements are exercised rather than agreed upon.
- PP267 · 579de39the push socket is described and never opened, so nothing turns a frame into a notification
the push channel is opened and read from the pieces already ported, with both places a managed socket cannot reproduce the core written down.
- PP266 · 685bf8cthe five session calls have a transport, shapes and outcomes, and no function that performs one
the five call sites are built on the transport and shapes already ported, and a bodyless request now carries the content type the core sends.
- PP265 · 8556367the port guessing settings are unported, and a refused value is indistinguishable from an accepted one
the settings are ported with the outcome of a change kept apart from the value, and the pair a caller cannot set named.
- PP264 · e395f66the public accessors are unported, and one copies forty-six bytes into a buffer whose size it never states
the surface is ported with what is written kept apart from what is documented, and the guard count measured across all six.
- PP263 · d6544a4the event glue is unported, and the callback keeps only the last socket to fire
the glue is ported with watching separated from succeeding, and the round's last socket stated as what the wait actually reports.
- PP262 · d6cde70the queue's ownership is unported, and its link invariant lives in the constructor not the enqueue
the queue's ownership is ported apart from its behaviour, and the removal PP239 rests on is stated as one match per call.
- PP261 · c0f314cthe diagnostic printers are unported, and a failed encode is handled then printed anyway
the printers are ported with the encoding arithmetic computed rather than trusted, so the unreachable branch is kept and its reason stated.
- PP260 · 25b8d59the upnp mappings are unported, and they are added with a lease that never expires
the mappings are ported with what removes them stated as a value, and the address buffer's width carried so the family limit is visible.
- PP259 · aebffefthe stun lookup is unported, and its first call uses the ipv4 servers whatever family it was asked for
the lookup is ported with which call ran kept apart from what was asked, and the commented-out fetcher measured rather than described.
- PP258 · a812f41creating a session is unported, and a websocket that fails to connect blocks the caller forever
the create is ported with bounded and cancellable as separate questions, so the wait that is neither is named rather than looking like the others.
- PP257 · a7deaecstarting a session is unported, and two of its failures return success through a shadowed variable
the start is ported with what went wrong kept apart from what is reported, so the two failures the shadow swallows are named rather than absent.
- PP256 · 8c6c718the followup receive loop is unported, and a socket error spins it with no way out
the loop is ported with leaving and continuing as separate answers, so the one failure that only ever continues can be named.
- PP255 · c09bae6the upnp discovery thread is unported, and its timeout writes the status outside the lock
the discovery is ported with holding the lock and having company as separate questions, so the one writer that is neither can be named.
- PP254 · 3c2aee5the websocket fqdn lookup is unported, and its tokener failure reports success with no address written
the lookup is ported with whether it failed kept apart from whether it wrote, and the two allocation failures asserted as answering differently.
- PP253 · 7e26a39the NAT diagnosis that writes back into the session is unported, and PP251 stated a rule the repo already contradicted
the write-back is ported as a verdict separate from its values, and PP251's restated rule is replaced by asking the generators that already existed.
- PP252 · b163361the offer's address discovery is unported, and a failed local lookup is advertised as an empty address
the discovery is ported as one function of gateway status, with what the local lookup knew kept apart from what is advertised.
- PP251 · 4dfea9bthe offer's candidate layout is unported, and what it hands forward as the mapped port can be a guess
the five layouts are ported as one function of the path taken, and slot zero's port is separated from its address so the comment's half-truth is visible.
- PP250 · d16fdfbthe session message writer's SIZING is unported - the buffer comes from a different format string than the text
the sizing half is ported with the two format lengths measured off the source, and the reported length separated from the one actually produced.
- PP249 · 09f438cthe punch's two cleanups are unported, and one path reaches success holding a timeout
the two endings are ported apart with their three differences named, and the path where the held code and the returned one disagree is asserted.
- PP248 · bcdcb9cevery private-address test in the punch compares one byte too many, so none of them can match
the classification is ported over a faithful strncmp, so the tests produce the failure from the counts the core passes instead of describing it.
- PP247 · ea36261response validation is unported, and a derived candidate is exempt from every check that aborts
the checks are ported with the derived exemption as a parameter rather than a special case, and the two aborts' error placement asserted apart.
- PP246 · aac531breading a candidate response is unported, and the address it allocates leaks on the common path
the intake is ported with the release accounting written down per exit, and the index bound stated as the guard it actually depends on.
- PP245 · b336015the candidate wait loop is unported, and one of its errors says the opposite of what happened
the wait is ported with both timeout shapes intact, and the branch claiming no socket had data now carries the assertion that one did.
- PP244 · ebb4aebthe probe send loop is unported, and the flag saying it worked only means one address resolved
the send loop is ported with sending and clearing the flag as separate answers, and the unreachable clause kept rather than simplified away.
- PP243 · 1909159the candidate probe is unported, and its arrays are sized by a count the other end chose
the probe is ported against the same constants the reply uses, and the count the console chooses now has a measured stack size beside it rather than an adjective.
- PP242 · 0af933athe accept wait is unported, and its failure names a wider wait than the one that was made
the wait asking one action is ported and the branch reporting two is asserted as still saying so, with the acknowledgement now built by the one function that serves all three sites.
- PP241 · 4f14a98two calls in the punch path have their answers thrown away, and one of them cannot always report failure
the offer and the check whose answers are discarded, and the ids that look reused and are not.
- PP240 · 5ee70b6the call that opens a hole is unported: two preconditions, an offer, and an ordering that decides who answers next
the two preconditions, and the flag set before the answer so a second offer has an owner.
- PP239 · 76f1f99the PS4 wakeup is unported: a discovery hop whose answer is copied into a fixed stack buffer
the wakeup's discovery hop, with the shadowed url given two names and the buffer the network fills.
- PP238 · 7461a47the loop answering punch requests is unported, and it reports success only by the traffic stopping
the answering loop whose only success is a silence, and PP237's log count corrected to three.
- PP237 · da41b8bthe other reply sender is the same function twice, and its failure logs an int through a string format
the two senders asserted identical so one builder serves both, and the copy that logs an int as a string.
- PP236 · e73873bthe hole punching reply is unported: twenty-byte ids in thirty-two-byte slots, and an address xored over the session ids
the hole punching reply built byte by byte, with the gap the ids leave and the key they double as.
- PP235 · 04f9640deleting a session is unported, and both its failure messages name a different function entirely
the delete as a custom request, and the three log messages that name the wrong call counted together.
- PP234 · c63bd2ethe local address pick is unported, and its rule prefers wireless over ethernet by where the walk stops
the local address pick, where wireless wins by ending the walk, and the length nothing reads.
- PP233 · eddf7a9the session check is unported: one call, two endpoints, and a response parsed only to be thrown away
the session check as two endpoints and four outcomes, one of which is a failure answered with success.
- PP232 · 497632fthe fetched STUN lists are unported: two files from a third-party repository, parsed by two different rules
the two fetched lists, cut on a colon and on a bracket, with the IPv6 failure that names the IPv4 file.
- PP231 · 5090e7bthe websocket thread's auto-ACK of offers is unported, and its parse failure drops the notification entirely
the offer acknowledged with its own request id, and the parse failure that drops the notification instead.
- PP230 · 4885328the vcpkg manifest does not carry a package the build now requires unconditionally, so CI cannot configure
the manifest holding what the build cannot start without, compared against cmake instead of remembered.
- PP229 · 8f7362ano check confirms a press reaches the document and the grid, so the last link is verified by a person looking
a press pushed through SDL's own queue, reaching the document and the rows with no pad and no window.
- PP228 · 3c1b988with no pad attached the mapping screen dies on a null mapping instead of saying there is no pad
absence asked of the count, because a struct's zero value is not nothing and the guard beneath it could only pass.
- PP227 · 1f70f8ano test raises a real click, so the handler that turns one into a row is the one thing nothing exercises
the real window driven through UI Automation, invoked rather than clicked so it needs no foreground.
- PP226 · 192ebe1nothing in this port has ever looked at what a screen draws, so a screen that never appeared kept the suite green
the screen rendered off-screen to a PNG, and the background without which it is unreadable.
- PP225 · 0d3d195setting StartupUri to null throws, so the run dies inside OnStartup and no window appears at all
the startup work queued behind the window instead of clearing a property that refuses to be cleared.
- PP224 · 55bdab3the mapping screen never appears and nothing says why, because the window it looks for does not exist yet
the window opened by the method that fills it, and every reason for not filling it said in the window.
- PP223 · e770eb7the mapping screen has never been on screen, and its row buttons are markup that answers no click
the mapping screen shown against a real pad, with the click resolved as a plain method and the device opened last.
- PP222 · 7f24584with the analog opt-in off the triggers vanish from the log too, so pressing one produces no sign it was seen
a trigger pull as one line, shown while the sticks stay out, because only the sticks flood.
- PP221 · 3b7aa18the axis report waits for movement, so a stick resting off centre and still reads the same as a centred one
the axis position read instead of waited for, against the header's own band for what counts as centred.
- PP220 · 9bfa66cthe capture diagnostic asks for analog and a resting stick drowns it, so the presses that matter cannot be found
the analog opt-in off unless asked for, and the axis range printed either way, which is what tells noise from a stick off centre.
- PP219 · 5ce534cthe port never opens the device, so a pad that enumerates correctly delivers no button, axis or hat event at all
the device opened, without which no press arrives at all, and a live capture diagnostic that says which silence it is.
- PP218 · c2c1b16nothing in the port lists SDL's devices, names one or reads its mapping string, so the screen has no pad to show
SDL's device list read through the thread that owns it, and a --controllers report carrying the mapping string whole.
- PP217 · 20d92a9nothing joins the SDL thread, the capture and the mapping screen, so every piece of PP18 is a component with no consumer
the mapping screen joined to the pad by draining its own request log, with the cross-thread arm the port's dedicated poll created.
- PP215 · 10f314fthe websocket loop feeds every frame to one json-c tokener, and reads a frame that yields nothing as a bad frame
json-c's tokener measured through the shim: unfinished input is permanent, so the port parses each frame with no state between them.
- PP214 · 0ac939enothing in the port drives the push socket's frames, so the ping cadence and what each frame kind means are unstated
the frame loop's keepalive and dispatch, where the pong deadline and the ping cadence are one subtraction asked twice.
- PP213 · 4cfda7fthe two session-message waits are unported, and an ack for the wrong request id has nothing that ends it
the two session-message waits as dispositions, terminate asked before the mask, and the ack path that clears nothing.
- PP212 · 72e0c22nothing in the port holds the websocket notifications, so every holepunch wait has no queue to walk
the notification queue as a walk with a cursor that removes nothing, and a timeout that bounds silence rather than the call.
- PP211 · f31a0b8the mapping grid navigates by Left, Right and three-row jumps, none of which the ported focus chain answers
the mapping grid's four directions as arithmetic over three columns whose first cell is the checkbox, that checkbox's unguarded Down reproduced.
- PP210 · 544eccethe session create body sends the same word for three identity fields, and the account id is an int in one payload
the four bodies a session is set up with, and what they call things.
- PP209 · da75f5fan account with no consoles is reported as out of memory, on the one error path that returns without cleaning up
the console list, with the empty case told apart from the failing one.
- PP208 · bc4a2c4the session uuid is drawn from rand reseeded by the clock, so two sessions in one second share an identifier
the shape reproduced, the collision demonstrated rather than shipped.
- PP207 · 34364ceeight of the session's nineteen states are never entered, and one of them is what the already-started guard tests
the machine as a history, with the dead branches counted from the source.
- PP206 · 2d83161the wake-up URL is built in a buffer too small for most online ids, and asks for a PS4 the device list refuses
the whole URL built here, with the clipping measured rather than counted.
- PP205 · 9cfff91the probe packet leaves thirty-five of its eighty-eight bytes empty, and its reply masks the console address with sids
what the candidate race actually puts on the wire.
- PP204 · 5bb773fthe two port guessers wrap the same overflow to places far apart, and disagree on offering the port that answered
both generators ported, with the wraps that do not match each other.
- PP203 · 7812446the RUDP exchange recognises what it asked for by one byte, and unwraps a wrong message instead of dropping it
the wait matched a byte at a time, and what a short answer costs.
- PP202 · 75253fagiving up on one RUDP packet acknowledges every older one, and the loop's rewind skips as many as the ack removed
sixteen packets, twenty-five tries, and what one timeout takes with it.
- PP201 · 816d40dthe RUDP size field is read twice and answers differently, and four packet types pass as one control message
the frame under the hole punching, with its marker nibble and its recursive tail.
- PP200 · 6c367adthe STUN reader believes the first mapped address it meets, and skips attributes without their padding
twenty bytes out, an address back, and one check this port refuses to lose.
- PP199 · 0a3cdb1the port allocation tree looks further ahead the less it knows, and one leaf subtracts the wrong way round
a shrinking look-ahead, a backwards leaf, an unsigned one, and PP198's check covering half its header.
- PP198 · cba22d3the STUN server shuffle looks like Fisher-Yates but excludes the index it is shuffling, so the last can never stay last
the bias reproduced and pinned, so a correction announces itself.
- PP197 · f8a7f5dthe candidate race is settled by the first datagram to answer, not by which candidate is better
the decision the sockets feed, ported so it can be tested without opening one.
- PP196 · 9167dd2the message writer cannot use a JSON library, because one field must be written broken for the console to accept it
written with format strings, broken where the console needs it, and read back whole.
- PP195 · ce340d0the candidate reader defaults three fields the core requires, and reads the struct's key rather than the wire's
all five fields required, mappedAddr by its wire name, one bad candidate failing the message.
- PP194 · 5d7a022a malformed route MAC in a connection request becomes six zeros with no error, and one base64 field sizes by input
six fields, a MAC that silently zeroes, and a decode not copied.
- PP193 · a46fb0fthe candidate reader names three type words and the writer produces four, so the fourth is a fallback
three words read, four written, and the fourth is the fallback.
- PP192 · f1e2999customData1 is base64 twice, so one decode yields printable bytes of a plausible length that are not the payload
base64 twice, and a band that tolerates four bytes it discards.
- PP191 · 76435d5PSN sends a session message field with no value at all, and the action flags skip a bit a port would fill
the payload three layers down, and the field PSN sends broken.
- PP190 · a83a86cthe push notification types are a mask a caller waits on, and six of them are namespaced strings no rule derives
six identifiers, powers of two, and a zero that wakes nobody.
- PP189 · 1a44f10the bodies the core posts are JSON only because a header overrides what POSTFIELDS would announce them as
four posts and a delete, with the header that stops JSON being form data.
- PP188 · 49ef2fcthe one call site that is a WebSocket sends its subprotocol as a header and disables the timeout every other one sets
the push socket, its fixed strings, and the transfer with no timeout.
- PP187 · 427daffthe three curl behaviours HttpClient lacks were a plan, so each call site would still decide what curl was doing
a transfer that fails the way curl fails, driven against a real server.
- PP186 · 0aa4127PP33 is sized at 420 call sites, which is the wrong number to plan a translation from and the only one anybody has
ten behaviours behind four hundred sites, and the three that are the work.
- PP185 · ce00e10which of the C suite's files the port answers for was an audit run by hand, right on the day it was run
the audit as a check, and a new C case that arrives red.
- PP184 · 2d82be1the two HTTP parsers have one signature and were compared nowhere, so a divergence would surface as a reply misread
a corpus through both parsers, and nothing between them.
- PP183 · 9743d0ajson-c cannot tell a null value from a missing key and the port could, so it would read a field the other client skips
one corpus through both, and the null json-c calls nothing.
- PP182 · 9de6cdfnothing held the managed side to appending the ledger rather than truncating it, or to reporting a write it could not do
two rows where two sessions ran, and a failed write that says so.
- PP181 · bd964dethe seam skipped the two setters whose defaults are the ledger's never-empty rule, so a row could carry two blanks
the two never-empty fields, which the seam could leave blank.
- PP180 · ad30856the five frame stages are carried in the ledger and nothing could fill them, so the port wrote zeros regardless
the five stages fillable, separate from each other and from the handoff.
- PP179 · a3ab721nothing holds the managed ledger row to carrying every field and no hostname, and it is the file users attach to reports
every field carried, nothing identifying, and a check proved able to catch a leak.
- PP178 · 67cc71dthe ledger the two clients share replaces dangerous characters rather than escaping, and nothing held the port to it
hostile text through the seam, and one parseable row out of it.
- PP177 · 5b7d14athe baseline seam exposes only the average, which is the number its own header warns overstates and understates at once
the percentile the average hides, reachable and asserted on the C's own numbers.
- PP176 · 619136ethe C suite's allocation budget is the one case the port never carried, and it is what a managed rewrite loses first
zero bytes per packet on the managed side, and a counter proved able to fail.
- PP175 · de52aa9PP163 named two ways out of the eight-bit ceiling and priced neither, so the HDR decision has no measurement
the other path carries HDR10 at ten bits, and the obvious test for it is not one.
- PP174 · c369722nothing stops a second copy of a pad's size being typed back into the port, which is how the Qt client reached three
one client, one answer, as a check rather than a claim.
- PP173 · 5499bd0the mapping grid draws a row one button wide or two, and nothing yet draws the capture the pad drives
the grid, the capture modal, and the slot that is drawn only when it binds something.
- PP172 · 581dc39the mapping screen suppresses one quit per capture with a flag that puts itself back, and closes twice without a guard
the screen's call sequence, and the two one-shots it turns on.
- PP171 · a5a6e42four scaler combos share two lists and take four different defaults, and eleven switches are stored as words
two lists behind four combos, and eleven switches spelt yes or no.
- PP170 · 3c21fb3the tuning screen's hue slider is radians cut short at 6.28, and temperature carries bounds that are round in no unit
eighteen rows in one table, with the four numbers rounding would lose.
- PP169 · 31f2390the renderer presets are three names for one choice, and the store's word for Custom is the empty string
seven preset lists, five of them hiding a section behind an empty string.
- PP168 · 8866911the colour mapping sliders repeat each row's condition, and one option is named for the function that hides it
twenty-two rows in one table, and the three things repeating them hid.
- PP167 · 7aa8ad1the settings screen's nine tabs each exist and nothing composes them into one dialog
the strip, the order two switches dispatch on, and the one tab that computes its own focus.
- PP166 · 6379cdathe Config tab reads its profile from the default store and turns verbose on by clearing one bit
the ninth tab, the profile from the other store, and a mask that subtracts.
- PP165 · ae773ebthe Remote tab decides its one button from four credentials, and its two sliders default differently
the tab, the four values one login is, and a clamp with a floor and no ceiling.
- PP164 · 7643d61the Controllers tab stores a rumble word whose capital letter is not the label's, and an increment in hundredths
the tab, the word a derived label loses, and the band shared with the audio path.
- PP162 · 1e5fbb1the view tests race through WPF's static initialisation and the whole suite reports a hang, intermittently
one runner config, and the assertion that it still reaches the runner.
- PP161 · 0c2f0c5the Keys tab derives each binding's settings key from a translatable label, and two labels contradict their enum
the tab, its raw lookup beside PP2's declared table, and the two inverted labels named.
- PP61 · 74bb83fthe startup harness labels a warm run cold, because the OS file cache outlives the process
the caller states the cache, the report stamps it, and unknown compares with nothing.
- PP21 · 83966caQt6 is still required to build: Core, Gui, Quick, Qml, Svg, Widgets, Concurrent and WebEngineQuick
Qt off in the build, the port's own libplacebo moved out of its branch, and the source the drift checks read now guarded.
- PP18 · d224562the controller mapping screen is QML bound to the live SDL mapping strings
the screen, its capture and the pad joined, with the device's own bindings confirmed against it.
- PP17 · 925a563the renderer tuning and colour mapping screens are 2132 lines of QML over libplacebo options
both screens, their forty labels, and the one rule these two turned out to follow.
- PP16 · 8ae0daathe settings screen is 2984 lines of QML against 149 properties exposed from C++
the other eight tabs, each with the rules its own store spells differently.
- PP15 · cead813the PSN login and token dialogs are 882 lines of QML wrapped around the embedded browser
the token screen, its log, and the ask that decides what the browser clears.
- PP10 · a298270the stream HUD and the in-stream menu are QML drawn over the video and disappear with the renderer
the menu's two inversions, the mode that is not stored, and the preset that starts at one.
- PP9 · 6cfc3acthe video is presented by libplacebo into a Vulkan-backed QQuickWindow, which WPF cannot host
libplacebo on D3D11 into a surface WPF composes, with a decoded NV12 frame to prove it.
- PP7 · 73b33e9PSN OAuth login runs in a QtWebEngine view, a bundled browser the WPF host has no equivalent for
WebView2 in the slot, its rules asserted, and the user-agent forgery deleted not ported.
- PP160 · b161b9dthe Consoles tab deletes by index and unhides by MAC, and streamer mode hides the address rather than the name
the tab, its two captions, the radio group over one setting and the two ways a row is named.
- PP159 · e27c28dPP158 shipped the Audio tab's rules with no screen to draw them on, and its device lists are the only dynamic ones
the screen, and the one list on any tab that has to be refilled rather than assigned.
- PP158 · c76ea8ffour Audio tab controls carry a unit conversion the store does not show, and one of two percent sliders scales
the tab's four unit conversions, and the empty-first-entry rule moved into one type.
- PP157 · 87f65cethe Stream tab's resolution has three representations and choosing one silently zeroes a bitrate
the tab, its three-layer resolution and the bitrate a resolution change quietly zeroes.
- PP156 · 873873ethe shortcut dialog writes outside the application, and carries a second copy of the PSN chain
the dialog ported as-is, its success-only preference write and one copy of the PSN chain.
- PP155 · 055e439two display targets carry a mode and a value in one integer, and the contrast one's index order is not its value order
the dialog, its two sentinel-carrying integers and the focus chain that moves with the mode.
- PP154 · c6f97a0the one function that edits the bitstream is positioned by the reader, and nothing compares where a managed one writes
the rewriter transcribed and compared byte for byte at every prefix, guard included.
- PP153 · aaeb15athe slice-header parsers decide every loss response, and a failed header parse silently zeroes the SPS they need
both parsers transcribed and agreeing on the recorded NALs and every prefix of them.
- PP152 · bea8523the bit reader both slice-header parsers sit on is header-only, so nothing links it and nothing checks it
the bit reader transcribed and agreed at all four alignments, whose state differs and output does not.
- PP151 · 629ccb8the frame timing has three fallback chains and its oracle could not reach the duration one at all
the duration made reachable, then the timing transcribed and agreed over the whole cross product.
- PP150 · 3b594afthe reorder queue is the module a rewrite would most confidently get wrong, and nothing compares one to libchiaki's
the queue transcribed, stepped against libchiaki's over random sequences, and two tidy-ups rejected.
- PP149 · ca3e6c7the port calls across the seam for two one-line comparisons, so nothing checks a managed version against them
the comparison in managed code, agreeing with libchiaki across the whole 16-bit domain.
- PP148 · 65bd796the Video tab stores words that are not its labels on three of six rows, and its first decoder stores nothing
the tab, its two combos that store something other than their labels, and the checkbox that restarts.
- PP147 · 84646edthe port has two touchpad answers in two files, so the SDL path is a third place 1079 could be typed
one type holds both pads and names the third; the SDL path is handed its extents.
- PP146 · 5452f73json-c's accessors are lenient where System.Text.Json is strict, so holepunch.c's reads translate wrongly
the accessors and the pointer, measured against json-c and agreeing with it in 81 cases.
- PP145 · 3a90f75the login's two browserless paths have no port, so a machine WebView2 will not start on cannot log in at all
the paste-back form, the online-id lookup, and the button only one of them gets back after a failure.
- PP144 · a501537the PSN token exchange is three Qt network requests whose shapes the port has to match exactly
The three requests, the account id and the expiry, asserted offline; the four surprising shapes are pinned against the Qt source.
- PP143 · 22f89e8a mistyped XAML binding is not a build error, it is a control that silently shows nothing
the console list screen loads and its bindings resolve, proved by a path that builds clean and fails red.
- PP142 · 0257334the port has 148 preferences and no names for them, and the names cannot be derived
the naming is the QML's own: a convention for 63, no property for 65, and three renames that cannot be derived.
- PP141 · 53ffd36the registration progress dialog ignores whether the operation succeeded, and nothing says so
the dialog stays open on both outcomes, and Escape leaves mid-registration where Return does not.
- PP140 · 9a03e92the settings screen writes on commit and nothing in the port says so
commit-on-finish with JavaScript's lenient parse, and chiaki-render.dll deployed where its deps are.
- PP139 · b66cc48three of the four registration dialogs have validation rules nothing in the port states
manual host, console PIN and profile as view models, with the two PIN validators kept apart.
- PP138 · 3e1b7f0the console list merges three sources and two of them are suppressed by different mechanisms
the merge is a view model now, with both suppressions kept distinct and held against the Qt source.
- PP137 · b0e9beethe focus visual PP12 asks for exists on one of the Qt client's six controls
Button's accent-background rule is ported and the other five are recorded as having none.
- PP136 · ee3cbeathe focus chain is a decision with nothing binding it to a WPF control
attached properties on any focusable control, with the decision split from the handler and asserted on all six.
- PP135 · 21ba149nothing has asked WPF whether it will take the shared surface, only Direct3D
a D3DImage reports a front buffer available at 1920x1080 for the shared surface.
- PP134 · 1280b68pl_render_image itself has never run, only the texture it would render into
pl_render_image runs into the shared texture with a hand-built target, and there is no swapchain.
- PP133 · 96b7a1dnothing says libplacebo can render into the shared texture, only that the texture exists
the shared texture wraps renderable and sampleable, which is what pl_renderer uses and all it uses.
- PP132 · 4de318ethe D3D11-to-D3D9Ex hop D3DImage requires was accepted as a cost and never built
a libplacebo texture opens as the surface D3DImage takes, and the share is adapter-bound both ways.
- PP131 · c7f93afPP9's renderer decision was taken from the source and nothing has ever built it
libplacebo's D3D11 backend initialises on both adapters here, in a DLL of its own at ABI 1.
- PP130 · e89253athe pad's sensors are fused into an orientation by a stateful filter the port has no access to
the fusion is carried at ABI 32, and the two conversions around it are held against the Qt client.
- PP129 · a19c811SDL names a touch by touchpad and finger, the console by an id from a pool of two, and nothing maps them
the pairs map onto the console's two slots, freed on lift, with the Qt client's three rules held.
- PP128 · eaea890the roster a hotplug event updates is keyed by identity and enumerated by position, and nothing checks it
the reconcile keys on instance ids and filters buttonless motion pads, with the Qt list read rather than copied.
- PP127 · 1114860the 47-byte DualSense effects report is a wire format the port writes by offset and nothing checks
the three reports built by offset, held against the Qt struct's own comments and its firmware split.
- PP126 · 3bdb1c2what a button press becomes on the mapping screen is a token two clients have to agree on
the three tokens and the three rules around them, held against the Qt client's own source.
- PP125 · 3fbbfc9takion's send buffer decides what gets retransmitted and the port drove none of it
six properties across the seam, the serial-order wrap included, and the double free on a refused push is gone.
- PP124 · 99a13eenothing the port sends upstream is checked, and the congestion report is recorded twice
the fifteen bytes match before and after the MAC, and every field is asserted to change them.
- PP123 · fb62692the only end-to-end recording in the tree, 24 real video packets, is checked by nothing in the port
all 24 packets parse and decrypt to their recorded NALUs, and both the block offset and the crypt index are asserted negatively too.
- PP122 · b13334bthe four bitstream cases that parse a truncated packet are recorded and the port drove none
all four are xUnit cases now, and the overrun check goes red when the length is believed rather than checked.
- PP121 · eaa6f15eight of test/rpcrypt.c's nine recorded cases are unchecked, four of them a whole console generation
the registration schedule is checked on both generations now, with the PIN and the key offset each proven to matter.
- PP120 · b93f4bbthe GMAC that authenticates every takion packet has four recorded vectors and the port checks none
the shim carries GMAC at ABI 27, and all four recorded vectors are xUnit cases now.
- PP119 · 4e5a6dathe registration request head is regist.c's snprintf, and its request line carries HTTP/1.1 twice
the head is formatted in managed code now, doubled request line included, held against regist.c's own strings.
- PP118 · ed161cdSDL has no thread of its own, so its event pump has nowhere to run but the dispatcher
SDL owns a thread from init to quit, at Qt's 4ms interval, where the hotplug window lives.
- PP117 · 3107c77loading the portable tree's SDL2.dll does not return, so the managed host cannot call SDL at all
the resolver puts the portable tree on the process search path, and sets the error mode so a failed load reports instead of waiting on a dialog nobody can see.
- PP116 · 2bdddf8the frame timing fallbacks run only from the C suite, so nothing managed knows when a decoded frame is due
all three timing fallbacks answer from managed code, with ffmpeg's AVFrame kept on the side of the seam that owns it.
- PP115 · 889136athe registration request runs only from the C suite, so nothing managed can pair a console
the whole recorded registration payload is produced from managed code byte for byte, with the PIN shown to key it.
- PP114 · a47fa2cthe packet parse and the frame delivery still take arrays, so the hot path allocates where the C one does not
parsing a packet header allocates nothing per packet, measured, and the receiver's one-frame limit is stated where it bites.
- PP113 · 6b9ea4fnothing on the managed side of the seam is measured against the zero-allocation budget PP44 set for the transport
the span path through the frame processor allocates zero bytes per packet, measured, against 2202 for the array one it exists to replace.
- PP112 · 900ff05the frame processor runs only from the C suite, so nothing managed can turn units into a frame or drive FEC
units become frames from managed code, with reconstruction driven and the stage accounting asserted, under eleven assertions.
- PP111 · 8f06988the key position expansion and the AV packet header run only from the C suite, so a managed transport has neither
the key position ladder and a recorded AV packet header parse from managed code, the payload named by offset rather than pointer.
- PP110 · ffd6414the bitstream parser runs only from the C suite, so nothing managed can tell an I frame from a P frame
both codecs' recorded headers and slices parse from managed code, reference rewriting included, out of the C suite's own vectors.
- PP109 · bae24f3the two reorder queue functions with defects in them are the two the suite never calls
peek and drop are covered by the C suite for the first time, pinning the behaviour PP107 names so a fix has to change a test.
- PP108 · ca1b342the reorder queue runs only from the C suite, so a managed transport would rebuild its window from scratch
the window, both drop strategies and the offset-not-sequence-number indexing run from managed code under twelve assertions.
- PP106 · 97da219sequence number comparison is two inline functions in a C header, so a managed transport would spell them as integers
both comparisons answer from managed code across all 65536 values twice, with the divergence from a plain integer compare measured.
- PP105 · 6e364f8chiaki_ecdh_derive_secret is handed the console's signature and the handshake key and reads neither
reachability pinned as five facts; the port matches libchiaki, refusing nothing.
- PP104 · 9775999the recorded key agreement and the session key stream run only from the C suite
the recorded ECDH exchange and the key stream at its recorded position run from managed code, out of the C suite's own vectors.
- PP103 · f14c24fthe 3081 lines of recorded erasure cases run only from the C suite, so a managed FEC would have no judge
all sixty-four recorded erasures decode from managed code, parsed out of the C suite, with a misdirected erasure proving the decode does work.
- PP102 · 9efa1b0a discovery reply parses in place, so every field of a parsed console points into the datagram it came from
a reply crosses as a console whose strings outlive the datagram, and the shim's undeclared import is held against libchiaki's definition.
- PP101 · d282fa7the volume step is an SDL_MixAudioFormat call, so no managed host can scale a frame without SDL
the volume scale, its drop-at-zero and its ceiling at 128 run in managed code under six assertions.
- PP100 · 28b3defthe two DualSense intensity events pack into one byte through two tables, and neither is derivable from its enum
both intensity tables, the nibble packing and the off sentinel that gates two paths run in managed code, under ten assertions.
- PP99 · 7042708the three latches between the pads and the wire are QTimer state on a QObject, so nothing managed can reproduce a press
the input block, the shortcut chord and the dpad-touch gate run in managed code, and pads merge through libchiaki's own union.
- PP98 · 02a8ed6the haptics-to-rumble fold wraps at full scale, so the loudest frame tells the pad to rumble at zero
all five intensity branches narrow through one saturating call in both clients, so the loudest frame is the strongest rumble.
- PP97 · ccc752cthe haptics-to-rumble fold is SDL and a controller list, so no managed host can tell a PS4 pad what to feel
a haptics frame folds to a rumble strength in managed code, with the floor, the ladder and the nine-bit minimum, under nine assertions.
- PP96 · f068e0cthe microphone ring is a second copy of the audio output ring, fifty lines that differ in one bound
the port carries one ring for both paths, the capture drain being the same read with no target, under twenty assertions.
- PP95 · 20c0f77the audio output ring is a QMutex around SDL, so no managed host can queue a frame without both
the drop-oldest ring, its seam-bounded reads and its once-per-patch overflow report run in managed code under sixteen assertions.
- PP94 · 7b5a941the dpad-as-touchpad gesture is a QTimer state machine, so no managed host can drive a finger with it
the gesture's priority, its edge starts and both clamps run in managed code against a real controller state, under eleven assertions.
- PP92 · 806d24cthe keyboard and mouse paths are QKeyEvent and QMouseEvent, so no managed host can move a stick or a finger
bindings and touchpad coordinates reach a real ChiakiControllerState from managed code, under thirteen assertions including both touchpad shapes.
- PP91 · 9cbdd42std::clamp's arguments are transposed in both touch paths, so a drag past the window edge is never clamped
both clients clamp the value and not the literal, so a drag off the window stops at the edge of the touchpad instead of past it.
- PP90 · e16f281the baseline ledger both builds are compared with has no managed writer, so the port contributes no rows
the .NET host fills libchiaki's own baseline record and appends it with libchiaki's own formatter, with the schema pinned against the shim.
- PP89 · c69e82cthe session log's name and its sanitiser are QDateTime and QRegularExpression, so no managed host can write one
the log name, its rotation and all nine sanitiser rules are managed code, asserted against six filenames the Qt build left on disk.
- PP88 · d5bea20the log sanitiser leaves the tail of a compressed IPv6 address in a file users paste into issues
both clients now redact a compressed address whole, from one pattern text the selftest holds them to character for character.
- PP87 · 0675ce1the video and audio sample callbacks are the last uncrossed part of the seam, and nothing offline can drive one
a frame reaches a managed handler as a span over libchiaki's own buffer, driven with no console, no renderer and no decoder.
- PP86 · 74211dethe controller state is 21 scalars and a touch array, and nothing managed can put one into a session
a controller state built in C crosses by handle and comes back equal by chiaki_controller_state_equals, under fifteen assertions.
- PP85 · 816be4ethe session thread and its event callback are unreached, so nothing managed can hear a session end
start, the event callback and join are reachable from .NET, and a quit off the session thread arrives at a managed handler under seven assertions.
- PP84 · 77ff962nothing managed has called chiaki_lib_init or built a ChiakiSession, so the lifecycle has no first end
chiaki_lib_init and chiaki_session_init are reachable from .NET over an opaque connect-info builder, under twelve assertions and no console.
- PP83 · 2e4879cthe 22 callbacks libchiaki takes are uncrossed in the direction it calls them, so nothing above the seam can be built
a managed handler now receives libchiaki's log callback through an UnmanagedCallersOnly thunk and a GCHandle, under ten assertions including one across a forced collection.
- PP82 · 4bbe788the 148-row preference table was extracted from settings.cpp once and nothing re-checks it
the extraction runs as a check now, both ways, and the first audit found the 148 rows correct.
- PP81 · 3ebd184the store reader knows registered_hosts and none of the other three arrays beside it
hidden hosts, manual hosts and controller mappings are read, both spellings of a mapping key included, off a store written in QSettings' own array shape.
- PP78 · cea048bpicking "none" in the decoder setting fails the session instead of decoding in software
chiaki_decoder_choice answers software for none and never returns the literal, so the caller's existing software mapping carries it to a stream that starts.
- PP37 · 9d133cda screen ported into code-behind can only be exercised by opening a window
the first view model is the registration dialog, nineteen assertions and not one window.
- PP35 · fa5f7ab5512 lines of munit tests cover the modules this port rewrites, and nothing in a managed tree runs them
every module's recorded vectors are xUnit cases now, one per case, over the readers that parse the C.
- PP34 · ebfe8e3the threading and logging layer exists to paper over pthreads and Win32, an abstraction .NET does not need
the shim is deleted, not translated; only the predicate wait needed writing, and its deadline is asserted.
- PP25 · 1ff76f0the wire format is generated by nanopb, a C generator with no managed output
both generators encode and decode a bang for each other, callback-backed string and bytes fields included, from one checked-in .proto.
- PP24 · 9000395the build is CMake with vcpkg, so Visual Studio opens a folder rather than a solution
the tree is a solution: Visual Studio opens ChiakiNg.slnx, compile.cmd builds through it, and Block F's components add their projects to it.
- PP19 · 92fa9b1the confirm, remind, display, steam shortcut and dialog host screens are still QML
the host: back rejects and closes where escape only closes, and accept closes nothing at all.
- PP14 · bb41d77registration, manual host, console PIN and profile dialogs are QML with their own validation
Registration is one dialog on a path and three reached from elsewhere; the identifier is text for one console and eight decoded bytes for the rest.
- PP13 · 3a37d20the console list, the front door of the application, is QML bound to the discovery model
The row actions and the auto-connect screen; removing branches three ways and one of them is silence, and the exit outlasting the grace is load-bearing.
- PP12 · 44efc9dthe six custom QML controls carry the theme, and gamepad focus navigation is built into them
the chain, its binding and the focus visual; the theme is ThemeMode and there is no vocabulary to subclass.
- PP8 · 59d4827controller input is SDL wired into Qt events, and 950 lines of it decide what a button does
the input path is off Qt: thread, mappings, effects, roster, touchpad, motion and now the rumble routing.
- PP6 · 8f67375console discovery and wake use QUdpSocket, so the console list has no source in a Qt-free host
the service, its socket, its search timer and its reply callback all run against a loopback that answers, so no console is needed to prove the path.
- PP5 · 655457cstreamsession.cpp drives the session through Qt signals and QThread, so a session cannot run without Qt
the session runs Qt-free: settings, log, input, feedback, audio and the baseline are managed, and what is left waits on a renderer or a device.
- PP4 · 07100b0libchiaki is C with function-pointer callbacks and no managed binding, so no .NET code can start a session
the seam is settled and proved: opaque handles, an UnmanagedCallersOnly thunk per callback and a C-side builder per struct, with the sample sinks filed as PP87.
- PP80 · a9900f2the store reader knows the byte-array encoding and none of the other five, so an @ nickname reads back wrong
bool, double, uint, rect and the @ escape are read the way a probe store proved Qt writes them, under 21 more assertions.
- PP79 · e67d34cthe .NET store reads the default hive, so a user with an active profile sees none of their consoles
the reader resolves the active profile first and derives every path from it, with five assertions on the join and the third store named.
- PP77 · 5c953b8the decoder choice that holds the non-NVIDIA floor is 70 lines inside a Qt method, so nothing can assert it
the decode branch that holds the non-NVIDIA floor is now chiaki_decoder_choice in lib/, a pure function nine assertions cover, and dropping its d3d11va arm turns the suite red.
- PP3 · c3321d3app data, session logs and key files are placed by QStandardPaths, which the .NET host does not share
the log, shader, placebo and baseline paths are stated as the Qt paths a probe measured, with the roaming/local split and the missing Downloads folder both asserted.
- PP2 · 68b8b1asettings, registered consoles and the PSN token live in QSettings, which the .NET host cannot read
the remaining 148 preferences are declared with the store, kind and default Settings reads them with, extracted from source and read back through the grammar PP80 measured.
- PP75 · 1a6ba8ftest.cmd runs ctest and nothing runs the .NET host's selftest, so 11 assertions sit in the tree ungated
test.cmd runs the C suite and then the .NET host's selftest; a broken decoder that the gate could not see now exits 1, and noapp skips it out loud.
- PP74 · 10b123ecompile.cmd builds the Qt client and knows nothing about app/, so the tree's only gate now covers half of it
A default compile.cmd builds app\ after the Qt client and goes red when it breaks; noapp skips it and says so, and a machine with no .NET SDK gets a note rather than a refusal.
- PP73 · aa6d85anothing rechecks a task's counted premise against the tree, and three of four spot-checked lines did not match it
Only where a regex is the premise: PP16, PP30 and PP33 now declare a roadkeep-remaining query answering 149, 14 and 420 from the tree; the rest count lines, which no query expresses.
- PP71 · b074a84paced at 60fps the cuda decoder's send p99 reaches 13480us against d3d11va's 548us, and varies wildly run to run
Contamination is out - alone in a fresh process it is the same or worse - and the clocks fall with the idleness pacing creates; vulkan and d3d11va both beat cuda at 60fps.
- PP70 · 24753f3vl_vlc_valid_bits returns 32 minus a count that can exceed 32, unsigned, so an exhausted reader reports billions of bits
vl_vlc_valid_bits clamps at zero, so the loops that trusted it terminate, held by a munit assertion at the alignment that hung and 132 tests still green.
- PP69 · fa439bfslice_set_reference_frame_h265 edits the frame from a parse that ran out of input, and reports that as success
The write is refused when the parse overran or would reach behind the caller's buffer, held by a munit assertion at the one length of 128 measured where that changes the answer.
- PP68 · 83e8201chiaki_bitstream_header never returns on a truncated SPS, and the header it is handed comes off the network
vl_rbsp_ue now stops at the end of the NAL and at 32 leading zeroes, and every parse that overran is refused, held by 2 munit assertions that used to hang the suite.
- PP67 · d30ce90nothing launches the suite, so running ctest means knowing it is a MinGW64 shell away and not on PATH
test.cmd runs the suite through the MinGW shell, bounds it with a timeout so a hang is not silence, cuts one test out of a full run, and warns when the binary predates lib.
- PP66 · b87aa3espike/decode-path writes a result.json naming no adapter, so two runs cannot be told apart by the file
Every run now names the card, read out of the d3d11va device by the DXGI route video-upscale already takes, and the two committed results carry it flagged as annotated.
- PP65 · 934ff36d3d11va's decode submission stalls: a 103us median send against a 26990us p99, which is 1.6 frame intervals
It is the harness, not the driver: fed at 60fps instead of as fast as it will take them, the p99 is 548us against 25124us, while the surface pool and the held frames move nothing.
- PP57 · c0d2c56videoreceiver reads slice.slice_type uninitialised when the bitstream parser declined the frame, which is UB
The slice is zeroed at declaration and the log names a type only when the parse produced one, held by 2 munit assertions over a declined frame that still reaches the callback.
- PP56 · 3925374compile.cmd never builds chiaki-unit, so ctest reports green against whatever binary was last linked by hand
A default build now links chiaki-unit with the client, so ctest answers about the tree that is there; notests keeps the fast path and warns that it did not.
- PP51 · 19fcc85NVIDIA first has no stated contract for what happens on an AMD or Intel machine
The floor is written down in docs/HARDWARE-CONTRACT.md - d3d11va decode, a neutral renderer, an SDR present with no NGX - and a non-goal now binds a proposal to it.
- PP48 · 5f0a8c8the client already prefers the cuda decoder on an NVIDIA card, and nothing measures whether that helps
Decode does not separate the paths, the per-frame copy does, and PP71's p99 contradicts the ordering (design §PP48 superseded: the auto ordering PP71 reverses and the stall PP65 answered).
- PP1 · b657d29no .NET host exists, so a XAML window has nowhere to live
app/ builds one self-contained 62MB ChiakiNg.exe on net10.0-windows with Fluent, opens an empty 1280x720 window, and fails its own build when app.manifest and Version drift.
- PP64 · ea45a45a field can be added to the baseline record without bumping the schema, and 34b10cbf already did it
The emitted key set is pinned per schema number, so a field added without a bump and a bump with no recorded row both turn the suite red.
- PP62 · f5b713fthe tree's only build cannot include QtWebEngine, so the login screen the port replaces is compiled out
The reference build is an MSVC configure built once for the purpose, filed as PP63: MSYS2 has no qt6-webengine and the published Windows releases carry no Chromium, measured.
- PP60 · d36d7a3one baseline file accumulates records of four schemas and the comparison tool refuses all but the newest
compare-baselines now reads every shape by the fields present rather than the schema number, compares the intersection and prints what it had to drop.
- PP59 · 2efb927takion mallocs a queue entry and a packet buffer per video packet, so the receive step has no budget
The receive step costs 3 allocator calls and 1754 bytes per video packet, measured through a seam the counter can reach, and the gate fails when either rises.
- PP58 · c0f4e69the airspace present path runs at half the shared surface's frame rate and nothing says why
PresentEx waits a vblank even at PresentInterval.Immediate, and stacking that on WPF's vblank-synced render tick costs one frame in two; off that tick the same child window holds 60fps.
- PP45 · 21746c5no harness runs the old build and the new one against the same input and prints the difference
compare-baselines reads two records and prints p50, p99 and max per stage with the delta, refusing a verdict and flagging mismatched conditions; the median arrived with it as schema 4.
- PP44 · 1cae892a managed transport allocating per packet would show up as stutter, and nothing would fail when it does
The budget is 0 bytes per packet, measured rather than agreed: the C reassemble path allocates nothing per packet in steady state, and a munit counter plus a managed gate both fail when it rises.
- PP43 · 422c744the present path is the largest risk in the port and would be chosen by argument rather than by measurement
Measured on an RTX 4060: the shared surface holds 60fps at a 47us median present with a 5ms p99, while the airspace child window settles at 32fps - numbers and caveats in spike/present-path.
- PP42 · c4add78telemetry has no sink: the counters live in the window and end with it
The row now names the configuration that produced it - decoder, requested bitrate, both loss knobs - and its field set is closed against an address ever entering it, held by 11 munit assertions.
- PP41 · 4f8ed40only one stage of the frame path is timed, so a slower build says which build and never which stage
Receive, reorder dwell, reassemble, FEC correct and the decoder's send-to-pull are each timed now, as min/max/mean plus a p99 from a fixed log histogram, held by 6 munit assertions.
- PP54 · 598d4d7the vendored munit does not compile on gcc 16, so the only test target in the tree cannot be built at all
munit is a pinned submodule, so this repo's CMake now builds that one file as the C11 it was written for, and chiaki-unit compiles on gcc 16 with 113 of 113 passing.
- PP40 · 34b10cbglass to glass latency is not among the numbers measured, and it is the one users judge on
The record now carries a latency floor: input queueing plus the console's reported round trip, read as milliseconds against ICMP, plus the decode-to-present handoff, held by 4 munit assertions.
- PP39 · 49661e9the numbers the stream already computes are drawn on screen and never recorded, so the Qt build leaves no baseline
The counters the stream already computes are now written as one JSON line per session to chiaki_baseline.jsonl in the log dir, timestamped and held by 8 munit assertions.
- PP854the pad stops driving the console after the window loses focus, and every layer this port can see stays healthy
A live run now prints the pad's inputs, sensor readings and wire states per second, and names the second inputs stopped while states kept going.
- PP853no history packet reaches the wire in a live session, so a button press is the one input the console never hears
A press from an SDL event to the wire is proven offline under a motion flood, and a live run now prints buttons seen, taken and history packets queued.
- PP851a DualSense feels what a PS4 pad feels: the console's haptic stream is folded to rumble rather than played
A USB DualSense's endpoint is found by its vid:pid and XAudio2 plays each haptics frame on it at 3000 Hz, routed to channels two and three, with the fold switched off.
- PP93the dpad touch path uses a third pair of touchpad bounds, matching neither console's pad
the dpad walks the connected console's own pad in both clients, so a PS4 finger stops at 942 instead of 1079.
- PP53frames arrive with network jitter and are presented against a fixed refresh, so each waits for a vblank it missed
DXGI reads the flags and a composition swapchain takes them, so PP319's choice does not foreclose tearing - and an API answer is not a pixel.
- PP49the console sends SDR on most titles and an HDR display shows it flat, with nothing in the client trying
It engages: 2,073,580 of 2,073,600 pixels move and it costs 29.0us a frame, 0.17% of a 60fps interval - on a driver interface of its own, not PP47's.
- PP47DLSS needs motion vectors and a depth buffer, and a decoded video stream carries neither
DLSS cannot apply and VSR is the candidate; the plain video-processor upscale 1080p to 4K costs 262.9us on an RTX 4060, and VSR itself did not engage.
- PP46the claim that dropping the bundled browser makes startup and the installer smaller is untested
measure-startup takes cold start, tree size and idle working set in one command and stamps webengine_present, so a row taken without Chromium cannot be read as the before.