Checkpoint 2 — TEPP Omega has landed
In one paragraph
TEPP Omega is written, verified and landed as its own repository at /home/kabouter/Production Environment/TEPP-Omega: one commit (4a30364, TEPP Omega: the specification), 32 files, nothing of staging in it. It holds 22 normative parts (1,240 identified statements, glossary and index of 232 defined terms included), the conformance contract, vector format and 19 vector families (151 statements), the six starter profiles byte-exact, and four rationale documents. Every rule-bearing source entry maps to a statement (2,302 of 2,302), every statement traces to a source anchor or is marked made-explicit, and two independent rounds of adversarial review ran over it before landing. 156 questions stay open, each carried in the text at its most fail-closed reading and marked in staging; they are the maintainer's to rule, and the table at the end lists them with the statements that carry them.
How this run came about
You asked, on 2026-09-24, to continue the Gamma work as the Omega run, in a new folder and repository, reusing what was done, and to see whether a specification release could be reached without stopping. So:
TEPP-pre-Omegais a clone ofTEPP-pre-Gammaat5db183fwith its whole history (OMEGA.mdrecords the fork).TEPP-pre-Gamma,TEPPv5andTEPP-Alphawere not written to; pre-Gamma is still clean at5db183f.- Reused as they stood: the source, the complete and reviewed ledger, your checkpoint-1 answers (D-C1-2, D-C1-9, D-C1-10 and the nine accepted recommendations), the 136 questions then open, the drafting pipeline, and the 25 part files the Gamma line had drafted (parts 00 and 02–20, 1,115 statements).
- Model note: parts 00 and 02–20 were drafted by Fable 5.1 in the Gamma line. Everything from 2026-09-24 — the remaining parts, consolidation, both review rounds, every verification, every fix and the landing — ran under Opus 5.5, so the inherited drafts were reviewed by a different model than the one that wrote them.
- The name. The deliverable calls itself TEPP Omega, the way the Alpha and Gamma lines name theirs. It appears once in the README and once in the introduction; if you want another name it is a two-line change.
What was done in this run
- Drafting what Gamma had not reached (11 drafters): part 01 (terms), part 21 (what TEPP does not define — 101 prohibitions, present tense), the security and privacy traces with
rationale/security.mdandrationale/privacy.md, the three conformance documents,rationale/design.md,rationale/household.md, the README and the profile walk-through. - Consolidation (7 fixers with disjoint files, then 2 follow-up agents): two relocations (the uppercase reference-tag reading into the surface part; the known-missing disposition into the construct lifecycle), duplicate statements reduced to references at their owner, misdirected references corrected, four glossary terms added where the source used a term normatively and never defined it (
demand, household / sealed / open channel). 20 new questions logged (Q-139 … Q-158), 32 older ones widened, and every draft brought to carry its question's provisional reading. - Review round 1 — 71 reviewers: 20 source-side (every SPEC and CONFORMANCE chunk, sentence by sentence), 43 specification-side (every statement against its anchors), 3 on the derived documents, and five sweeps (NIP claims, scope, legacy wording, terms, duplicates). They reviewed a copy seeded with 36 planted defects: all 36 were reported. The 131 findings not about plants went to 11 verifier batches, each with a known-false decoy; verifiers start from refuted. No batch confirmed its decoy. 92 real defects confirmed (plus five confirmations of one planted defect, which the drafts never contained), 34 refuted. Six fixers applied them.
- Review round 2 — the same 71 roles, fresh agents with no sight of round 1, 41 planted defects (40 reported). Findings not about plants fell from 131 to 46; 4 batches, no decoy confirmed; 22 confirmed, 24 refuted. Three fixers applied them, and three auditors — default verdict unfaithful — checked every changed hunk: 41 faithful, 3 corrected.
What the confirmed defects were, across both rounds: mostly presentation — a reference pointing at a neighbouring statement (38), a rule stated twice (25), a term used in a second sense (18), text binding without an identifier, a statement carrying two rules, a history word (5). Substantive ones: four overgeneralisations (the introduction's ceremony sentence, "denies nothing" for an invalid permission, a conformance item widened to every finding, an unscoped non-feature); a cap row, and a non-feature, that flattened the nested-opaque wall into a deny; a conformance item marked ⊕ that the source leaves unmarked (it would have doubled the vectors required); six places an implementer would have had to guess (an overview contradicting the degradation rules, the kind0 clause at a space, a self-contradicting ordering sentence, three vector-format gaps); a household clause inside an identified tooling statement (scope); six rationale sentences stronger, weaker or wider than the rule they describe, one of them claiming traces that do not exist; and two NIP citations. No keyword strength differed from the source in the drafts: every raised or lowered keyword the reviewers reported was a planted defect. No reviewer in either round found a lost rule, a wrong number, or a silently settled ambiguity that survived verification.
What was verified, and how
| check (MISSION §Method 5) | how | result |
|---|---|---|
| (a) ledger completeness, both directions | check_trace.py --all; build.py |
every packet 0 errors; 0 entries untraced, 0 unresolved, 0 needing an owner; 2,302 of 2,302 rule-bearing entries mapped; every statement traced (STATE or EXPLICIT); 0 build problems |
| (b) adversarial equivalence | two full rounds as above, plant-calibrated reviewers, decoy-calibrated verifiers, audited fixes | 36/36 and 40/41 plants reported; 0 decoys confirmed; 114 defects fixed |
| (c) NIP claims | a NIP sweep in each round against the NIP texts and the verified claim table | 2 wrong citations fixed in round 1; none in round 2 |
| (d) terms, identifiers, cross-references | TERMS and DUP sweeps; link and anchor check over the landed tree | 4,506 links, none broken; every anchor resolves; no doubled reference; 232 terms indexed |
| (e) scope guard | SCOPE sweep against the scope rule and N-01 … N-63, both rounds | 1 scope defect fixed; none in round 2 |
| (f) legacy sweep | check_legacy.py --out (strict) plus a LEGACY reader in each round |
0 hits over 31 files; 5 history phrasings fixed in round 1, none confirmed in round 2 |
| profiles | cmp against the source |
byte-exact |
| questions | every open question carried by at least one marked statement | 156 of 156 |
What needs your judgment
The open questions. 156 are open; the full table is below. Twenty are new in this run (Q-139 … Q-158). Those most worth your time first:
- Q-069, Q-101, Q-114 and Q-130 disagree with each other about how many
unenforcedfindings a decrypt request without its enclosing event emits (trace only; no verdict turns on it). The draft follows Q-069/Q-101; the notes on all four say so. They want one ruling. - Q-022 and Q-107 (type errors;
rebroadcast: null): carrying Q-107's fail-closed reading makes a JSON type error fail the whole payload, which narrows Q-022's permission-level rows to values of the right type. They want one answer; so, per the drafter of part 05, do Q-018, Q-019 and Q-020, whose provisional readings make minimal guardian documents refuse. - Q-090: the no-record advice for sealed sends is now stated completely (TOOL-037) under its provisional reading; the source's own sentence was incomplete.
- Q-056 (which high-water marks survive store loss) carries the largest departure from the source's wording in the construct part.
- Q-033: a deny-side list over
perListCaprefuses the assembly, against §7's cap sentence. - Q-142 adds a kindless resolution run for content text beneath a layer that has a kind, and Q-158 reads "the signer's declared relays" as the signing locus's own list; both are the fail-closed choice and both change verdicts under their other reading.
- Q-152 … Q-156 concern the conformance vector format: nine findings have no field shape and the fan-out cap has no configurable name, so byte-exact vectors cannot be written for those corners until names are chosen. Nothing was minted.
Not questions, but yours to confirm:
- Length. The normative parts run to about 74,000 words against the source SPEC's 36,600. Obligations are held equal by the trace; the words come from explicit procedures, one rule per statement, glossed references, tables and kept candor (about 38k in statements, 9k tables, 11k notes, 13k overviews and connective text). MISSION asks for "smaller in words". A concision pass — removing restating notes, glosses and connective text, never a rule — is possible, but it would need its own review round. Your call whether that comes before 1.0.
- The walk-through. The source says rows 6 and 13 of the starter composite's table are "the same instant and the same verdict with and without the tag"; they are not (Fri 23:00 and Sat 12:00). The pair that fits is rows 13 and 14; the walk-through says so.
- Conformance. "A vector changes only together with its specification edit" was dropped as a rule about how the corpus and specification evolve (D-C1-10). "Regeneration with no diff is the regression check" was kept; it sits close to testing (D-C1-2).
- "No request kind, ever" is kept with "ever", as the load-bearing prohibition MISSION names.
- Informative corrections, no behaviour changed: §22's residual 5 says "the author's own relay" observes a hint fetch — the rationale says the hint relay observes, which is the author's own only where the referencing guardian wrote the profile; §17.3's advice that an allow-shaped set closes over a client's AUTH is scoped to the global set, the only set that can; DESIGN's overstatements the earlier scan found (X1, X4, X5, X8, X9) are stated at the specification's strength.
A correction to the staging record: the message of commit 13d3166 says the first fix pass restored "keyword strengths (seven raised, one lowered)". That was read off the finding kinds without checking; the seven were five confirmations of the planted defect and one conformance marker confirmed twice, and the one "lowered" was a household rationale sentence.
Where things are
| what | where |
|---|---|
| the deliverable | /home/kabouter/Production Environment/TEPP-Omega (standalone, main, one commit) |
| staging | /home/kabouter/Production Environment/TEPP-pre-Omega — OMEGA.md, drafts/PLAN.md, QUESTIONS.md |
| the build and its map | drafts/out/ (identical to the deliverable); drafts/trace/omega-map.json |
| review record | drafts/review/ — drafter, consolidation, reviewer, verifier, fixer and audit reports for both rounds; findings, batches and verdicts (round 1 under run1/) |
Appendix — the open questions and where each provisional reading is carried
Statement ids are those of the landed specification. The reading shown is the one-line form recorded in the trace; the full question — anchors, readings, why the provisional one is the most fail-closed — is in QUESTIONS.md.
| question | what is open | provisional reading carried | carried at |
|---|---|---|---|
| Q-003 | Is the 64-hex subject-address namespace case-sensitive? | (b): the 64-hex namespace exclusion is case-insensitive; | EVT-021, ADDR-006, ADDR-007, ADDR-008 |
| Q-004 | A 37710 at a binding address carrying a second d |
(a): a 37710 by a current guardian carrying the subject's pubkey in any d tag takes the binding disposition when it violates the d shape or count — assembly refusal, malformed |
EVT-026, CONS-084 |
| Q-005 | §2's capital-letter guarantee overstates what the gates catch | (1): behaviour unchanged — E, A, I, K are deny-check values needing no coverage, what they point at is not resolved; |
SURF-016, SURF-009, IN-012, IN-033, OUT-014 |
| Q-006 | Which unbound reason a rejected or unverifiable candidate leaves | (c), first half: an event failing VerifyEvent counts as nothing returned, leaving reason absent | ASSOC-014, ASSOC-025, CONF-011 |
| Q-007 | Engine-tier AUTH: a ruled MAY that the conformance corpus expects as an act | (a): the MAY kept exactly; | ASSOC-031, PROF-031, CONF-005, CONF-019, CONF-124 |
| Q-008 | Does a keyless locus get AUTH for construct-input fetches through a policed kind-22242? | (B): the policed kind-22242 is an ordinary sign request, not a route for construct-input fetches | ASSOC-034, ASSOC-035, PROF-032, CONF-019, CONF-124 |
| Q-009 | An inconclusive no-local-state discovery while a relay returned a valid candidate | (b): not loaded until the counting subset concludes; | ASSOC-029, LOCI-023, CONF-011 |
| Q-010 | What a 17710 sign request that maps onto no offer leaves in the trace | the unmapped 17710 request stays inside output evaluation: deny, layer unmatched, checked at the head of the step order right after sanity; |
CERE-002, OUT-001, CONF-012 |
| Q-011 | What a failing counting relay does to the offer poll | (c): any counting relay failing or timing out makes the poll inconclusive — nothing outstanding, prompted or ratified — with a typed finding naming the failing relay; | CERE-019, CERE-020 |
| Q-012 | Which offer-validation failures emit a finding, and under what name and reasons | (a): every validation failure of an offer whose replaces matches emits a validation finding, by reference to the trace part (TRACE-059); |
CERE-008, CERE-021, CERE-023, CERE-024, CERE-025, CERE-027, CERE-012, TRACE-059, TRACE-060, CONF-012 |
| Q-013 | "Exactly one" offer, and what "outstanding" means | (a): a request satisfying the mapping against two or more offers is not a ratification; | CERE-028, CERE-042 |
| Q-014 | Are outstanding offers never cached, or is re-fetching a recommendation? | (a): the re-fetch at every prompt is a rule, never cached; | CERE-047 |
| Q-015 | How a signer observes a NIP-09 deletion of an offer | (b): the poll also looks for the current guardians' kind-5 events over the counting subset; | CERE-046, CONF-012 |
| Q-016 | Is "re-associated via sealed offers only" an engine rule? | (a): an engine validation check borne by the signer; | CERE-027, CONF-012 |
| Q-017 | What supersedes an outstanding offer | (b) ties to the lexicographically smaller id, which counts as newer | CERE-044, CERE-043 |
| Q-018 | Are the second-level keys of deny and permissions optional? |
(b): the second-level keys of deny and permissions are always present | POL-034, POL-079 |
| Q-019 | May a permission omit restrictions? |
(b): restrictions is always present; | POL-037, POL-079 |
| Q-020 | May an extension definition omit map? |
(b): map is always present | POL-051, POL-079 |
| Q-021 | The regular-expression semantics of the grammar productions | (B): whole-value matching, no character class matches a line terminator, $ only at the end of the value |
POL-054 |
| Q-022 | What a type error or a grammar-violating value does to the payload | (a): a type error or a grammar-violating value is a strict-parse failure at the site's polarity; | POL-079, POL-083, POL-087, CONF-013 |
| Q-023 | A map value that is neither "interact" nor "view" | the general rule reaches a map value that is neither interact nor view, consistently with reading (c); | POL-079, POL-093 |
| Q-024 | A via where the matrix says none, and a required extension definition or via absent |
(i): a via where the matrix gives none is a forbidden known field; | POL-104, POL-105 |
| Q-025 | A routing target that names a denied relay | (a): a permission routing to a relay in the unioned deny gates is invalid at assembly; | POL-110, POL-111, OUT-067 |
| Q-026 | Do the size caps apply to offers? | (b): maxPolicyBytes and the pre-decryption bound reach offers; |
CERE-018, CAPS-016, CAPS-030 |
| Q-027 | Which configurations must state every cap | (b): every configuration states each cap; | CAPS-002 |
| Q-028 | Does the pre-decryption oversize bound run before a keyless locus's trial decryption? | (B): every candidate is trial-decrypted whatever its size; | ADDR-015, ADDR-019, CAPS-030, CONF-013, CONF-014 |
| Q-029 | The order of dot-segment removal and repeated-slash collapse | (c): an order-dependent path has no canonical form | POL-128 |
| Q-030 | §6's reason for leaving by-id fetches outside the future-dated treatment is false | (b): in the note under ADDR-026 the false ground is replaced by the true consequence; | ADDR-026 |
| Q-031 | future-dated delivery: does it wait unloadedNotifyAfter, and from when would its periods count? |
(b) with retry (ii): delivered at the tick that emits it, without waiting unloadedNotifyAfter; |
LOCI-045, CONF-019, CONF-028, CONF-141 |
| Q-032 | Names for the typed findings the source requires but never names — a mixed list's dropped private portion, a deny-beats-harvest exclusion, a truncated harvest, a dropped carrier, discarded unattributable bytes, a never-resolved relay operator | (a): the trace obligation stands exactly as written ('traced'); | LIST-018, LIST-023, CONS-016, CONS-038, CONS-054, CONS-083, TRACE-057, TRACE-058, CAPS-019, CONF-013, CONF-015, CONF-017, CONF-018, CONF-019, CONF-023 |
| Q-033 | A deny-side list over perListCap: assembly refusal, or not loaded? |
(a), by scoping: LIST-025's 'not loaded, never a refusal' is stated for the five cases of this part; | LIST-025, CONS-110, CAPS-005, CAPS-014, CONF-013, CONF-015, CONF-029 |
| Q-034 | What perListCap counts: members yielded, or scope-typed tags read? |
(b): every scope-typed tag the referencing site reads counts, before skipping and deduplication, per referencing site | CAPS-014, CONF-015, CONF-029 |
| Q-035 | An encrypted-only referenced list on the grant side: failed reference, or zero members? | (a): on the grant side an encrypted-only list is a failed reference and the referencing permission is inert, traced; | LIST-023, CONF-015 |
| Q-036 | The grant-side disposition of a trusted owner's live list whose query returns nothing or fails | (a): a trusted owner's live list whose query returns nothing, or fails, is a failed reference — grant side the referencing permission is inert; | LIST-022, CONF-015 |
| Q-037 | The messaging-kinds lint's triple: say it names the NIP-17 envelope, or leave it as written | No fail-closed reading applies: nothing an engine does differs, no verdict, trace or finding moves, and neither reading tightens or loosens the warning tooling must emit. | TOOL-017, TOOL-018 |
| Q-038 | Do walls and entry attributions name the profile id? | (a): every wall, deciding attribution, qualifying hit and unenforced entry to which a profile's restriction entries contributed names the referencing carrier and the profile id; |
PROF-008, IN-031, IN-036, TRACE-018, CONF-130, CONF-121 |
| Q-039 | The axis qualifier on the profile-union claim: "on the kinds and time axes" or on every axis? | (A): one union of whole entries, no exhaustive axis qualifier; | PROF-021, CONS-005 |
| Q-040 | A served profile copy that fails the id or VerifyEvent check: is the profile unresolvable, or is that copy discarded? | (b), per copy, as PROF-028/PROF-029 carry it for a profile: a served copy failing VerifyEvent or the coordinate match is discarded with a typed finding (CONS-114; | LIST-013, LIST-019, LIST-020, PROF-028, PROF-029, CONF-016 |
| Q-041 | Does an unresolvable grant-scoping profile reference also carry unloaded and its guardian delivery? |
(a): an unresolved grant-scoping profile reference also carries unloaded, beside grant-inert | POL-091, PROF-029, CONS-102, TRACE-052, CONF-016 |
| Q-042 | Does a relay-valued deny gate disqualify a relay member as an extension source? | (b): a relay member whose canonical URL matches a relay deny value is itself an ineligible source, traced like a denied pubkey | CONS-014, CONF-017 |
| Q-043 | Which NIP-11 field announces a relay-regime's authoring npub? | (i): the announcing NIP-11 field is left unnamed; | CONS-039 |
| Q-044 | A NIP-11 document whose object carries pubkey more than once: which value, or a failed resolution? |
(c): a NIP-11 document carrying pubkey more than once is a failed resolution, whether or not the copies agree |
CONS-035 |
| Q-045 | What identifies one source, for maxHarvestedEntriesPerSource and for once-per-source document findings |
(b): one source is one resolved party — one budget and one set of document findings per party, following an operator swap | CONS-053, CONS-055, CAPS-020 |
| Q-046 | A totalConstructCap breach driven by harvested entries, and which integrity caps have a grant-side branch |
(1): grant-side breakage is a harvested carrier's own; | CONS-054, CONS-067, CAPS-015, CAPS-018, CONF-029 |
| Q-047 | When the association's private portion cannot be read | (b): not validated — no guardian set, an older valid candidate applying, else unbound absent; | CONS-087, CONS-088, NF-010 |
| Q-048 | A trial decrypt the signer never answered | (b): 'not addressed' holds for a trial that was answered and did not open, an error reply included; | ADDR-019, CONS-090, CONS-091 |
| Q-049 | Where a restriction-driving profile reference sits in the maxProfileRefs count | compatible with R1: a046 speaks of the harvested reference's own failure only; | CONS-046, CONS-061, CAPS-032, CAPS-027, CONF-016, CONF-029 |
| Q-050 | Where deny-beats-harvest exclusions are traced | (a), order half: every exclusion traced in canonical construct order (a denied source at its member position, a denied harvested carrier at its position within that source's harvest). | CONS-017, CONS-062, CONS-065 |
| Q-051 | Names and reasons for the step-9 advisory findings | (a): grant-inert with the cause as its reason, one per inert permission; | CONS-095, CONS-100, CONS-101, TRACE-056, CONF-019, CONF-026 |
| Q-052 | When the step-9 audit reports a severed household channel | (a): the audit reports any closure that would deny some sign request to a current guardian at some weekday and minute; | CONS-101 |
| Q-053 | Which caps step 10 enforces, and which refusal reason wins | (a): step 10 enforces totalConstructCap and maxDenyEntries; | CONS-067, CONS-077, CONS-112, CONF-019 |
| Q-054 | Whether a ceremony offer may ever be cached | (a): offers are never cached and the prompt-time re-fetch is a rule; | CERE-047, CONS-119 |
| Q-055 | Refusal at a binding coordinate that has not concluded | (1): malformed and regression are judged when the coordinate concludes, over everything returned and held; | CONS-085, CONF-019 |
| Q-056 | Which high-water marks survive store loss | composite (d): the association's, the binding coordinates' and every grant-side coordinate's marks survive store loss (c050); | CONS-165, CONS-167, CONS-163, CONF-103 |
| Q-057 | The typed finding for a discarded copy has no name | (a): one typed finding per discarded copy, on the refresh attempt's outcome, naming the coordinate, the discarded copy's (created_at, id), the cause and the dominating (created_at, id); | CONS-161, CONF-019 |
| Q-058 | The stale trace for a failed NIP-11 operator resolution | (a): one stale finding per failing operator resolution, on that tick's refresh-attempt outcome, naming the relay member, at every tick it fails; |
TRACE-046 |
| Q-059 | Construct age before any refresh has succeeded | (a): until a refresh attempt has succeeded the construct is past both age thresholds | CONS-176 |
| Q-060 | A tag value in a form its own tag does not list | (a): per tag; | SURF-008, SURF-017, SURF-010, SURF-011, SURF-012, SURF-013, SURF-014, SURF-015, CONF-020 |
| Q-061 | What counts as a non-alphanumeric boundary | (a): ASCII [A-Za-z0-9] | SURF-027, CONF-020 |
| Q-062 | Which event elements resolve against the reduction record | the split: narrow at layer 0 (only an e or q element recovered from a reduced layer consults the record); |
SURF-043, OUT-022, OPQ-113 |
| Q-063 | Which elements subject-addressed material contributes, and what its coverage still binds | (ii), by reference to the surface's element rule (SURF-041): coverage binds the elements the material does contribute | SURF-041, RESTR-035, OUT-038, OUT-058, TOOL-045, CONF-020, CONF-023, CONF-024 |
| Q-064 | Positions the canonical element order does not state | (a): the established counterparty and the encrypt oracle's recipient take the publisher position; | ORD-021, ORD-022 |
| Q-065 | A subject-authored event element: removed, or merely covered | (b): coverage condition, not removal | SURF-046, OUT-031, CONF-020 |
| Q-066 | Does the output exclusion reach the publisher's deny check | (a): the publisher stays a deny-check value on output | SURF-045, IN-012, OUT-003 |
| Q-067 | The form of a sanity refusal | (b): the transport's ordinary error reply; | SURF-049, OPQ-083, CONF-133 |
| Q-068 | What an extend permission's output-scoped opacity deny voids | the engine rule as the source states it: an output-scoped entry does not match an input evaluation; | RESTR-006, CONF-018 |
| Q-069 | How many unenforced findings a decrypt without its enclosing event emits | (3): the lost arrival relay per unmatchable relay-valued deny gate, nothing where the construct has none; | TRACE-034, CONF-024, CONF-144 |
| Q-070 | Order of the per-gate unenforced findings inside one carrier | (a): listing carrier in canonical construct order, then the carrier's deny array for the gate's class in array order, then each deny.lists reference in array order expanded in the list's tag order; | ORD-037 |
| Q-071 | Opacity-axis unenforced findings on subject-addressed material | (a), verbatim: one finding per opaque-scoped restriction entry in every set consulted for the verdict — the global set at the gate, each non-void entry's restriction sets at the hit (input) or at coverage (output) — whether or not its other axes match |
TRACE-032, ORD-042 |
| Q-072 | Does a relay permission that yields no entry activate the whitelist | (a), by reference: existence is stated with the activation rule (OUT-052) and activation on existence alone at OUT-053; | RESTR-043, OUT-054, CONF-023 |
| Q-073 | A coordinate deny value against an id-form element at the layer-0 deny check | (a) denies most — a layer-0 deny where (b) permits with a wall. | IN-012 |
| Q-074 | How "newest at that coordinate" is established at the event hit | (a): the coordinate form of the event hit never admits at the verdict; | IN-018, CONF-022 |
| Q-075 | Where the self hit sits in the attribution order | (a): the self hit decides wherever it holds (layer self, empty attribution), the qualifying entry hits listed after it; |
IN-030, IN-031, ORD-027 |
| Q-076 | Whether the kind-0 clause reaches opaque material | (b): the kind0 clause is stated for a plain kind-0 input event; | IN-044, IN-048, IN-019, IN-025 |
| Q-077 | The layer, reason and wall reason of a verification failure inside reduction | (A): a verification failure inside reduction decides at the reduction step as unverifiable (wall unverifiable as a nested node), not as unreduced material |
IN-002, IN-025, IN-042, OPQ-050, OPQ-045, OPQ-036, TRACE-009, TRACE-023, TRACE-027, CONF-024 |
| Q-078 | A nested opaque event that reduces in the render walk | (1): a reduced nested opaque event is deny-checked only, then renders and recurses; | IN-042, NF-051, NF-069 |
| Q-079 | Whether the cycle stop or the depth wall applies when a reference is both | (2) carried across from the render walk by reference: the depth bound is applied first | IN-038, OUT-016, CAPS-013 |
| Q-080 | An nevent quote of an addressable event after its author edits it |
(1): the coverage rule as written for an id-form element naming an addressable event | OUT-031, CONF-023 |
| Q-081 | Coverage of an element resolved through the reduction record | (i): the coverage rule as written for an element resolved through the reduction record | OUT-031 |
| Q-082 | What an output permit's trace attributes for coverage | (c): per covered element, the covering entry or entries in canonical construct order; | OUT-039 |
| Q-083 | Whether the deny sweep consults the reduction record beyond layer 0 | (2): the sweep consults the record at any depth (the same reading as Q-062's split) | OUT-022 |
| Q-084 | A layer-0 element left unattempted because ancestry spent the fan-out budget | (b): every layer-0 element is attempted whatever the branch beneath an earlier one has spent; | OUT-019, CAPS-031, CAPS-013 |
| Q-085 | Which element a sweep deny beyond layer 0 names | (b): the layer-0 element the branch descends from | OUT-029 |
| Q-086 | A nested opaque event in the output deny sweep | (a): reduce where the locus can; | OUT-024, OUT-025 |
| Q-087 | Whether the sweep reports what a recorded rumor's surface cannot serve | (b): what the record cannot serve is reported with sweep-incomplete; |
OUT-023 |
| Q-088 | What a denied-relay destination's refusal names | (b): the destination, the matched deny value and the listing carrier | OUT-051 |
| Q-089 | Whether the engine checks the inbox label's named recipient | (a): the named recipient is an npub element of this request that coverage satisfies | OUT-058 |
| Q-090 | The no-record recipe for sealed sends is incomplete | (a): the no-record advice stated completely — the permission covering the correspondent (for a harvested one, its issuing permission, the extend permission where it came through one), the issuing permission of every other covering entry, and that of every relay-scope interact entry of which a … | TOOL-037 |
| Q-091 | The strength of the rebroadcast mutation: "MAY add" against "the signer adds" | (a): the MAY confers no discretion. | RBC-008, CONF-026 |
| Q-092 | How exact is NIP-04 structural recognition? | (A), shape only: standard-alphabet base64 on each side, padding optional, an empty side not excluded, split at the first ?iv=, nothing further checked; |
OPQ-009 |
| Q-093 | A sign request opaque only by declaration, whose content is not recognisable ciphertext | (B): a sign request opaque by declaration alone, its content not recognisably ciphertext, is deny, layer opaque |
OPQ-011 |
| Q-094 | The counterparty for an outbound inner layer that is itself recognised ciphertext | the grants-least composite of A, B and C for an outbound inner signed layer whose content is recognised ciphertext; | OPQ-021 |
| Q-095 | How exact is the recovered event-object shape check? | readings (A) and (C): a duplicate key anywhere in a recovered object fails the shape (OPQ-030); | OPQ-030, OPQ-031 |
| Q-096 | Reading a recovered plaintext as a tag array: does a top-level array with non-tag elements qualify? | (B), tolerant: tag-shaped top-level elements are read as tags, the rest contribute nothing and owe no finding; | OPQ-034 |
| Q-097 | maxReductionDepth: what it counts, and at what count material is unreduced |
R1: 'reached', the dispositions row's own word; | OPQ-045, OPQ-049, CAPS-024, CONF-024, CONF-029 |
| Q-098 | What anchors an unsigned rumor — what is "the enclosing seal"? | (E): the immediately enclosing layer anchors a rumor whatever its kind; | OPQ-035 |
| Q-099 | A policy-read candidate whose counterparty argument is not its author: refused, or gated? | (1): a supplied enclosing event whose pubkey is not the counterparty argument is refused with the transport's ordinary error reply before any evaluation — no verdict or trace, nothing decrypted — a current guardian's kind-37711/7711 included; |
OPQ-063, CONF-024 |
| Q-100 | Is a carried arrival relay enforced at a TEPP signer's decrypt oracle? | (2): the signer's cell states what a signer can vouch for by itself; | OPQ-071, LOCI-049 |
| Q-101 | The unenforced findings a decrypt request without its enclosing event emits |
(B) for the arrival relay; | TRACE-034 |
| Q-102 | What "verifies as one of TEPP's own sealed artifacts" comprises | (b): 'verifies as' includes the kind's tag allow-list and tag shapes; | OPQ-076, OPQ-074 |
| Q-103 | Does the encrypt oracle reduce a plaintext event object whose own content is recognised ciphertext? | (a): the output order applies up to the rebroadcast step with reduction included; | OPQ-082, OPQ-084 |
| Q-104 | The reduction record's retention floor where there is no client connection | (b): at a locus with no client connection the floor is no more than 'kept across requests' (LOCI-001) | OPQ-111 |
| Q-105 | "Opaque events admit only through interaction-mode coverage" against §14.3's self hit | (a): the self hit is available to opaque input beside the interact-mode npub hit on the recovered author, the relay hit and the event hit staying excluded; | IN-019, IN-024 |
| Q-106 | Does a permission the degradation table invalidates still exist for whitelist activation? | (i), by reference to OUT-054: an invalid direct relay-scope interact permission in a binding carrier still activates the destination whitelist regime, which is then on with no members of its own; | POL-081, OUT-054 |
| Q-107 | rebroadcast: null — a type error, or "a value other than "deny""? |
R1: a JSON null, and any other type error, is a strict-parse failure invalidating the whole payload at its site's polarity, inside a restriction entry (its rebroadcast field included) as anywhere else, never one of the malformations with a disposition of their own; |
POL-079, POL-083 |
| Q-108 | Does a request denied at destinations still carry its mutation or demand-inert finding? |
Grants-least does not discriminate: the verdict, the layer and the reason are identical and nothing is signed either way. | RBC-006 |
| Q-109 | For a reduced event, at which layer's kind must a demanding entry match? | (b): a match at any layer's kind counts (the question sits in 15-rebroadcast's list; | OUT-042 |
| Q-110 | A - tag already present on a request that names an envelope or one of TEPP's own kinds |
(b): the exception first (the question sits in 15-rebroadcast's list; | OUT-046 |
| Q-111 | The demand-inert reason when an envelope is also one of TEPP's own kinds |
Grants-least does not discriminate: the step never denies and the event is signed as presented, so the verdict, the returned bytes and the destinations are identical under all three readings and only the trace differs. | RBC-007 |
| Q-112 | How a demanding entry from a profile, or from a harvested construct entry, is named | (i-a) and (ii-a): the index addresses the carrier's global array as written; |
TRACE-037, CONF-132 |
| Q-113 | The order, and the repetition, of a construct entry's demanding entries | (i-a): own, profile, harvested, harvested-profile; | ORD-040, ORD-041 |
| Q-114 | Which omitted inputs produce an unenforced finding |
(b): three finding-bearing omissions, three silent fall-backs; | LOCI-003 |
| Q-115 | What the unloaded delivery to guardians names |
(a). | LOCI-042 |
| Q-116 | Who is the subject when a relay runs a regime of its own | (b) for admission: a space has no subject — no self hit, nothing subject-addressed; | LOCI-036, CONF-060 |
| Q-117 | How a space's construct is assembled without an association | (a) and (c): assembly with the association-dependent steps vacuous, the space's own carriers entering where binding carriers do; | LOCI-037, LOCI-038, LOCI-039, CONF-062 |
| Q-118 | When a future-dated finding reaches the guardians |
Fail-closed in the grant/deny sense does not separate the readings: the admission itself is settled (the carrier is admitted and marks) and no verdict, layer, reason or attribution turns on the delivery time. | LOCI-045 |
| Q-119 | Two finding shapes where §19's field list and the vector schema disagree | (ii-1): type is the finding's name; |
TRACE-044, CONF-132 |
| Q-120 | May a refusing sign step name an element only reduction recovered | (b): at the decrypt oracle 'no partial reduction leaks' is read wide — no plaintext and no element reduction recovered in the refusal (OPQ-068); | OPQ-068, OPQ-101 |
| Q-121 | The unloaded delivery vectors cannot be written |
(a): the delivery variants unexpressible until the fields are named | CONF-027, CONF-028, CONF-029, CONF-008, CONF-109 |
| Q-122 | Construct age in a vector that pins no last successful refresh | (a): no lastSuccessfulRefreshUnix and no initialization of its own = no successful refresh on record (CONS-176, Q-059's reading): age on verdicts, and the awaited attempt on sign and nip44_encrypt |
CONF-110 |
| Q-123 | What refresh supplies, and the awaited attempt past constructAgeHard |
(a): refresh supplies the awaited attempt; |
CONF-019, CONF-112 |
| Q-124 | A vector pins no discovery set and no counting subset | (a): counting by exclusion (copies-only per world.nip65 without a p-tag hint, or excluded per localState.excludedRelays); | CONF-011, CONF-019, CONF-100 |
| Q-125 | Two fetches the closed fetch-class enum cannot key | (a): the class list closed; | CONF-011, CONF-012, CONF-014, CONF-019, CONF-008, CONF-094 |
| Q-126 | null or absent for a field that does not apply | (a): present-and-null where a defined field has no value; | CONF-129, CONF-117, CONF-130, CONF-101 |
| Q-127 | What listOrigin carries |
(a) with the canonical spelling; | CONF-131 |
| Q-128 | Where the reduction finding lives, and its counterparty on input |
(a): reduction hoisted, one occurrence (CONF-135), counterparty null on input | CONF-126, CONF-135 |
| Q-129 | The order of a verdict's findings | (a): findings in step order (assembly, then evaluation), each family's stated order within a step, the findings no step emits last (record-evicted, then age last). | ORD-034, ORD-035, CONF-019, CONF-134 |
| Q-130 | Two unnamed members of the trace vocabulary | the AUTH outcome in the stale family stays without a finding name | TRACE-034, TRACE-047, CONF-019, CONF-021, CONF-024, CONF-027, CONF-028, CONF-144, CONF-143 |
| Q-131 | The association coordinate's high-water mark after an honored deletion | (b): the mark is not cleared and advances to the deletion's (created_at, id) | CONF-011 |
| Q-132 | How a profile reference's several relay hints are tried | (ii): hints in relays order, stopping at the first verified copy | CONF-016 |
| Q-133 | A coordinate deny value against an id-form element at layer 0 on input | (b): the same question raised from the conformance side; | IN-012, CONF-022 |
| Q-134 | What the unloaded delivery to the guardians names |
(b): the delivery names coordinates and ids only | LOCI-042, CONF-027 |
| Q-135 | One unloadedNotifyAfter threshold, spelled two ways |
inclusive wording: 'once the finding has stood for unloadedNotifyAfter', no 'past' spelling; |
CONS-152, CONF-027, CONF-029 |
| Q-136 | Is a subject-authored event element still deny-checked and swept on output? | (a): the output exclusion of a subject-authored event element waives coverage only; | SURF-046, OUT-013, OUT-031 |
| Q-137 | Does the output deny sweep consult the reduction record beyond layer 0? | (a): the same; | OUT-022 |
| Q-138 | Regime-4 closure over kindless material: is only a named-kinds allow entry left uncounted, or every allow entry? |
(a). | RESTR-024 |
| Q-139 | When a ratified offer is spent at the locus that signed the ratification | (a), worded as the source words it: the offer is spent from the moment its ratification is signed; | CERE-015 |
| Q-140 | A decrypt request left unanswered at a keyless locus's already-learned sealed coordinate | (b), the half stated here: a carrier the oracle answered on and could not decrypt has failed to decrypt and refuses the assembly (malformed); |
ADDR-018, CONS-092 |
| Q-141 | Two ill-formed references: a reference tag with no value, and an naddr whose kind TLV is not 32 bits |
(ii-a): the value decides — a TLV 3 of any width whose value is at most 65535 is exact, so the naddr yields an event element |
SURF-025, SURF-017 |
| Q-142 | A resolution run of its own for recovered content text beneath a layer that has a kind | (a): recovered content text beneath a layer that has a kind is resolved in one more run, with no kind, beside the run at each kind (RESTR-021, RESTR-019); | RESTR-019, RESTR-021, RESTR-037, RESTR-041 |
| Q-143 | How "already on the current branch path" is judged for a reference that carries a coordinate | (b): a coordinate-form reference is attempted, counted by the fan-out cap, and is a cycle only where the event it resolves to is on the current branch path; | IN-038, OUT-016 |
| Q-144 | Whether the output deny sweep stops at a cycle | (a): the sweep stops silently at an event already on the current branch path, the stopped reference uncounted; | OUT-016 |
| Q-145 | Which check decides when several deny at one referenced event in the output sweep | (a): where several checks deny at one resolved event, the first to deny in the listed order (author, own id or coordinate, elements, uppercase values, global set) decides the layer and the attribution; | OUT-014 |
| Q-146 | What a disclosed rumor's recomputed id must match | (b): the recomputed id matches the rumor id the element names and, where the rumor carries an id, that id too; |
OPQ-113 |
| Q-147 | The reduction record's order for a key recorded again, and for two entries one request inserts | (i-a) and (ii-a): a ciphertext or rumor id the record already holds is not inserted again (its entry keeps its first place), and of two entries one request inserts, the reduced rumor precedes the produced ciphertext; | ORD-032 |
| Q-148 | What a space records when opaque material passes through it | the pass-through is stated, and no verdict, layer, reason or verdict-less outcome is recorded for it: the reading that invents nothing | OPQ-125, OPQ-126, LOCI-035 |
| Q-149 | What a global-set deny under regime 1 attributes | (b), by reference to TRACE-020 (TRACE-020): a regime-1 global-set deny the sweep reaches names the first matching deny-polarity entry, as at layer 0 | OUT-028, TRACE-020 |
| Q-150 | What a harvested entry's attribution names: carrier, label, list origin and profile id | (b) for the carrier, label and list origin: a harvested entry's attribution names the harvested carrier and the harvested permission's label and list origin, provenance (CONS-049) naming the issuing carrier and the route; | TRACE-018 |
| Q-151 | What maxProfileRefs and maxDenyEntries count |
(i-a): every distinct id referenced counts toward maxProfileRefs, whether or not its reference resolves |
CAPS-032, CAPS-018 |
| Q-152 | The fan-out cap has no name a configuration can state | (a): the row keeps the table's own words, 'the fan-out cap', and mints no identifier; | CAPS-013 |
| Q-153 | "At least one vector per line": per checklist paragraph, or per item | (b): at least one vector per item of a checklist line, and one per listed variant of an item marked ⊕ | CONF-007 |
| Q-154 | Where an oracle vector carries its request's inputs: event, payload, arrivalRelay |
(a): a decrypt request's arrival relay is oracleRequest.arrivalRelay alone; |
CONF-053, CONF-054 |
| Q-155 | What a query outcome's filter holds, and whether a runner compares it |
(a): only the half of the source's sentence saying the filters are an implementation matter is carried; | LOCI-020, CONF-090 |
| Q-156 | Finding fields, wall fields and a refusal's cause given in words with no keys | (c): the refusal's cause is stated in words; | CONF-130, CONF-140 |
| Q-157 | What a "loud trace" is: the dropped view-category map key | (a): the dropped key's 'loud trace' is the typed finding every drop emits (CONS-114) and nothing more — the trace cell reads 'traced, by a typed finding' and states no delivery to the guardians and no surfacing; | POL-088 |
| Q-158 | What "the signer's declared relays" in the default destination set names | (b): 'the signer's declared relays' are the relays the signing locus itself declares, joining the default set of a message that is not encrypted beside the subject's outbox, each labelled as the subject's own; | OUT-049, CONF-079 |