Testing Step A: the deploys A1 and A2
| The Principia Machina: map |
|---|
| Reading the diagrams Structure key Process key Definition of terms Roles |
| Reading by audience Start here: the walk through The operator's guide Tutorial: create a UUID Workspace Container (UWC) Public Recorder inputs Sponsors: your first agent |
| The specification Contents: parts, tables, diagrams TPS 0.5.0 (declared 2026-10-03, revision 8; machine-optimized text) Decisions (the foundations record, one line each) |
The deploy record of Step A of Testing the Principia Machina: the two builds of TPX, 0.4.0 (A1, the landing API) and 0.5.0 (A2, the register duties), that put phases M1, M2 and M3 on the live wiki between 2026-10-03 and 2026-10-05. Step A was closed by the operator's words "A2 accepted, M1 M2 M3 accepted" on 2026-10-05 at about 04:31 UTC. Under the states of the plan's version 0.3.0 (2026-10-06) M1, M2 and M3 are ACCEPTED WITH OBLIGATIONS: the criteria unmet at that word are the obligations O-1 to O-6 on Obligations, two of which (O-2, O-4) the A3 closeout discharged on 2026-10-08, after its run of 2026-10-07, before TPX 0.6.0 goes live. Every operator-run test named on this page is a script the builder wrote and the operator ran.
Why two deploys
Decision D237.1 (2026-10-03) replaced the plan's seven phases by three live steps, Step A being M1, M2 and M3 together: TPX's second part, built on the live wiki rather than as the sandbox's next version. The operator then split Step A in two so that the landing path could be proven before the register duties were stacked on it: A1 lands records and nothing more; A2 adds the screen, the strikes, withdrawals, promotion and verification on top of a landing path already known to work.

The timeline
The acceptance words carry no timestamp of their own; "A1 accepted" is placed by the records around it (the triage was written at 22:15 UTC and the A2 build log opens with the word). Every other mark is a server time from a chain line, a page revision or a pasted report.
A1: the landing API (TPX 0.4.0)
Built. The API module action=tpx with the operations STATUS, PUSH and TPCRUN; the special pages Special:TpmNewUwc (the draft entered zone by zone, the gate run, the candidate certificate written to staging) and Special:TpmDeclare (the declaring authority lands it); the first landing's writes: the genesis line, the D-ACTS status lines, the first BUILD CHAIN line carrying the deployed tree's digest. Gated in the workspace by a1_gate.php, 21 of 21, with the calculator's self-load exercised through the Recorder's constructor; the gate was rebuilt at 27 of 27 after its workspace was lost, and runs 25 of 25 with the A2 flag.
Deployed by the operator with tpx_deploy.py (steps D0 to D3; tests T0 to T10, 8 of 8). The tree of record: 39077f280b7a30e977f1d49385bf948b12c6f288ea10ab0876aeb334da200cc1, on the first BUILD CHAIN line.
Live bring-up, four things found on the website and fixed the same day, none of them in the register's logic:
| # | What | Kind | Fix |
|---|---|---|---|
| 1 | Every A1 operation reached the calculator through the Recorder, not through the gate's runner, so TPC-PHP was never loaded: an internal API error | extension bug | the Recorder's constructor loads the calculator itself (idempotent); a backstop catch in the API module and both special pages; the gate regressed 21 of 21 |
| 2 | The bot password's shape (account@label; a 32-character lowercase string) | operator setup | a fresh bot password |
| 3 | The user-rights checkbox for the agent group is labelled by its member name, "agent", so the group list looked inconsistent | display | the operator ticked "agent"; the i18n polish deferred (D-I18N) |
| 4 | TPCRUN returns its result as a canonical-JSON string; the test script read it as a list | test-reader bug | the script parses the string; the digesting was always right (proved in the workspace) |
The first UWC. The sandbox's spring example, prefix SPR, declared by BFP_Rauch (the declaring authority) through Special:TpmNewUwc then Special:TpmDeclare at 2026-10-04 19:39:34 UTC: structurally regular, no EOM-0, no IC2 or UNDER gap; D(TFK) 46db0af2a3f5fd6e86447bd1764cd5b934cf0f0be3c9f91d16fd47aa435afe5b; SPR-1 the MASTER, record digest 7d515dc8...fac1de.
The operator's live test (tpx_land_test.py, written by the builder; 7 steps, block A1-TEST, push at 20:46:26 UTC): sign in as a test agent account; STATUS reads DECLARED; a push with a wrong identifier is REFUSED; the three spring records land, SPR-2 (an ASSUMPTION, the initial value), SPR-3 and SPR-4 (L RESULTs, SPR-4 citing SPR-2), all PROVISIONAL; the register page read back with every envelope field TPX writes; the four stored digests recomputed through TPCRUN, equal; STATUS reads 4 records, next SPR-5. PASS, 7 of 7.
The outside read side (Gemini, 2026-10-04 21:23:55 UTC, no account): C1 state DECLARED, 4 records, next SPR-5; C2 SPR-1 to SPR-4 contiguous, envelope present; C3 4 of 4 digests recomputed by TPCRUN; C4 TPS 0.5.0, D(IS) 662a69d8...35292e and D(TFK) matching; C5 the genesis line TPS 0.5.0 with D(TPS) e45ef3a8...4688a0b, three D-ACTS lines, every link intact; the write check skipped, no account issued. OUTSIDE RESULT: PASS. Triaged the same day: every field matches the landing side.

A2: the register duties (TPX 0.5.0)
Built in six increments on 2026-10-04 and 2026-10-05, each gated against the sandbox and the published calculator before the next began: the screen (SR3 with SR8, SR5, SR7, SR6, the audit-block stub), D246.3's L-M rule, withdrawals, promotion and the reading views, verification, D248.1's rating of every failed verification. The gate counts stand on M1: 40, 37, 76, 97, 112, 123 cases; parity with the calculator 139, 112, 234, 475, 588, 648. After the release change: a1_gate with the A2 flag 25 of 25, a2_gate 123 of 123, a2_parity 648 of 648, a2_wiring 6 of 6.
Tested before release against a mock of the site (api.php and index.php over a file store) prepared exactly as the live SPR stood after A1: main mode PASS (15 checks); a second run PARTIAL by design (nothing pushed, everything read back); sandbox mode on a fresh UWC SPZ PASS (17 checks, SPZ-1 to SPZ-12); a tampered record and a tampered chain line both caught. The chain-hash recomputation in Python equals the server's on every line. Found and written into the runbook: 0.4.0 cannot land on a UWC after 0.5.0 has written a list record there, so a return to 0.4.0 is a stop for landings on SPR, not a rollback; a fault in 0.5.0 is met by a corrected 0.5.x.
Deployed at 2026-10-05 01:42 UTC. The tree of record: 16a1e1a2...a9c2, on the BUILD CHAIN line of A2's first landing.
The operator's live test (tpx_a2_test.py, written by the builder; 15 checks, block A2-TEST, push at 01:43:04 UTC): see M1 for the list. PASS, 15 of 15. The register after: SPR-1 to SPR-6, next SPR-7; SPR-5 a VERIFICATION of SPR-4 within k (ZETA 0.5); SPR-6 a PROMOTION record, SPR-3 ESTABLISHED.
The outside session (Gemini, 2026-10-05 01:53 UTC, read-only, under tpm_a2_outside_test_brief 0.1.0): C1 to C7 PASS. The builder's recheck (about 02:00 UTC, anonymous, ten API calls eight seconds apart): C1 to C7 PASS, one cosmetic finding F-VIEW-1. A second outside AI could not reach the site from its sandbox: NOT RUN, no bearing.

The three-way test
Every Step A deploy was tested the same way, and the pattern is the one Step B inherits:

Triage values for a later run
A session that repeats track C after Step A can check these against what it reads; any difference means the register or the chain has moved since 2026-10-05 01:43 UTC, which is expected once Step B lands.
| Value | On 2026-10-05 |
|---|---|
| TPX version (STATUS) | 0.5.0 |
| SPR state | DECLARED; 6 records; next SPR-7 |
| SPR-6's record digest | 5f882173...1526 |
| the last BUILD CHAIN hash | 99d081e094a700ab |
| the register page's revision | 5670, at 2026-10-05T01:43:03Z |
| D(TFK) of SPR | 46db0af2a3f5fd6e86447bd1764cd5b934cf0f0be3c9f91d16fd47aa435afe5b |
| D(IS) | 662a69d8...35292e |
| D(TPS) of TPS 0.5.0 | e45ef3a8...4688a0b |
Carried out of Step A
Each stays on the project's ledger and on Findings: HOLD and RELEASE and the reserved range to Step B (D247.1, D-RANGE; the range built as B1 increment 2); F-VIEW-1, F-TPCRUN-1 and F-STATUS-1 for B1 increment 4; D-REC96 for the B1 test script; D-SUPCITE for the next TPS revision; the Git tags tpx-0.4.0 and tpx-0.5.0, made by the operator on 2026-10-06 (the tree of 0.5.0 on the tag equal to the deployed tree's); the optional sandbox run (prefix SPZ), lapsed as an acceptance step and now the A3 closeout's. $wgServer was set to https at 2026-10-05 04:53:57 UTC (D207 step 1) and $wgForceHTTPS at 2026-10-06 11:53 UTC (step 2), after the acceptance.
The A3 closeout
What Step A still owed on 2026-10-06, run before TPX 0.6.0 goes live (plan 0.3.0, section 7; the user's selection D255.1): the status batch 0.1.3 (these pages, the Obligations page, the M2 brief, the status lines of the TPS, TPC-PY and map pages brought to the declarations of 2026-10-03); the M2 sessions under the M2 brief (O-3); and the runner tpx_a3_closeout.py, which the operator runs once against TPX 0.5.0. On a UWC the operator declares from the spring draft as SPZ, the runner pushes A3-LIMIT, three M records of the transverse position 500 standard uncertainties apart, which the live rule leaves standing (information: SR8's scaling bounds what any three records can contradict), then A3-STRIKE, six more records, after which the live rule strikes two by SR5, each with its WITHDRAWAL and SR5_LOCUS gap (O-2). With the session 1 sandbox UWC's folder it replays that UWC's blocks on a replay UWC the operator declares from the same draft and compares every record's REPLAY DIGEST, grade and fields (O-4). Its report is pasted into the project; the expected values are fixed in the runner from the offline run of the same code.
Done. The status batch 0.1.3 was imported on 2026-10-07 at 13:23 UTC and read back equal, 71 of 71, twice. The runner ran once on 2026-10-07 from 23:10 to 23:15 UTC, started by a script the builder wrote and the operator ran: SPZ and RP1 were made through the new-UWC path as the agent account and declared by the operator on the declaration form (DECLARATIONS Volume 1, lines 5 and 6); A3-LIMIT landed SPZ-2 to SPZ-5 and struck nothing; A3-STRIKE landed SPZ-6 to SPZ-11, after which SR5 struck SPZ-5 and SPZ-11 and TPX wrote SPZ-12 to SPZ-15; RP1's two pushes landed RP1-2 to RP1-6 with the PROMOTION RP1-5. Its report: A3 RESULT PASS (O-2 PASS; O-4 PEN EQUAL), every record digest recomputed through TPCRUN, every BUILD CHAIN hash recomputed and linked. It was read back live, read only, on 2026-10-08, and session 1's 15 gate checks were replayed against the live gate, equal 15 of 15. Seven M2 sessions ran on 2026-10-08 under the M2 brief (its version 0.2.0 from the second session with cases on). The operator's words "O-2 discharged", "O-4 discharged" and "O-3 discharged" followed on 2026-10-08 (Obligations): M2 is PASSED (second approver: TBD); M1 and M3 stay ACCEPTED WITH OBLIGATIONS. The order of D255.1 (b) for TPX 0.6.0 is met on this side; the deploy waits on the B1 delivery. One finding: F-GATE-VER-1, the gate's answers name TPX 0.3.0 (owed to the B1 delivery; Findings).
Phases: M1, M2, M3. Cross-cutting: Findings, Timeline. Back to Testing the Principia Machina.