Repository navigation
docs: record AF-CTR-03 delivered (companion 2): mail facts, operations page, carried items, error-pair gate - #46
Conversation
Records the delivered AF-CTR-03 state (AD-0021 Delivery state, 10-cloud, cloud-store section 6 part B, the center pages and the operations page), the mail facts (passkey-only browser channel, the e-mail credential and the Postmark account-level sender, the 254-byte address rule, the EMAILS_SENT meter), the carried review items of Design #45 (the Worker's start-failure 503, the credential-check parenthetical, row 37, the PR list, the INTERNAL/internal exception, the fleet.proto gloss, superseded identity owners) and the AF-CTR-04 inputs due before C0 (fakes catalogue, mobile native authorization and its app-link hosting on the acceptance environment, R-AUTH-002, the Contracts follow-up window). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H6Cf6kHnz1ZkfURhVWvGjP
check_design reads every row of the catalogue table (fail closed) and fails a row whose effect can be UNKNOWN when a clause of its retry advice names AFTER_TIME without a known effect, or names UNKNOWN (a word-level check of the Contracts rule arcError). Eight tests, including the four rows of 44a86a9 and three bypass shapes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H6Cf6kHnz1ZkfURhVWvGjP
Review record 1: Design #46 at
|
…any case Review of #46 (design-2, design-3): a test runs check_design's main() on a copy of the catalogue with the provider_error row of 44a86a9 and expects exit 1 (it fails when the gate's call is removed); AFTER_TIME is matched in any case and with a space or an underscore, with a test; the known effects still match only as the enum names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H6Cf6kHnz1ZkfURhVWvGjP
Review record 2: Design #46 fix round 1 at
|
AF-CTR-03 companion 2: it records AF-CTR-03 as delivered (Cloud #118, #120, #121, #122, #123, #124 and #127, Contracts #121), fixes the non-blocking items carried from the reviews of Design #45, records the facts of the live mail adapters (Cloud #127), and adds the AF-CTR-04 inputs that are due before its Contracts part C0. It also adds one check to
tools/check_design.py. Target and delivered behaviour stay marked separately; new target sentences say "(target)".Changes
Delivered state
decisions/AD-0021, Delivery state: AF-CTR-03 with its merges. Everything is dark in production (center.surfacesnone). The acceptance environment (official-hosted mode) serves the account surfaces and the operator-grant page. The self-hosted default and the gate are proved by Go tests only; the gate is proved on test-only operations, because no gated operation is served before AF-CTR-04. Mail is disabled and no e-mail identity can exist. AR-23 is the owner's.architecture/10-cloud.md:identity,pagesandoperationsare delivered surface names; the rest are target names. The PR list "#118 to #122" is replaced by the PRs that delivered each clause (#118, #120).operationsanswers the Worker's 404 when it is off.data/cloud-store.md§6:0003).config.ValidMailAddress); Contracts still allows 320; 255 to 320 bytes is refused, where before #127 the center accepted up to 318. Tightening the Contracts bound belongs to AF-CTR-05's Contracts follow-up window.experience/web.md:identity,pages,operations.--operator-grantmode (PASSED 2026-11-02 and 2026-11-03, MOCKED authenticator and catalogue), states that the hosted 403 for an account that is no operator is NOT evidenced, and names the mode--real-authenticator.architecture/16-testing-strategy.md§2:VirtualAuthenticatorrow (AF-CTR-03 used it; its Plan task already lists it).FakeCenterandNodeProbefor AF-CTR-04.FakeMailSendernames its delivered form (mail.Fake,mailtest).Mail facts (Cloud #127;
plan-mail-decisions)web.md:29: the browser channel is passkey-only whatever the mail configuration (Cloudsignin.go:108), and the pages have no e-mail route.11-security-privacy.md§3: a secrets-table row and a paragraph for the e-mail credential.14-commercial-operations.md:EMAILS_SENTis a target meter (AF-PLAT-01, hooked intodeliver.go); the delivered counter resets at every restart and is not that meter.errors.mdneeds no mail edit.Carried review items (Design #45)
web.md:27,:30: a 503 withRetry-After: 2is the Worker's answer for a Container that never started. Only a 499, a 504 and a 503 withoutRetry-Afterleave open whether the center saw the request.errors.md:20:auth.credential_revoked, a browser cookie getsauth.unauthenticated.INTERNAL/internalis the exception to the decision tree: NEVER with UNKNOWN for every method.errors.md:24, Delivered against target, restated:arctest.ViolationsexemptsINTERNAL/internal.errors.md:112andweb.md:30point at that window (AF-CTR-05).10-cloud.md§3.6: thefleet.protogloss "passkey or recent authentication" is superseded. The proto copy itself is unchanged: it is byte-identical to Contracts, and C0 corrects it.requirements.md(R-OPS-001),11-security-privacy.md,14-commercial-operations.md,contracts/README.md,reuse-map.mdandreuse/inventory-and-classification.md.AF-CTR-04 inputs due before C0
requirements.mdR-AUTH-002 andtraceability/model.json: Android signs in through the center's mobile native authorization (AF-CTR-04). The app link applies to release builds; debug builds use a private-use scheme. R-AUTH-002 and R-CTR-017 list AF-CTR-04.reuse-map.md:reuse-map.md§4 andandroid.md:46: AF-CTR-04 (part M) is to serve/app/callbackand/.well-known/assetlinks.jsonbehind themobilesurface, on the acceptance environment first. AF-PROD-01 adds the production routes when it activatesmobile(decision Q15 of the AF-CTR-04 plan).model.jsonR-OPS-007: a disabled page surface is answered with the Worker's 404, notSTATE/not_activated.Tooling (
tools/check_design.py,tests/test_check_design.py,README.md)check_error_pairsreads every row of the error-catalogue table and fails closed: a row it cannot read is an error, and so is a catalogued code outside the table.UNKNOWNfails when a clause of its retry advice (split at;) namesAFTER_TIMEwithout namingDID_NOT_HAPPENorHAPPENED, or namesUNKNOWN. Words match with or without backticks.AFTER_TIMEwith: "AFTER_TIMEwithDID_NOT_HAPPEN, orAFTER_TIMEonce" and "AFTER_TIME(even if notHAPPENED)" pass. The README and errors.md say exactly this.44a86a9fails; a clause naming UNKNOWN fails; a bad cell count fails; three bypass shapes fail (a qualified first cell, names without backticks, a row without a code);AFTER_TIMEin another case or with a space fails; and a fullmain()run on a catalogue with the44a86a9provider_errorrow exits 1 (this test fails when the gate's call is removed frommain()).AFTER_TIMEis matched in any case and with a space or an underscore; the known effects (DID_NOT_HAPPEN,HAPPENED) only as the enum names, so prose such as "happened" never counts as a known effect.What this does not change
model.jsonrows that name AF-ID-01 (the Plan graph still lists them).fleet/mobilerenaming in the Plan's surface lists, which waits for AF-CTR-04 part D.Coupling with the Plan PR
model.jsonadds AF-CTR-04 to R-AUTH-002 and R-CTR-017, and the Plan PR (plan/af-ctr-03-delivered) adds those requirements to AF-CTR-04.linux-traceabilitystep fails against Designmainuntil this PR merges, and passes against this branch.--plancheck.Evidence and review
python3 tools/check_design.py --require-protoc: 0 errors, 3 notes; 225 methods, 19 state machines.python3 -m unittest discover -s tests: 57 tests OK.44a86a9put back into errors.md give 4 errors in a full run; after restoring, 0 errors.python3 eng/verify.py run --rev HEAD(Linux, full profile): LEG PASS, 3 steps, 38 s ate63bff3; 47 s atec7bfe4(fix round 1).main()replaced bypass, the new full-run test fails; withAFTER_TIMEmatched case-sensitively again, the new case test fails in all three subtests.🤖 Generated with Claude Code
https://claude.ai/code/session_01H6Cf6kHnz1ZkfURhVWvGjP