Skip to content

backup OAuth test fix - post-v2.8.0 - #750

Open
AIOSAI wants to merge 8 commits into
mainfrom
dev
Open

backup OAuth test fix - post-v2.8.0#750
AIOSAI wants to merge 8 commits into
mainfrom
dev

Conversation

@AIOSAI

@AIOSAI AIOSAI commented Aug 30, 2026

Copy link
Copy Markdown
Owner

No description provided.

… - the announcement's outside-the-copy branch cured within the hour (@backup's fix, night shift, the lane's first scalp). THE CHAIN backup confirmed by static trace: test_real_invocation_still_dispatches[all-run_snapshot-extra0] doubled run_snapshot and nothing else, but all.handle_command keeps going - run_versioned, then run_drive_sync, which authenticated through @api and hit _save_credentials: mkdir + chmod 0700 + open-w + chmod 0600 on the real ~/.secrets/aipass/google_creds.json. open-w TRUNCATES ON OPEN, so a failure mid-write could have left a zero-byte credentials file; a test named for a help gate was doing live network auth on every run on every machine, and the suite's unexplained slowness (14s) had been the only symptom for 15 days. THE FIX: a DOWNSTREAM_AFTER_SENTINEL map neutralises every step that runs after the sentinel - run_drive_sync patched at its SOURCE module because it is imported inside handle_command. Two pins added (346 to 348): every post-sentinel step is a double, and a sys.addaudithook watch asserting nothing under .secrets is touched - the watch RECORDS rather than blocks, deliberately: backup's first repro BLOCKED the write and hung forever because a blocked refresh drops the Google client into its interactive browser flow. Red-first stated honestly: the watcher proven red against a throwaway root performing the same three ops, never against Patrick's real secrets. VERIFIED THROUGH THE LANE ITSELF: audit tests @backup now shows 0 outside_copy across all 778 writes, 0 paths under .secrets, gate_coverage 0 children + 0 sqlite so the confessed blind spots did not apply, and the suite dropped 14s to 6.3s - the live auth WAS the slowness. Devpulse re-ran independently: 348 passed in 6.39s. Backup's remaining hygiene-0 (778 inside-copy writes driving real prax/trigger state) is logged as its open APLAN item - other citizens' state, mail before touching, not tonight.
@codecov

codecov Bot commented Aug 30, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 98.22222% with 4 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
...ass/memory/apps/handlers/monitor/registry_scope.py 96.72% 4 Missing ⚠️

📢 Thoughts on this report? Let us know!

AIOSAI added 7 commits August 30, 2026 10:22
…onsumes registry_scope through @memory's new modules/fleet.py gateway (FPLAN-0460 phase 1, Patrick's system-wide ruling; @daemon + @memory's paired build, devpulse repointed the import). DAEMON deleted ~150 lines of second-implementation discovery - core-registry read, projects glob, dot-filter, two-key resident rule all gone, replaced by one fleet_branches() call; live fleet verified unchanged (22 = 18 core + 4 residents, labels and registry spelling preserved), 489 tests, source labels ready for the external tier (external/WREN never silently reads as core). MEMORY: registry_scope 2.2.0 hardened after daemon LEFT ITS PIN RED against the module rather than guarding in its own wrapper - the deleted duplicate's isinstance guard was load-bearing, a passport whose JSON root is not a dict raised out of declared_residency once per citizen, one malformed passport = every lane dead (rollover, lint, health, trinity_push); memory found the defect twice the size reported (ten raising shapes in the registry reader, unguarded second .get) and the pin is six shapes green. Plus modules/fleet.py 1.0.0 - the PUBLIC gateway daemon asked for instead of shimming: seedgo's own rule text sends cross-branch callers to modules/, and a gateway for memory's module living in daemon's branch would be the two-implementations failure in a new costume. Devpulse repointed discovery.py's import through the door; the checklist's two honest reds (encapsulation + handlers) now 34/34. Daemon's email-keyed dedup deliberately stays its own - memory dedups by path, and two rows sharing an email but naming different dirs would double-fire a citizen's schedule; refused by name, red-first. BLOCKED UPSTREAM, not done: Vera's jobs stay invisible because ALL SIX external citizens across four sibling repos lack citizenship.residency - Passport 2.0 never left this repo. Memory ratified the third value 'external' (the registry's own canary entry already names the tier) and is mailing spawn; the AIPASS_REGISTRY federation block awaits Patrick's + devpulse's GO. Test target for the external fence: @wren, not @vera - one branch, no live jobs, exists to be the fence test. FPLAN-0460 stays open.
…'s 5x repeat escalation dead, the record is no longer a new way for rm to fail (@drone's fix, trigger-dispatched, self-organized; prax's logging ruling rides along). ERROR 8de84e90, severity HIGH and not cosmetic: rmtree succeeds, then record_deletion raises on the FIRST os.getcwd() because the deleted dir WAS the cwd - the except appends (path, False, 'Delete failed'), logs the contradiction trigger caught (deleted and delete-failed for the same path in the same second), then the failure record calls record_deletion AGAIN and the second raise propagates out of safe_delete, handing the caller a traceback where every caller expects a results list. Three unguarded Path.cwd() reads sat outside the try whose docstring promised Never raises; the durable record fell back to the prax line alone because the store path walks up from cwd - while AIPASS_HOME, which needs no cwd, sat unreachable behind the raise. FIX: _current_directory() -> Path|None never raising; caller/signal resolution SKIPS location-inference when there is no location (AIPASS_BRANCH_NAME identity never depended on cwd and still answers); the cwd field records a defined sentinel - None is the absence of a signal said out loud at INFO, never a substituted '/'. Reproduced red-first live AND as four failing tests before any fix; 5 new pins in TestRecordFailureIsContained. Verified independently by devpulse: 1243 passed. FLAGGED not swept by drone's own discipline: router_handler.py:355 + modules/router.py:118 carry the same unguarded species on the routing path, no reported symptom, awaiting the word. PRAX RULING committed with it: the object-form logger import STAYS recommended - prax measured all three import spellings with an audit hook before ruling (import writes 0, first CALL writes 26, second 0 - identical across spellings; the writes come from the call starting the watcher, never the binding), so changing the recommended import would have moved a number that does not depend on it. The fleet-wide mocking-technique correction (5 of 5 techniques reach nothing) continues in seedgo's lane.
…ts checker stops legislating prax's contract by accident, and daemon's own house cleans up (post-announcement round, all agent-built, devpulse verified 3086 green). SEEDGO: imports_check widened to accept from-aipass-import-prax alongside both existing spellings (widened not opened - thirdparty and misspelled packages still refused; 6 mutations, 6 red, including two holes the FIRST cut left where a fixed-length slice mangled input by coincidence - restructured to a partition so the guard is observable, then it bit). imports.md carries the measured five-row table - all five fleet prax-mocking techniques reach nothing, @memory credited by name including for the retraction that corrected seedgo's own first diagnosis; the recommendation stays UNRANKED because that is prax's contract, and prax's measured ruling (writes come from the call, not the binding) is already committed at 7c55560. The fleet correction broadcast rode this morning: forged-logs claim retracted with the evidence refuting it, daemon and backup named as the branches that did NOT do it, the one-line consumer-side fix published with an explicit do-not-restructure-yet pending prax's seam. runner.py + selfcheck.py carry the lane's follow-up hardening with the run's own findings. DAEMON: the alias removed from devpulse's repoint (the file now says which door it stands in - plain fleet, six call sites and docstrings updated, drift-by-naming refused), and timer_install's real-HOME write fixed - the mkdir seam extracted so the suite can no longer touch the actual ~/.aipass, which holds admin_grant.key and commons.db. Suites: seedgo 2583+, daemon 489, combined 3086 passed re-run independently by devpulse. Drone's routing-path cwd follow-up and memory's declared-roots anchor are LIVE builds and deliberately not in this commit - a working branch is never committed mid-flight.
…-0460 phase 2 built and the routing-path record corrected (@memory registry_scope 3.0.0 / fleet.py 2.0.0, @drone follow-up, committed by devpulse). MEMORY'S ANCHOR: external repos join the fleet by DECLARATION - a machine-managed AIPASS_ROOTS.json beside AIPASS_REGISTRY.json (same species: blessed, the trust anchor of a tier), paths relative to AIPass home so /home/patrick stays out of a public repo. THE FILE DOES NOT EXIST YET and memory refused to create it - a file that installs itself is not a declaration; until Patrick blesses it declared_roots() returns [] and a test pins the fleet as unmoved. Membership is PRESENCE per Patrick's verbatim ruling (.daemon present anywhere + an agent exists there = daemon available): a branch in a declared root is a citizen if .trinity/passport.json exists, the tier LABEL applied by the reader never claimed by the passport - which is why it works for six live external citizens none of whom declare a residency field, and why memory's own earlier schema-migration precondition was correctly overruled (it made a six-owner campaign the price of a working feature). THE WALK LAW crossed the repo boundary unchanged: one shallow glob for *_REGISTRY.json at a declared root's top level, then that registry's own branches - never a passport walk; pinned both ways (registry one level down not found, .backup passport unreachable) plus the double-count guard by name (a root overlapping AIPass home is REFUSED in either direction, because declaring our own tree returns @baud three times). Multi-registry roots are a NAMED REFUSAL not a sorted()[0] pick - @drone testified against their own _first_registry_in ('a fallback wearing a determinism costume') and memory neither copied it nor merged (a union nobody declared). A mutant found a real defect mid-build: _refuse hardcoded 'resident', so a passportless EXTERNAL was logged as a refused RESIDENT sending grep into the wrong repo - tier is a parameter now, wording pinned. Fleet record gained residency+scheduler keys (major bump, @daemon told - their exact-keys pin will go red by design); scheduler reports a FILE (.daemon/schedule.json exists) and never interprets it - that meaning is @daemon's, and encoding it here would be a second implementation. MEASURED against the real machine into a throwaway stand-in: 4 roots, 6 external citizens (Demo carries @my_agent, feel_good_app none), @wren reachable (the fence case), Vera's two jobs enabled=False UNTOUCHED - nothing writes to another repo. 40 red-first tests, 14/14 mutants killed (rglob-instead-of-glob dies, dropped-passport-check dies). One honest red reported not dodged: seedgo's imports check reads AIPASS_ROOTS.json as the AIPASS_ROOT env var - substring not token - raised with @seedgo instead of renaming to satisfy a grep. DRONE'S FOLLOW-UP, and the correction to 7c55560's record: THREE unguarded routing-path Path.cwd() reads existed, not two, and 355 was a COMMENT - drone misread a window, @trigger counted independently, and an undercounted list inside a report about an undercount is worse than the original; it is corrected here in the same channel. All three fixed red-first: ONE Path.cwd() now exists in the entire drone tree (caller_cwd()'s try; deletion_log imports it rather than keeping yesterday's private twin), AIPASS_CALLER_CWD is OMITTED when cwd is gone rather than shipped as a sentinel a target might resolve, dead-cwd routing confirmed raising before the fix. The risk was LIVE not theoretical: the rm fix works, so deleting your own cwd no longer crashes the delete - drone's own fix created the traffic for the bug behind it. Verified by devpulse independently: 2603 passed / 10 skipped across both suites. Rides along: one dead assignment removed from seedgo's selfcheck.py (the 'intact' leftover from the check-12 split, caught by this commit's own lint gate). Two resolution-semantics rulings ride to @drone next (declaration-is-the-credential; N-root precedence = local wins, declaration order breaks ties).
…e code-born anchor, the day rollover stopped lying, and the dead-cwd guard sweep (@drone, @memory, @prax, @daemon, @seedgo + 13 guard fixes, committed by devpulse, FPLAN-0460 phases 3-4 aftermath; first commit attempt died with the laptop's charging glitch mid-gate, nothing lost). DRONE HERMETIC BOTH STATES: Patrick blessed AIPASS_ROOTS.json at 15:38 and 8 drone tests went red within the minute - their suite read the REAL machine. The fix is a SEAM not a weakened assertion: _external_branches defaults to the registry's own parent instead of process cwd; the dead live-state pin is GONE not skipped, replaced by the rule (a project with no declared roots resolves exactly as before the tier existed). 1281 green WITH the file and 1281 green WITHOUT. Proving state B surfaced two defects OLDER than the tier: get_branch_by_name returned the AIPASS_HOME lookup found-or-not (its sibling has always guarded - two functions, one question, two answers), making externals unreachable wherever home is not the project registry; and exceptions.py called log_operation at MODULE level, recording during collection that a class file had been imported. Their session hit max_turns AFTER mailing the finished work - the exit-1 is administrative. THE ANCHOR IS CODE-BORN, Patrick's ruling within minutes of seeing a hand-made file: memory built templates/AIPASS_ROOTS.template.json + drone @memory roots init/add/remove/list/heal. render_scaffold FORCES roots=[] whatever the template carries - an example root in a template is a declaration nobody made. init REFUSES over an existing file INCLUDING a corrupt one (unreadable is not absent). add refuses at WRITE time what the reader refuses at read time. heal is DELIBERATE, never automatic: bytes to .corrupt, fresh empty scaffold, salvage RETURNED AS A REPORT never written back - a rebuild that re-declares what it thinks it saw is a machine blessing roots on Patrick's behalf. The live file was regenerated THROUGH the verbs, declarations byte-identical, and a pin makes the next hand-edit a red test instead of drift. ROLLOVER STOPPED LYING, three live defects: (1) THE WORST - write_memory_file_simple signals failure by RETURNING False and _write_memory_file threw the boolean away, every try/except above it decorative; measured against seedgo's real file: extract 12, write-back REFUSED (one unrelated 343-char summary held the file over cap), discarded False, orchestrator reads success, VECTORIZES ANYWAY, file untouched, next run re-embeds the same 12 - wasted work every run. THE HARM STOPPED AT THE STORE'S FRONT DOOR, and the record keeps memory's own correction: their first report said 'the archive holds duplicates', then they MEASURED before drafting the reconcile - upsert with content-derived IDs made every re-store a no-op, ZERO duplicates across 46 collections and 15,372 vectors. Steps 1-5 measured; step 6 was an inference wearing the measurements' clothes, called out rather than let stand - no reconcile needed. A False now raises, restore-from-backup fires, nothing vectorizes when the file cannot shrink. (2) The misplaced-entry valve refused every candidate dated today - contrast evidence that separates nothing on a day the head is also dated today; three branches jammed exactly as the valve's own log text predicted. Ordering was the evidence, the date never was. Same read: session and auto-compact lanes shared one head, so a machine snapshot outranked every regular entry - each lane now heads its own population. (3) A run where every trigger failed printed NOTHING - 0/1 is a result. THE TIER'S SECURITY STORY: normalize resolved the WHOLE fleet and matched rolled branches BY NAME while holding a pen - an external repo naming a branch api would have had a file silently rewritten. Third writing lane scoped to the repo edge in one session (push, detector, normalize), each pinned because the unscoped call reads like an obvious simplification. BYTECODE HONESTY: memory cleared 31 stale .pyc, re-ran every mutation - THREE mutants reported killed actually SURVIVED, all real test gaps, corrected in the record, 17/17 clean. DAEMON ADOPTED prax's seam (json_handler 1.5.0, call-time): 581 live-tree ops to 0, their share closed and nobody else's claimed - and their independent acceptance run is the verdict: 28 citizens = 18 core + 4 residents + 6 external, Vera's jobs queued flags untouched, their words 'Daemon is system-wide'. Two fleet defects from the adoption mailed to owners: identity-form patch detection dies under importlib.reload, and a save_json that never mkdir'd. SEEDGO adopted the seam and widened the imports checker so AIPASS_ROOTS.json stops tripping a substring match for AIPASS_ROOT; their JH-037 rewrite collided its name with JH-036 and shadowed it - renamed by devpulse at the lint gate. And seedgo's behavior change exposed a devpulse misconfiguration: MY copy of the 43-test json_handler template still carried BRANCH_MODULE='seedgo' - my suite has been testing seedgo's handler since the template landed, invisible until today's gate put devpulse in the changed set for the first time; repointed to devpulse, 41 green. scheduler FIELD REMOVED at @daemon's own request (registry_scope 4.0.0): it named ONE file while daemon reads a glob - a nearly-right field is worse than none; major bump stated not dodged. THE DEAD-CWD GUARD SWEEP: drone's new pin went red INSIDE PRAX - the template-born _find_real_caller guard, copy-pasted into all 18 branches' handlers/__init__.py, resolves frame filenames BEFORE skipping pseudo-files like <string>, so ANY process whose directory was deleted crashed importing ANY branch. Fixing only drone's import fan would have been the day's own lesson (a fix landing on some of N identical paths): all 18 swept - prax and trigger by devpulse, 15 by a briefed sub-agent preserving each file's comment style, drone's own copy found ALREADY GUARDED by its author (deliberate variant, left as written). Proven by running the defect itself: chdir into a temp dir, delete it, import all 18 handler packages - 18 OK, and resolve on <string> still raises there, so the guard is what keeps imports alive. Owners mailed; template fix rides to @Spawn so newborns stop inheriting it. Suites: drone 1281/5, memory 1417/5 audit 100, prax 1377/1, daemon 507, trigger 1081, devpulse 597+41, seedgo green. gitignore carries AIPASS_ROOTS.json beside AIPASS_REGISTRY.json - machine-local, never ships. Banked for @flow from memory's store scan: flow_plans holds 2,242 identical documents under DISTINCT ids (27 percent) - a lane minting fresh ids where upsert cannot collapse; their lane, their fix. The tier is live: 28 citizens, @wren routes cross-repo, Vera's two jobs visible and OFF awaiting the supervised first fire.
…izen fired by the real clock, and every wall it hit fell the same night (FPLAN-0460 CLOSED; Patrick supervising live; six dispatches, six wake-backs, all green; committed by devpulse). THE FIRE, honestly: attempt 1 at 19:02:04 FAILED - resolve: Branch not found: @vera. The tier was half-plumbed: daemon DISCOVERY reads memory's fleet gateway and saw her job, but the WAKE walks ai_mail's resolve_branch which knew three sources and no external tier - discoverable, not wakeable. Fixed within the hour (wake.py 2.5.0, step 4 = externals via memory's gateway by MODULE, no second reader of the anchor; local always wins so the tier runs LAST; the admin sweep stays above it because a sibling repo's @baud must never shadow our own; 13 tests red-first, the hermeticity mutant pins that world-state absent means absent). Attempt 2 at 19:28:49: the REAL systemd timer fired her, she woke, read her notepad, worked her playbook. Attempt 3 (Patrick's test wake) at 19:47:22: green again THROUGH THE NIGHT'S NEW RULES. PATRICK'S RULINGS, all landed same night (compass 322/323): (1) the cross-project fence STAYS for every seat, devpulse is the SOLE outward reach - hooks edit_gate 1.7.0 verifies the admin through ai_mail's 5-leg grant rail (the gate SUPPLIES the caller-cwd evidence a hook process lacks; ADMIN_SEAT appears in the log line only, decides nothing) and NEW bash_writes.py closes the scripted lane for everyone else: redirections, sed -i, tee, cp, interpreters incl. heredocs, cd-chains; what it cannot catch is PUBLISHED as introspectable data (NOT_CAUGHT) not buried; unreadable commands allow-and-log because a parser must not convict on what it never learned; 49 tests, 18/18 mutants incl. the dead _OWN_FENCE suppression list deleted and the boundary walk that blessed writes to a project ROOT; the gate blocked its OWN audit reply (quoted shell in a mail body) and the parser was fixed rather than the wording - heredoc bodies are DATA for the syntax read; hooks.json matcher widened to Bash with the zero-dark-window trust re-enrol; verified end-to-end from the admin seat: scripted and tool writes into Vera-Studio both pass, everyone else provably blocked. (2) always bypass permissions always - the interactive manager lane spawned BARE claude (Vera sat with Bash denied, improvised around it with WebFetch); the flag is now unconditional: ATTACHABLE IS NOT ATTENDED. (3) managers are fable, ONLY managers - resolve_wake_model reads citizen_class from the passport the gate already opens, decided ONCE above the spawn fork; substring check because the CLI takes fable AND claude-fable-5; and the honest correction in ai_mail's own report: Vera was on Fable by CLI DEFAULT, wake.model null - right answer, NO decision behind it; both lanes now state the model they mean. THE KILL that taught the last two: Patrick killed her live session because nothing marked it as daemon work - wake.py 3.0.0 names sessions AIPASS-DAEMON-WAKE-branch-HHMMSS plus a queryable tmux option set BEFORE send-keys, and deliberately NOT the dispatch register (no monitor exists to close the entry - crash detection would drown in false alarms; pinned with the reasoning in the docstring). THEN PATRICK FOUND THE DESIGN HOLE within two hours of the first fire: her 19:47 room sat at the prompt 90 minutes after she finished - the interactive lane never closes itself - and wake.py blocks wakes into occupied branches while the daemon stamped last_run on the block, so tonight's leftover room would have eaten tomorrow's 10:00 silently. His ruling: daemon wakes should BE dispatches. Daemon run.py 1.2.0: scheduled=True UNCONDITIONAL (every wake run.py makes is clock-fired; per-target reading would re-implement the manager gate wake_branch owns) - scheduled manager wakes now take the monitored headless pipeline that self-terminates. runstate 1.2.0: a fire ends in THREE states not two - fired consumes the day; BLOCKED (occupancy/lock/pause - refused before a process existed) leaves last_run UNTOUCHED, stays due, retries in-window under a 5-minute hold (unbounded retry on a 2-minute tick is a storm; a later outcome ends the hold); failed backs off 10. Read by DispatchStatus step LABEL plus status, never by matching prose; resolve and blocklist stay failures because nothing about the next two minutes changes the answer; rotation stays a MISS because the night was genuinely spent. Live-proved against their own held lock: blocked, last_run unchanged, due again 4 minutes later. 35 new pins, 13/13 mutants, both first-pass survivors named and real. MEMORY'S CUT, the deadlock at the bottom of the night's error loop: rollover was REFUSED writing the very file it exists to SHRINK - one over-cap entry anywhere refused the whole document, so the file could never get smaller because it was too big; 15 identical errors in 3 hours that reached devpulse only through trigger's escalation. entry_limits 1.6.0: a write is refused for what it AUTHORS, never for what it CARRIES - authored (new or edited, incl. editing a fat entry smaller) still refused; carried (byte-identical to disk) passes and is REPORTED with owner and cure on every write. The discriminator is a property of the DIFF, unspoofable, so rollover needs no special status: it simply never authors. Identity is the TEXT never the index (a prepend shifts every entry; the index-keyed mutant is pinned). Their post-mortem in the record: the 08-27 narrowing wrote cured-at-a-moment as an invariant, and parked drift detection on the one component structurally BLIND to how drift arrives (the write gates own refusal text says Bash writes are not checked) - detection lives in drone @memory lint now. Fleet measured clean except devpulse's own 705/150 todo, trimmed same hour. Hooks' three trinity-gate reds from the contract change reconciled by hooks themselves same night. Plus registry_scope 4.1.0: sorted() dropped from declared_roots so DECLARATION ORDER genuinely breaks external ties - ai_mail's collision pin rewritten for it; the gap lived exactly one day. SPAWN: template _find_real_caller fixed at the SOURCE and proven by MINTING a citizen and running the defect against it - newborns stop inheriting the dead-cwd crash; addendum owned two of their own tests passing by luck (a monkeypatch on the SHARED time module catching foreign sleeps; a Rich hard-wrap splitting an asserted path mid-token - verified at COLUMNS=40). FLOW'S REFUTATION, banked with respect: the 2,242 identical docs are NOT duplicates - keyed on source_file plus document, ZERO redundant; it is unfilled template boilerplate from 481 different plans and the salt WORKING (per-file provenance); delete REFUSED because one confident vector standing in for 99 plans is worse than the disk; no code changed, and two real defects found instead, routed to owners: restore leaves the vectorization manifest entry so a restored plan's FINAL content silently never re-vectorizes (3 live APLANs), and importing trigger's core writes three files at import time - the entirety of flow's hygiene zero. STILL OPEN, named not hidden: @vera is wakeable but NOT mailable (delivery.py walks the old three sources; dispatch to externals refuses) - held DELIBERATELY because it drags the broadcast question, @ALL quietly gaining 6 external citizens in 4 repos must be DECIDED not inherited, Patrick's call; drone rm allowlists AIPass home and /tmp so the admin seat can write into a sibling but not delete there (two probe files sit in Vera-Studio root); scheduled=True makes an enabled cl-harvest-resume refused by blocklist - ships disabled, confronted when enabled. Suites: ai_mail 1389+, hooks 1764+ reconciled, daemon 559, memory 1449, spawn green, devpulse 601. Vera wakes tomorrow at 10:00 with nobody watching - which was the whole point.
…ing a norm (FPLAN-0461, Patrick's night-shift brief answered: NO, it was never a norm - it was two universes; 30 CI reds classified with zero speculation, every one fixed at root cause by its owner, 19171 passed / 0 failed across the whole composed universe before this commit). THE FRAME Patrick asked for at 00:28: the commit gate runs each branch suite with rootdir pinned to the BRANCH by its own pytest.ini, so the repo-root conftest never loads there - CI composes every conftest in ONE process under xdist from the repo root. Not cwd - inifile discovery. Green per-branch says nothing about the composed world, which is why every train arrived red without anyone having broken their own suite. THE 30: 12 = MY root conftest guard misfiring on the seam's env-independent anchor (guard now CONSULTS the handler's own _current_json_dir instead of re-deriving - a second implementation misread the contract it policed); 2 = prax's anchor seeded WITH the env var, and their correction sharpened my diagnosis: no reload needed, env-derived is sufficient alone, their own green was IMPORT-ORDER LUCK (daemon's conftest shielded them from repo root; a green that depends on a shield nobody chose is not evidence - their words, now pinned by subprocess import, the honest instrument for import-time defects); 5 = drone tests reading the real registry absent on CI, one a REAL bare-world import crash whose root was MEMORY'S registry_scope module-level Path.cwd() fallback (fixed: source root from __file__ via the src marker, filesystem-root sentinel absurd enough to fail loudly; drone moved the gateway import inside their never-take-routing-down guard and pinned with a meta_path finder); 2 = memory's marker7 guarded on existence not sufficiency (new live_all_tiers fixture measures the world with pathlib, NEVER through the resolver it judges - asking the accused is how guards delete the failures they exist to expose); 5 = memory's own chained-session fixes; 2 lint/format; 2 CI-only baseline reds routed and cured same night. THE MINTER, hunted and killed: memory fingerprinted the polluter byte-exactly (446 bytes, three legs of evidence) - tests/e2e routing_root wrote a 3-branch synthetic AIPASS_REGISTRY.json at the REPO ROOT for a whole module, true sequentially and poison under xdist (aipass reproduced: 40/60 parallel reads saw the synthetic mid-window), and WORSE than CI: on a live machine it overwrote the real 22-row fleet anchor with the backup held in process memory alone - kill -9 at t+0.8s left the fleet existing NOWHERE (reproduced, not argued). The fixture now builds a throwaway root under tmp: no repo write exists, no teardown left to fail, regression pin sha256s the live file. Memory's symlink suggestion REFUTED by aipass before building on it - _validate_branch_path resolves before comparing, follows the symlink home, silently drops the branch; banked fleet-wide: a containment check that resolves before comparing is symlink-proof by construction. Only macOS and Windows CI run e2e (ci.yml ignores it) - the asymmetry is flagged for Patrick's ruling, not silently changed. THE SECOND GUN, disarmed unfired: aipass find_registry returned Path.cwd()/AIPASS_REGISTRY.json for ABSENCE - a question about one directory answered with a file from wherever the caller stood - while spawn's load_registry minted a fresh metadata.id for exactly such a path; two lines composed = a registry with a brand-new trust credential out of nothing. Now: absence is None (their own git_auth half already pinned that contract; _doctor_fix was ALREADY guarded as if None were possible - evidence the contract was expected all along), and the mint MOVED to resolve_project_credential called by name from the two create sites - the create path knows it is creating, the load path knows nothing; the 08-24 asymmetry (absent mints, present untouched, unreadable never re-credentials) survives intact and stated. Spawn then found the contract change had FIFTEEN call sites in their tree assuming Path: 4 live crashes (is_protected: AttributeError ESCAPING a narrow except inside a SAFETY check - no registry here became a traceback where a refusal belonged; the delete path now refuses rather than deleting unchecked) + 11 more the type checker found in ops files no test reaches registry-less; all fifteen refuse in their own vocabulary, pinned by behaviour because the-type-checker-was-green-that-day is not something a future reader can verify. RODE ALONG, same species: spawn's read-torn racer reports weather as weather (warmup until both sides prove live, skip-with-counted-reasons backstop, tear-check FIRST so a skip can never mask a real tear - proved under load 5.29 with races EXERCISED, the one intermittent red in prax's 1380-file fleet batch); spawn's dotted-dir passport rule (glob matched .archive passports by luck of layout - Vera-Studio's 9-where-registry-knows-4 measured as the live counterexample); drone's dead-cwd sweep finished (10 bare reads, not the 9 reported - the tenth found by the sweep itself); memory's skip-reads-green mutant lesson (a guard that skips unconditionally SURVIVED because positive pins report their own defeat as a pass - they catch Skipped and fail now); aipass hardened three find_registry consumers and corrected my scope: windows-test.yml runs e2e too, not just macOS. HONEST INCOMPLETIONS, named not rounded: memory's pollution probe died at 28 percent (instrument race, two failures were the probe's own damage) so other minters are NOT excluded; aipass's AIPASS_HOME-merge flag stands (any test shelling out to drone on a dev machine reads the live fleet through get_all_branches - their fixture defends itself, the fleet-wide question is queued); one silent completion called out and cured (memory exited 0 without replying - the reply came, with the minter in it). MORNING PROPOSAL rides in FPLAN-0461 for Patrick's GO: L2 gate smoke leg (one combined pytest over changed branches with -c pyproject.toml --rootdir=. -n auto, drafted, held for drone's tree), L3 bare-world nightly via daemon dogfood, L4 seedgo testing standards (no module-level env mutation, a test states its world, both-rootdirs rule), L5 optional canary pre-push sim. Every branch fix verified independently by devpulse before this commit: prax 1381, drone 1310, memory 1466, spawn 816, aipass 1091+15 e2e under exact CI mode with live registry md5 unchanged, and the composed universe 19171/0. Vera fired at 10:00 this morning on the real clock while all of this was being fixed - nobody watched, which was the whole point.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant