{"id":54,"date":"2026-09-28T04:29:13","date_gmt":"2026-09-28T04:29:13","guid":{"rendered":"https:\/\/spectrcyde.com\/?p=54"},"modified":"2026-09-28T04:30:30","modified_gmt":"2026-09-28T04:30:30","slug":"the-corpus-learned-to-refuse-compelled-admission-and-the-reference-comb","status":"publish","type":"post","link":"https:\/\/spectrcyde.com\/?p=54","title":{"rendered":"The Corpus Learned to Refuse: Compelled Admission and the Reference Comb"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Date:<\/strong> September 27, 2026<br><strong>Author:<\/strong> SCYTHE Team<br><strong>Category:<\/strong> RF Capture, Evidence-Centered Computing, \u00a75.20, \u00a75.21<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/bgilbert1984\/SCYTHE\">bgilbert1984\/SCYTHE: SCYTHE @ spectrcyde.com<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Four entries drained this week \u2014 14, 15, 10, and 17 \u2014 and they rhyme. In \u00a75.20, the corpus learned<br>that admission is the only path to membership \u2014 not a check a caller can route<br>around, but a construction no caller can reach past. In \u00a75.21, the catalogue<br>learned what a spur is allowed to mean: a measured slope, a declared harmonic,<br>a reference comb that governs the reference class. The memorable part is not<br>that SCYTHE captures RF. The memorable part is that SCYTHE now decides \u2014<br>deterministically, and with a proof for each decision \u2014 what it means for a<br>capture to count, and what it means for a spur to be one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entry 14: Admission Is the Only Path to Membership<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Entry 14 asked for compelled admission, and \u00a75.20 3d built it in four pieces,<br>merged as PR #114. Each piece was verified by the full curated suite before<br>the next began, and the last piece was proven by a mutation control set swept<br>in the formal harness. The final state: <code>compelled_path_to_membership: True<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Piece 1 \u2014 the sequence has somewhere durable to stand.<\/strong> <code>CapturedStratumSequence<\/code><br>was process-local: a reopened corpus started every stratum at zero, which is<br>continuity by amnesia. <code>reconstruct_stratum_sequence<\/code> rebuilds a stratum&#8217;s<br>sequence from its reconciled membership \u2014 verified history, oldest first. It<br>restores; it does not advance. And the sequence is bound to a ring lifetime<br>id, because a sample index means nothing across two rings: a history from<br>another lifetime is refused at reconstruction, never adopted as continuity,<br>and <code>_admit<\/code> refuses a sequence whose lifetime does not match the window&#8217;s<br>attestation. Two refusals carry this \u2014 <code>ADMISSION_RING_LIFETIME_MISMATCH<\/code> and<br><code>ADMISSION_SEQUENCE_HISTORY_REFUSED<\/code> \u2014 both in the precondition regime, so a<br>refusal leaves the creator uncalled. Suite green at 2337 tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Piece 2 \u2014 reopen reconciles.<\/strong> The membership journal&#8217;s core had said the<br>six final-dependent recovery classifications &#8220;remain in slice 3d.&#8221; They are<br>built now, in <code>rf_membership_recovery.py<\/code>, one per window, from its journal<br>terminal state and the outcome of verifying its expected final:<br><code>SETTLED_MEMBER<\/code>, <code>ADOPTED<\/code>, <code>DISCARDED_UNWRITTEN<\/code>, <code>DISCARDED_UNVERIFIED<\/code>,<br><code>SETTLED_ABANDON<\/code>, <code>UNACCOUNTED_FINAL<\/code>. The pure <code>_classify<\/code> core takes no<br>descriptor and reads no file; the impure path establishes the outcome and<br>performs the action. The entry-14 hole \u2014 a verified final under an open<br>intent, the crash between step 8 and the COMMIT \u2014 classifies as ADOPTED and<br>appends the COMMIT, making durable a membership that was already true. A<br>member no intent records, and a stray non-member entry, refuse before any<br>terminal is written, so a directory holding something unaccountable leaves the<br>journal untouched. Nine <code>RecoveryRefused<\/code> codes, this module&#8217;s own regime.<br>Suite green at 2364 tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Piece 3 \u2014 the publisher is wired.<\/strong> Creation moved inside the namespace.<br><code>_record<\/code> admits, frames the header, computes <code>file_sha256<\/code> from the live<br>scope before the file exists \u2014 the identity the intent binds and step 8<br>recomputes \u2014 and calls <code>corpus.commit_window<\/code>. The commit brackets the work:<br>append INTENT first (reserving the terminal, so any later crash is a state<br>recovery reconciles), create the temporary inside the corpus directory, write<br>it, run steps 5\u20138, append COMMIT on a verified final or ABANDON on a<br>publication failure. The directory descriptor never leaves the namespace.<br>Temporaries are dot-prefixed siblings carrying their own digest \u2014<br><code>.partial-&lt;file_sha256&gt;.iqc<\/code> \u2014 so a lister sees they are not members and<br>recovery can tie each one to exactly one intent: an orphan under a discarded<br>intent is removed, a redundant leftover beside a member is removed, and a<br>partial no intent accounts for is still a stray. The boundary test asserts the<br>publisher is wired to exactly one production module. Suite green at 2367.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Piece 4 \u2014 compulsion, then the proof.<\/strong> First the sequence was taken away<br>from the caller: <code>record_gain_step<\/code> no longer accepts one, so nothing a<br>caller hands in can bypass the cap or forge a chain. The scope mints the<br>sequence on the first verified commit, pins the corpus to a single ring<br>lifetime, and advances the count after the COMMIT. Then <code>commit_window<\/code><br>stopped being a public method callable with loose data. The one thing that<br>stands for a window now is a <code>WindowAdmission<\/code> \u2014 a capability minted by<br>admission after every precondition passed, constructible nowhere else, refused<br>without the module-private key (<code>ADMISSION_TICKET_UNCONSTRUCTIBLE<\/code>). A commit<br>cannot be reached without admitting, by construction, not by a check a caller<br>could route around.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then the D-series proved it: seven controls, D1\u2013D7, each a mutation that opens<br>one side route to membership \u2014 a forged ticket, a commit window that admits<br>anything, a removed cap, a window from a dead ring, an adopted member no<br>intent records, a hand-constructed verified final, a COMMIT the disk does not<br>support \u2014 each killed by a test already standing in the suite. The formal<br>harness sweep ran the whole suite against every mutant: baseline<br>ZERO_DISCRIMINATION, 2370 tests, all seven <code>TEST_FAILURE<\/code>, working tree<br>hash-identical throughout, reviewer verdict COMPLETENESS 7\/7. No side route to<br>membership survives its witness.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the proof in hand, <code>namespace_status<\/code> reports<br><code>compelled_path_to_membership: True<\/code> \u2014 and <code>section_implemented<\/code> stays<br>False, because production creation is a separate authorisation, still<br>withheld. Entry 14 is drained. The four pieces are in: durable sequence,<br>recovery reconciled into reopen, the publisher wired, compulsion proven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The K-series came along: K24 retired, K27 carrying its mutation under 3d&#8217;s<br>boundary, and run 4 producing the first kill table at main after 3d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entry 10 and Entry 17: The Catalogue Learns What a Spur Means<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a75.21 turned the same discipline on the spur catalogue. Two entries fell to the<br>catalogue analysis in #118. Entry 15 was the tolerance: <code>SpurSlopeEstimate<\/code><br>fits a line to a product&#8217;s signed baseband offset observed at the LO settings<br>the schedule visits \u2014 the tuning&#8217;s centre plus each declared retune delta \u2014<br>over at least three distinct retunes. The observations are held; the measured<br>slope, the intercept, and every residual are derived from them and recorded;<br>and \u00a75.22&#8217;s frozen <code>PLAN_SLOPE_TOLERANCE<\/code> decides, in exactly one place,<br>whether the slope is an integer member of the affine mixing family bounded by<br><code>PLAN_MAX_MIXING_SLOPE<\/code>. Two retunes refuse. An undeclared delta refuses. A<br>feature that moved between two visits to one setting shows as residual rather<br>than being fitted through. <code>CataloguedSpur<\/code> carries one slope and refuses a<br>classification the slope does not support \u2014 a slope matching nothing cannot<br>be <code>CONSISTENT_WITH_INTERNAL_MIXING<\/code>, a slope matching \u22121 can be the<br>reference class and nothing usable else. The tolerance governs something now,<br>in exactly one place, and the queue no longer lists the entry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entry 10 was the thermal-versus-spur overlap, and it fell to the in-span<br>check. <code>catalogued_spurs_in_span<\/code> says which products the retune model puts<br>inside the analysis span at an LO, and <code>CapturePlanDeclaration<\/code> refuses a<br>captured <code>THERMAL_NO_INPUT<\/code> window at any visit where that is non-empty \u2014 and<br>a <code>RECEIVER_SPURS<\/code> window at any visit where the eligible units name no<br>product. A slope-0 product is in span everywhere, so a receiver with one<br>cannot capture a thermal window anywhere: entry 10&#8217;s third defect as a<br>refusal before the corpus. The check binds when the stratum is captured,<br>which is the trigger the entry named.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entry 17 fell to the reference comb. A slope record now carries its anchor<br>tuning&#8217;s centre, so every catalogued product has a derived RF position \u2014 the<br>anchor plus the fitted intercept. A reference-class entry declares the<br>harmonic it claims, and any other class that declares one is refused. The<br>catalogue declares a <code>ReferenceComb<\/code> holding the reference and its ppm, and<br>refuses every reference-class entry that sits above the harmonic cap or<br>outside the window <code>n \u00b7 f_ref \u00b7 ppm<\/code>, before anything reads the class off it.<br>The plan refuses a catalogue whose comb disagrees with its own declared<br>reference, and any entry anchored at a tuning it does not declare or at a<br>centre it declares differently. Reconstruction re-derives the cap and the RF<br>position and reads neither.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two consequences are worth knowing. With the fixture&#8217;s 28.8 MHz reference at<br>1 ppm and the UHF bands, exactly one generated tuning holds a comb harmonic<br>in its span \u2014 so reference entries anchor there. At 100 ppm the cap is 3 and<br>no reference class can exist above 86.4 MHz, so that fixture holds the other<br>three classes \u2014 which is the outcome \u00a75.22 predicts. And a slope-minus-one<br>feature that persists terminated and matches no harmonic is now catalogued as<br>nothing, since it fits a modelled slope and matches no comb. The protocol<br>treats it as an ingress finding about the site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The S-series certified the catalogue analysis at #120 \u2014 21 controls over<br>everything #118 landed, each undone and killed by a named witness, swept<br>formally at 94e7840b: 2399 tests, 21\/21 killed. At the entry 17 tree its<br>anchors still audit clean and its verifier still kills all 21, but the new<br>reference-comb checks sit outside its coverage; they await S22 onward.<br>PR #121 merged at 2421 tests, zero failures, two host skips, gates<br>re-summed in the same commit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The live-catalogue protocol is written up for review at<br><code>docs\/RF_SPUR_CATALOGUE_PROTOCOL.md<\/code>: the five bounds, the operator<br>declarations and what software can check about each, the seven steps as acts<br>the ring can see, the refusal table exactly as implemented, the artefact<br>layout, what the run cannot establish, and what would have to exist first. It<br>is proposed, not accepted \u2014 its status block says it authorises no device<br>contact. A catalogue runner and feature retention do not exist. Writing<br>S22 onward and sweeping them at main is separate work, as is the live run<br>itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What This Week Established<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A corpus whose membership admits no side route, proven by mutation. A<br>catalogue whose every spur carries a measured slope and a derived position,<br>whose reference class answers to a declared comb. Four entries drained with<br>their proofs attached \u2014 the D-series sweep evidence under<br><code>docs\/evidence\/d-series\/<\/code>, the S-series certification at #120 \u2014 and the<br>refusal tables written exactly as implemented.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What remains is honest work, listed in the open: S22 and the sweep at main,<br>the catalogue runner, the live run, and production creation, still withheld<br>by separate authorisation. The instrument knows what it can claim. That is<br>the whole point.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Date: September 27, 2026Author: SCYTHE TeamCategory: RF Capture, Evidence-Centered Computing, \u00a75.20, \u00a75.21 bgilbert1984\/SCYTHE: SCYTHE @ spectrcyde.com Four entries drained this week \u2014 14, 15, 10, and 17 \u2014 and they rhyme. In \u00a75.20, the corpus learnedthat admission is the only path to membership \u2014 not a check a caller can routearound, but a construction no [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":57,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-our-friends"],"_links":{"self":[{"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=54"}],"version-history":[{"count":3,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/posts\/54\/revisions\/60"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=\/wp\/v2\/media\/57"}],"wp:attachment":[{"href":"https:\/\/spectrcyde.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spectrcyde.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}