Repository navigation
v7.70.0
Pairs with engine-service-v0.1.145, unchanged from 7.69.0: no engine cut, no
changeset, no deploy. A client-only release. The plugin shrinks: the 41 entries
conexus/PENDING_RELEASE.md held become live at this pin (the cleanup's hook,
command, skill and agent deletions, and the doc-drift command fixes); see
conexus/CHANGELOG.md.
Fixed
- Doc drift an outside critique measured is corrected: the RDR index, a promised hook, five slash commands, two unresolved citations and the stale bead export (nexus-aruua; from the 2026-10-03 outside critique, T2
nexus/outside-critique-nexus-ecosystem-2026-10-04).docs/rdr.mdno longer promises a session-start reconciliation hook that never ran and was deleted; it saysnx rdr set-statuswrites file and T2 together.docs/rdr/README.mdgains the two rows it omitted (RDR-123, RDR-124, both superseded by RDR-127), corrects RDR-120 and RDR-130 to Closed, and restores RDR-201's title cell, which held the word "Closed".conexus/commands/rdr-list.mdand thenexus.hooks.rdr_verbdocstring stop describing a SessionStart reconciliation or a set-status that never writes T2: the verb mirrors a flip onto T2 best-effort andnx rdr preamble rdr-auditprints the drift that remains. The five commands that said "all data is pre-loaded above, no additional tool calls needed" (devonthink-index, rdr-list, rdr-gate, rdr-fix, rdr-accept) now say the data is the!preamble's output and tell the agent to gather it when the preamble did not run, instead of forbidding the fetch. The nexus skill's hydration example no longer attributes the 300-record cap to ChromaDB. RDR-090'sRDR-326and RDR-170'sRDR-651citations, which name no record in this repo, now say so inline (651 is the conexus-side cutover)..beads/issues.jsonl, a May 2026 export of 255 rows that readers took for the store, is untracked and ignored likeinteractions.jsonl;tests/fixtures/bead_ids.txtremains the committed bead artifact, and the agent docs no longer tell anyone to commit the export. nx doctorreadsGET /v1/statuson a mint-armed cloud box (nexus-z0o2p.40).fetch_engine_statussent whatever bearer the endpoint resolver returned, and on a box that authenticates with per-request data tokens the resolver returns an empty one by design, so the public edge answered 403 and theOwnerless writesandEngine reaperrows said "not applicable: the engine's status endpoint could not be read", in green, on every cloud install, whiletests/e2e/cloud-client-path-gate.shread the same endpoint because it mints the data token first. The probe now mints the data token for the resolved endpoint and the default tenant when no static token resolves; a static-token or local box is unchanged, and a mint failure still reads as "could not be read". Measured on the live 0.1.145 engine: the row now reportsengine mode=log-only: no ownerless chunk write since the engine started, the reading RDR-223's flip criterion is taken from.
Removed
-
The develop-freeze mechanism and the unused routing library in the wheel are deleted, with their tests (cleanup step A5, nexus-0r1uz).
scripts/develop-freeze.shandscripts/lib/develop-freeze.share gone, andscripts/git-push-develop.shno longer readsboard/develop-freeze:PUSH_REFUSED_FROZEN(exit 12),PUSH_REFUSED_FREEZE_UNKNOWN(exit 13),PUSH_FREEZE_OPEN,PUSH_FREEZE_OVERRIDDEN,PUSH_FREEZE_UNCHECKEDandNX_PUSH_FREEZE_OVERRIDEno longer exist. The lock leg and the scope audit are unchanged, and underNX_PUSH_SKIP_LOCKthe script no longer resolves the installednx.tests/scripts/test_develop_freeze_sh.py, the fakenxthe freeze tests used and the freeze class in the push-script tests are deleted, as are the freeze step in thereleaseskill and the freeze paragraph in AGENTS.md rule 8.src/nexus/hooks/_routing_lib.py(949 lines) had no importer once the subagent git-write verb went at step A4;tests/test_routing_hooks.pyandtests/test_routing_fail_closed_boundary.pynow exercise the plugin-residentconexus/hooks/scripts/routing/_lib.pythat the two live guards import, and the cases that only covered the wheel copy's lease-grace read are deleted. The hook-file floors intests/hooks/test_t2_prefix_scan.pymatch the tree, andconexus/README.mdsays the core server registers 2 internalhook_*tools, not 12. -
The deploy tracker (
nexus.deploy_tracker,nx service record-deploy) and the rehearsal hop manifest (scripts/gen_rehearsal_hop_manifest.py,tests/test_rehearsal_seed_coverage_lint.py,tests/data/rehearsal_old_tag_changesets.json) are deleted with their tests and docs (cleanup step 10b, nexus-0r1uz). Both were left behind by steps 10 and 9. Thedeployed-engine-versionT2 tracker is no longer written;nx service probereads the live/version.scripts/check_wire_contract_pairing.pyhas no deploy-record dependency and is unchanged.service/src/testchanged in comments only, so they no longer cite the deleted files. -
The release battery is collapsed to three legs and one preflight; the one-shot e2e gates and the migration-rehearsal modes other than package-upgrade and acquire are deleted (cleanup step 11, nexus-0r1uz).
tests/e2e/release-battery.shnow runstests/e2e/release-preflight.shand then, in one parallel group,fresh-install-mvv.sh(mvv),migration-rehearsal/run.sh --package-upgrade(pkgup) andlocal-service-gate.sh(lsg). Theartifactsbuild leg,--artifactsreuse, the manifest and tree-identity helpers (build-artifacts.sh,lib/artifact_manifest.py,lib/tree_identity.py) and thecandmig,smoke,shakedown,dtok,upshakeout,genflip,pluginls,hookskew,janitor,pinsandshakeoutlegs are gone.release-preflight.shabsorbsscripts/pins-preflight.shand the mandatory-pins gate: it runscheck_engine_release_floor.py --ledger-only, the ci-evidence required-context tests, themandatory_regression_pinselection (exact count, zero skip budget,ghtoken resolved from the real HOME) and the pin sweep (lint bucket with its non-vacuity floor, the non-lint pin tests, wire-contract pairing,ruff check src). Deleted:release-sandbox.sh(and its smoke, shakedown and tmux modes),upgrade-shakeout.sh,local-index-memory-gate.sh,published-client-write-gate.sh,data-token-cli-gate.sh,admission-load-gate.sh,rdr195-voyage-mvv.sh,rdr208-mvv/(its three helper scripts moved tohook-surface-shakeout/, which uses them),warm-reindex-skip-gate.sh,gen-flip-live-holder.sh,plugin-lockstep-gate.sh,mandatory-pins-gate.sh,scripts/credential_janitor.py, thecc-catalog-decomposition-smoke.shscenario, and theplugin-surface-smoke.ymlworkflow (its only job ran the deleted smoke).migration-rehearsal/run.shaccepts only--package-upgradeand--acquire(the post-publish gate against the published bytes, kept because the engine-release skill names it); the cold, era-hop, guided, stranded-redirect, hole-punch, fullstack, shakeout, shakeout-e2e, candidate-migration, comprehensive/stress and--with-cloudmodes, their drivers, Dockerfiles and libs, and thecold-install-rehearsal,era-hop-mvv,guided-upgrade-mvvandstranded-redirect-rehearsalworkflows are deleted.scripts/cut_plugin_release.py's cut battery drops its sandbox-smoke step. The nightly workflow's mandatory-pins step runs the same pytest selection inline. The tests that existed only for the deleted scripts go with them, and the lint allowlists, ceilings and floors that named them are lowered to the measured values. Thereleaseskill drops Steps 1c, 6, 6b and 6c, theengine-releaseskill drops Steps 3 and 3c, anddocs/contributing.mddrops 7b to 7f (numbers left as they were). -
The
nx rdr preamble rdr-closeandphase-review-gateverbs andnexus.phase_review_sentinelare deleted, with their tests; the two skills are trimmed (cleanup step 13, nexus-0r1uz). Both verbs had no caller once their slash commands were deleted, and the hook that read the phase-review sentinel went at step A2.rdr-closetook the Problem Statement Replay gate (--pointersvalidation, the legacy-RDR grandfathering warning), the--forceand--force-implementedaudit lines, the Revision History check, the open-bead warning and therdr-close-activeT1 marker.phase-review-gatetook the Pass 1 / Pass 2 §Approach cross-walk, its three parsers and the PASSED sentinel file. Kept:nx rdr set-status(the close flip), the §Implementation Plan extractor thatrdr-gate's plan-grammar check uses, and the override-audit rowsrdr-auditreads.conexus/skills/rdr-close/SKILL.mdkeeps the critic step (the override reason now comes from the user, not a flag), the post-mortem and the T3 archival;conexus/skills/phase-review-gate/SKILL.mdis now a short manual checklist, and the docs, registry and README no longer say it blocks anything. Tests removed:tests/test_phase_review_sentinel.py(12) and the rdr-close and phase-review-gate cases intests/test_rdr_preamble.py(63 test functions to 47),tests/test_rdr_process_records.py(28 to 23) andtests/test_rdr_set_status.py(50 to 47). -
The engine release floor is one script with one mode more, and the arming relay, the record-deploy leg and the lint-leg floor script are deleted (cleanup step 10, nexus-0r1uz).
scripts/check_client_release_precondition.pyis folded intoscripts/check_engine_release_floor.pyas--client-precondition [TAG]: same hand table, DATA EFFECT relay check, ledger check and exit codes (0, 1, 2), and its tests move over. Deleted:check_release_armingand the cross-repo attestation relay underdocs/release-arming/(the README and seven JSON attestations);--record-deploy-from-gate-report,--no-record-deploy, the exit-3 tracker refusal and$NX_GATE_REPORT_DIRhandling in the floor script (the bare post-tag verify is now the floor plus source ancestry and writes nothing;nx service record-deploy --gate-report-diris unchanged and is the way to record a deploy);--ack-client-lagin every mode and theackedbucket ofclassify_unshipped(a non-additive## Unshippedentry now blocks until its client half ships). A non-additive pairing still must not tag before conexus has the redeploy staged, but that is now a human confirmation thereleaseskill names, not a check.scripts/check_lint_leg_non_vacuity.pyis replaced by an inline passed-count assertion at its three call sites (the lint job at 400, each test shard at 1500, andtests/e2e/release-preflight.sh); it reads pytest's own summary line, so a mass-skip that exits 0 still fails. The floor tests go from 169 to 39 functions, the signing workflow tests from 21 to 5, the draft/promote tests from 7 to 3 and the wire-contract lint from 27 to 8 by tabling cases that differed only in data;tests/test_wixar_lint_leg_substrate_none.pyis deleted with the script it backstopped..test_durations.jsonpruned. -
The bd-close review gate, Stop verification, the phase-review close gate and the StopFailure, PostCompact and divergence-language hooks are deleted with their MCP tools, config reader, registrations, tests and docs (cleanup steps A2 and A3, nexus-0r1uz). Source:
nexus.hooks.pre_close_verification,stop_verification,verification_config,phase_review_close_gate,stop_failure,post_compact,divergence_language_guardand_plugin;nexus._hook_runtime._config(theNX_ORCH_STOP_GUARDresolver nothing reads any more); the plugin'srouting/phase_review_close_requires_gate.pyanddivergence-language-scan.py. Thenx-hookverbspre-close-verificationandphase-review-close-gateare gone (an older plugin that still names one gets the unknown-verb notice and exit 0, so abd closeis no longer gated on a review marker or a phase-gate sentinel). The five MCP toolshook_pre_close_verification,hook_stop_verification,hook_stop_failure,hook_post_compactandhook_divergence_language_guardare removed, so the MCP wire snapshot moves (59 tools to 54) andnexus.mcp.hookskeepshook_auto_approveandhook_subagent_start;DECIDING_HOOKSisauto_approvealone and the_NEVER_TOOL_TIERcarve-out for the deleted fail-closed rule goes with it.nexus.configlosesget_verification_config, theverificationdefaults section anddetect_test_command(the.nexus.ymlverification:keys are ignored),nexus.garbageloses theclose-gate-backstop/sweep (directories an older client left are no longer reaped), andnexus._hook_runtime._iolosesstructured_field,stop_decisionandHookResult.exit_code.nexus.phase_review_sentinelstays, but nothing reads the sentinel now. The routing registry keepssubagent_git_write_requires_orchestratorandcredential_print_guard; PreToolUse Bash carries two hooks, down from four. Docs: thereview-completedmarker prohibition in the two reviewer agents, the code-review skill and the shared context protocol,docs/configuration.md§ Verification, and the architecture and MCP-server tables. -
The subagent git-write guard is one copy, and its tests and the credential-print guard's are behaviour tables (cleanup step A4, nexus-0r1uz).
src/nexus/hooks/subagent_git_write_gate.py(1,480 lines) and itssubagent-git-write-gatenx-hookverb are deleted:hooks.jsonnever ran them (every release, 7.58.0 on, wires the plugin scriptconexus/hooks/scripts/routing/subagent_git_write_requires_orchestrator.pydirectly), so the deny rules the plugin runs are unchanged. Therouting_statsverb-to-rule mapping that existed only for that verb goes with it.tests/test_routing_subagent_git_write.pygoes from 479 collected cases to 29 and now drives the plugin script instead of the wheel verb: the deny shapes are tables grouped by bypass family (write verbs, global flags, chained and nested,gitspellings, quoting and escapes, shell-wrapped text, spliced expansions, accepted false positives), with the offending command in each assertion, plus the allow tables, the main-conversation, linked-worktree, escape-token and fail-closed cases, and the two copies' parity pins are gone.tests/test_routing_credential_print_guard.pygoes from 173 to 9: one test per shape table, and the fail-closed cases kept.src/nexus/hooks/_routing_lib.pyis no longer imported by any wheel verb; only tests read it, and it is left for step A5. -
The RDR tooling tests are collapsed to one test per behaviour (cleanup step 14, nexus-0r1uz).
tests/test_rdr_preamble.pygoes from 236 test functions to 63: cases that differed only in their input are now rows of parametrized tables (every old input is kept, each row's id names it and each assertion message names the failing row), and the two tests that grepped skill files for heading variants are deleted.tests/test_rdr_audit_skill.py(34 test functions to 3) andtests/test_rdr_audit_incident_template.py(16 to 1) keep only the wiring and the template's enum pins; their prose greps are deleted (test_plugin_structure.pyowns skill structure).tests/test_rdr_set_status.pyfolds its 22 single-edge tests into one edge table. No source change and no behaviour pin removed. -
The RDR-184 expectations ledger, the RDR-205 tuple projection and the behaviour/capability census are deleted with their hooks, verbs, MCP tools, doctor rows and tests (cleanup step A1, nexus-0r1uz). Nothing in the repo reads or writes them any more. Source:
nexus.hooks.expectations,ledger_verbs,agent_dispatch_expect,subagent_start_stamp,subagent_stop,subagent_stop_scans,subagent_start_tuple,subagent_stop_tuple,tuple_projection,tuple_ledger_projectandbehaviour_census;nexus.census,nexus._session_end_censusandnx census(capability,dispatches); the plugin'sbehaviour_census.py. Thenx-hookverbsexpectations_expect,expectations_census,expectations_undeclared,expectations_reconcile,agent-dispatch-expect,subagent-start-stamp,subagent-stop,subagent-start-tuple,subagent-stop-tupleandbehaviour-censusare gone with the exit-code-propagation path only theexpectations_verbs used (an older plugin that still names one now gets the unknown-verb notice and exit 0). The five MCP toolshook_agent_dispatch_expect,hook_subagent_start_stamp,hook_subagent_stop,hook_subagent_start_tupleandhook_subagent_stop_tupleare removed, so the MCP wire snapshot moves (64 tools to 59) andnexus.mcp.hooks.DECIDING_HOOKSlosessubagent_stop. SessionEnd no longer writes a capability census row;HttpTelemetryStore.record_capability_censusandquery_capability_censusare gone (the engine table, its trim and the engine templateledger/<session_id>stay, andnx doctor --fixstill trims old rows).nx doctorloses thetuple-projectionsupplementary row and the orchestration-hook plugin floor row.stop_verificationkeeps its close-gate backstop but no longer reconciles the ledger (it now carries its own ISO-timestamp and session-id helpers).mailbox_drainnow holds its own endpoint resolution instead of importing the projector's. Also deleted:tests/e2e/post-publish-dispatch-check.shand its test, cc-validation scenarios 21 and 27, leg 8d of the fresh-install MVV and leg G of the cloud client-path gate, thenx-hookAGENTS.md rule, and the orchestration skill's Background-Teammate Ledger and wait-for-a-report sections. -
Four pieces of RDR tooling that nothing called are deleted, each with its tests and docs (cleanup step 12, nexus-0r1uz).
nx rdr lint(no invoker in CI, pre-commit, skills or hooks).nx rdr repeatandsrc/nexus/rdr_repeat.py(never wired). Thenx rdr preamble rdr-showverb (therdr-showskill does its own reads and never called it). The rdr-audit scheduling templates:scripts/cron-rdr-audit.sh,scripts/launchd/andscripts/cron/with their READMEs, and the/conexus:rdr-audit scheduleandunschedulesubcommands that printed them (list,statusandhistorystay).nx rdrnow hasset-statusandpreamble. -
The RDR-201 release decision table and its copies are deleted; the verdicts live in the two gate scripts (cleanup step 6, nexus-0r1uz).
docs/tables/release-choreography.toml, the routerscripts/release_choreography.py, the message catalogscripts/release_messages.py, the enumeratorscripts/enumerate_release_cells.pyand its two fixtures (release_cells.json,release_cell_texts.json) are gone, with the tests that pinned them to each other (the parity harness, the enumerator and router tests, the release-incident cells and the preflight verdict-extraction test).scripts/check_engine_release_floor.pyandscripts/check_client_release_precondition.pyprint each verdict and return each exit code inline, byte for byte what the table path printed (the frozen per-cell text fixture passed against the inlined scripts before it was deleted). Two things went with the table and are not replaced: an unmappedDeployTrackerErrorsubclass now exits 3 with the usualTRACKER NOT RECORDEDline instead of exit 2, and an unexpected exception escaping either gate is a traceback and exit 1, where the table path's wrapper mapped it to exit 2. RDR-201 stays; itsrdr-lifecycletable is unchanged. -
CI process machinery deleted (cleanup step 8, nexus-0r1uz).
scripts/ci_status.py(the fold of the conexus CI board posts into a per-commit verdict),scripts/check_ci_commit_coverage.pywith.github/workflows/ci-commit-coverage-audit.yml, andscripts/scheduled_workflow_watchdog.pywith.github/workflows/scheduled-failure-watch.ymlare gone, with their tests and.test_durations.jsonentries. To read a commit's CI, make one call togh api repos/Hellblazer/nexus/commits/<sha>/check-runs; the board itself is conexus-side and untouched. The watchdog workflow's second job,engine-floor-verify(the daily bare re-run ofcheck_engine_release_floor.pyagainst the live cloud), went with it: a paired release's deploy is now verified only by the human POST-TAG VERIFY the gate's acceptance message names. AGENTS.md rule 7,docs/contributing.mdand the release skill say so. -
CI runs on GitHub-hosted runners only: the
qwen-linuxandhellmini-ciroutes, the runner probes and the host-specific post-publish ceremony are deleted (cleanup step 7, nexus-0r1uz).ci.ymlloses theroutestep, theci_runneroutput and thetest-qwenjob;pytest-gatenow requires the hosted shards.service-ci.ymlloses itsroutestep andjava_runneroutput, and the Java job runs onubuntu-latest. Deleted with them:qwen-linux-isolation-probe.yml,hellmini-ci-isolation-probe.yml,hellmini-probe.yml,scripts/qwen-hand-run.sh,scripts/qwentescence_local_supervisor_gate.py(and release-skill Step 11d),scripts/check_inbound_relay_acks.py,scripts/check_agent_verify_claims.py,scripts/check_deferral_staleness.py, their tests, and docs/contributing.md § First run of the qwen-linux route. Thehellminirunner stays for release legs. The repository variablesQWEN_CI_PUSH_RUNNERandSERVICE_CI_PUSH_RUNNERno longer do anything and can be deleted. -
One-shot engine-release rehearsals and proofs are deleted, each with its tests and its skill and AGENTS.md steps (cleanup step 9, nexus-0r1uz).
scripts/check_pitr_fork_walk.pywithtests/e2e/two-walk-check.shand its decision tests, and the engine-release skill's Step 6a that handed its invocations to conexus.scripts/check_rdr194_cc5_delivery_gate.pyand the skill's Step 3d.scripts/check_release_workflow_shape.py,tests/e2e/migration-rehearsal/lib/shakeout_shape_check.shand the call inmigration-rehearsal/run.sh, with the AGENTS.md "PRE-TAG gate: release-workflow SHAPE" bullet. The candidate-engine proof:tests/e2e/lib/candidate_engine.{py,sh}, its stub and shell test, the release battery's--cut,--candidate-engine,--accept-candidate-mismatchand--expected-engine-lagoptions (and theNX_CUT_MODE,NX_CANDIDATE_ENGINEandNX_CANDIDATE_EXPECT_OWNERLESS_MODEvariables), the identity and refusals reads infresh-install-mvv.sh,data-token-cli-gate.sh,local-service-gate.sh,release-sandbox.sh,rehearse_shakeout.shandrehearse_candidate_migration.sh, and the skill's Step 3f.scripts/check_engine_cut_riders.pykeeps only itssizessubcommand, whichscripts/promote_engine_release.shruns at the draft-to-published gate; theancestrysubcommand, theRIDERSlist and the skill's Step 2b are gone. Thedtokbattery leg now runs only when named in--only.tests/scripts/test_release_battery_end_to_end.pykeeps the leg-selection, red-leg and pins-leg cases.