You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A dead RuntimeException catch in Job_Intake::feed(). Documenting write_feed()'s @throws made it provably unreachable: the only RuntimeException on that path comes from the per-partition write lock, and partition_handle() acquires that lock inside if ( $large ), where the feed path passes false. The sibling catch in queue() stays — write_job() takes the large path and can genuinely throw.
lint:js scans examples/ — it used to skip them entirely. eslint's globs named src/ and scripts/, and lint-contract.mjs walked src/ alone, so the AI-newsletter example sat on three name-lookup-in-option violations while the gate reported clean. An example is the code a reader copies, so a violation there teaches itself onward. SCAN_ROOTS now carries examples beside src; walk() returns nothing for a root that does not exist, so a plugin with no examples scans exactly as before.
useStreamGraph declares what setPaused actually takes. Its @return called it a bare Function, which carries no call signature, so the three consumers that correctly declare (paused: boolean) => void — event-logger-nodes' glob, error-log and request-log hooks — each failed the type gate in their own repo with the cause a repo away.
The AI-newsletter example passes its view CLASSES, not their registered names.CommandInterpreterNode's name table is a per-bundle static (ADR-16), so a name resolves only through an interpreter that bundle mounted, and a hub tab building the graph through another bundle's would find nothing. ../nodes/register still runs, for the TSL and palette lookups that have no class to hand.
Documentation
The twenty-two documents verified against source, then completed from it. Two passes held every existing claim to the code, the second re-deriving each rather than reviewing the first's reasoning; 195 claims across the corpus were refuted, among them TM_COMPLETION attributed to this runtime when it is Tachikoma's flag and 512 is TM_NOREPLY here. Every file:line citation became a symbol reference, several having already drifted — Core::print_less_often() was cited 22 lines early. Then all 931 non-test PHP and JS files across the six plugins were read to establish what these documents omit, and each resulting finding was verified against source again before being written.
Every source file's documentation reviewed against its code, one agent per file. All 412 PHP and JS files, tests excluded: missing docblocks written, @param/@return drift corrected against the real signature, documentation for deleted behaviour removed, and the why recorded where the what was already plain. Comments that described history rather than the present are gone. Three node_schema() descriptions were wrong about their own node — Lock_Node advertised a file lock where it takes a directory with mkdir and a PID heartbeat. The second half turned up more of the same: ProbeStreamViewNode claimed its per-record path was O(1) and published nothing, where fill() sweeps every live key and _maybePublish() fires on the leading edge; useTopologyManager documented a dispatchAwaited that exists nowhere in the tree; TreeEntity put its indent at 14px per level where the nested wrappers make it 39px.
JSDoc types tightened where prose had loosened them. A @return {Function} carries no call signature, so every typed prop it reaches becomes unassignable and the error lands in a file whose author cannot see the cause; useDebugFrame's resize handlers, TopologyRow's onToggleFold and TopologySection's onToggle all carry real signatures now.