Skip to content

release: conexus 7.36.1 - #1516

Merged
Hellblazer merged 24 commits into
mainfrom
release/v7.36.1
Sep 8, 2026
Merged

release: conexus 7.36.1#1516
Hellblazer merged 24 commits into
mainfrom
release/v7.36.1

Conversation

@Hellblazer

Copy link
Copy Markdown
Owner

Client-only patch. Engine unchanged at engine-service-v0.1.108; the wire ledger's Unshipped section is empty; the plugin pin advances to v7.36.1.

Fixed

  • Service error bodies are redacted where they enter VectorServiceError, so nx search, nx doc and the doctor log line no longer echo a rejected credential (nexus-8ooxn, nexus-hcy4w).
  • The upgrade-finish stamp is written only by a managed install (nexus-i24r4).
  • Session end reaps stale t1_mint lock litter (nexus-fjwk7).
  • Aspects cost banner and nx dt index page-coverage follow-ups after review (nexus-i0cwh).

Plugin (live at this pin)

  • pre_close_verification_hook.sh tokenizes the close command quote-aware (nexus-fv65m).
  • rdr_hook.py asks the T3 client for collection existence, logs resolution failures, 4 s deadline (nexus-owna8).
  • 27 skills, agents and commands name a subject collection instead of the knowledge placeholder (nexus-fjc8v).

Developer workflow

  • scripts/git-push-develop.sh vouched push; policy hook rules for foreign-tip amend and bare develop push (nexus-9wxu6).
  • pytest refuses once, or waits on NX_BUILD_LEASE_WAIT, while a Maven run holds the shared build lease; --shakeout and gc-ab wait on it (nexus-pv93h).
  • Engine-floor pin derived from the CHANGELOG pairing; stale-dim count pins tally code lines only (nexus-9gggv).

Battery: runs on this tree once the shared build lease frees (RDR-204 full suite holds it); results follow in a comment before merge.

A pipeline buffer written before pages_with_text existed now reads as
unverified, never as a 100% gap: the field stays None end to end when the
extraction metadata lacks it. A MinerU batch names every page it covers
(page_numbers) so the collector counts the whole batch, not its first
page. A DEVONthink record with no usable pageCount is tallied as
unverified with its own reason instead of vanishing from the summary.
DEVONthink's record name becomes the catalog title beside url and year,
which the bead's acceptance names. The failure message names the oracle
it uses.
…d pages_with_text (nexus-i0cwh)

The fake pipeline reports no extraction stats, so pages_with_text is None
(unverified), and the empty-meta shape carries page_count 0 and an empty
pages_with_text list.
…th_text None (nexus-i0cwh)

The fake pipeline reports no extraction stats; the dict index_pdf builds
on the streaming path carries pages_with_text None (unverified), not an
empty list.
… on haiku, usage logged before the envelope check, extraction refusal counts orphans (nexus-oc98c, nexus-3ygp3)

Review of cc4f234 found two operator-facing strings still claiming the
ambient default model as the cost basis and the $1.18 constant still
measured on the wrong model. The constant is now the mean of three haiku
dispatches through the production prompt over real papers ($0.20), the
banner names the configured model, usage is logged before the result-key
check so a malformed envelope's spend is still recorded, and the
extraction verb's refusal names orphan aspect rows the way the audit does.
…al-mode collection token (nexus-i0cwh)

The mode-declarations census reads a cloud embedder token as a cloud_mode
claim; the fake collection list now carries the bge token, so no exclusion
entry is needed.
…oned document's chunk survives until purge-trash and the verb names it (nexus-dkymw)

tests/db/test_i711w_gap_xfails.py's integration-only gc journey still asserted the
pre-ruling contract (the tombstoned doc's chunk is an orphan and gets collected);
the alive-set change (545ed06) flipped the unit-level pins but this test runs
only under the local-service gate, where it went red on the 7.36.0 battery. It now
asserts the chunk survives and the report line counts it as tombstone-protected.
…ared checkout (nexus-9wxu6)

Every session on the box commits as the same git user, so the outbound
range origin/develop..develop cannot be attributed by author. On
2026-09-07 four pushes carried a peer's unpushed commits and one amend in
the primary rewrote a peer's commit.

scripts/git-push-develop.sh <sha>...: fetch, resolve the tip once, read
the range, push only when the range equals the vouched set; refuse
foreign, stale, diverged or unresolvable with a PUSH_REFUSED_* line.
NX_PUSH_SOURCE=HEAD pushes a detached worktree's commits and leaves the
local branch alone.

Policy hook (fixture of record tests/fixtures/hal_git_policy_hook.py):
rule 3 denies git commit --amend in the primary checkout when HEAD is not
in this session's commit record; rule 4 denies a bare git push to develop
in a repo that ships the script. The record is written by the PostToolUse
companion tests/fixtures/hal_record_session_commits_hook.py, which prefers
the sha git commit printed over a fresh rev-parse.
…ease and plugin-cut back-merges push through git-push-develop.sh (nexus-9wxu6)
…git-push-develop.sh; the refusal names the peer's commit as theirs (nexus-9wxu6)
…ed build lease or refuse once (nexus-pv93h)

The lease is shared by every worktree (nexus-g6xpa), so while any Maven
run holds it every substrate-backed test errored at setup: 1216 setup
errors in one lint-bucket run on 2026-09-07. --shakeout's native build
took the refuse-immediately acquire and exited 75 the instant a cached
gate-jar copy held the lease.

pytest: pytest_sessionstart on the xdist controller consults the lease
once. Unset NX_BUILD_LEASE_WAIT refuses the whole session with one line
and exit 75 naming the holder; NX_BUILD_LEASE_WAIT=<s> polls the holder
every 5s up to the bound, announcing once and per minute. Waiters key on
the holder pid, or the recorded build process group when present, never
on the lease path, which never disappears on its own. _boot()'s per-test
check stays as the late-race backstop. NX_TEST_T2_SUBSTRATE=none runs
are never gated.

Harnesses: run.sh --shakeout and gc-ab/run-ab.sh take
build_lease_acquire_wait like every other producer; a ratchet test
refuses any bare build_lease_acquire outside the lease library.

The lease root is resolved per call, and the freshness tests isolate
themselves from the box's lease: they read the live one and failed
whenever any Maven run held it.
…fail exemption follows its line (nexus-pv93h)
…re ratchet matches mid-line calls (nexus-pv93h)
…IT; the _boot backstop is per worker boot (nexus-pv93h)
…fjwk7, nexus-i24r4, nexus-owna8)

fv65m: the close hook tokenizes the whole command quote-aware before it
splits on operators, so a ';' or the word 'do' inside a quoted --reason
no longer breaks the quotes and harvests prose ids (a session name, a
peer's bead) as close targets; measured twice on 2026-09-07.

fjwk7: the session-end launcher runs nexus.garbage's sweep as its own
failure-isolated step, so t1_mint_<session>.lock litter older than a day
with no live lease is reaped on every session close instead of only by
nx doctor --fix.

i24r4: a run that is not a managed install no longer writes the
last_seen_version stamp; a dev checkout on a release branch used to
record its version and the next installed-tool invocation reported an
upgrade that never happened. The finish pass was already dev-guarded.

owna8: the SessionStart rdr hook asks the T3 client whether the resolved
collection exists instead of substring-matching nx collection list, and
a catalog resolution failure is logged rather than swallowed, which is
what forced the path-derived fallback whose owner id differs from the
catalog's and produced the false NOT indexed verdict.
…ies are redacted before logging (nexus-fjc8v, nexus-8ooxn, nexus-hcy4w)

fjc8v: 63 store_put / store_list examples across 26 skill, agent and
command files named collection="knowledge", and t3_collection_name
promoted that bare placeholder to knowledge__knowledge (1464 chunks live
on one tenant). The examples now read collection="<subject>", and
using-nx-skills carries the rule: a durable subject area a reader would
browse, reused before minted, per docs/collections.md.

8ooxn / hcy4w: the vector-service reachability check logged the raw
exception text, and a 401 body echoes the rejected credential; under
xdist the worker's console renderer put that structlog line into the
CliRunner output, so test_doctor_single_db_no_secret_leak failed twice
in full parallel runs and passed alone. redact_credentials replaces the
value after api_key/token/bearer/password/secret/authorization before
any of the three log calls.
…us-owna8, nexus-fv65m, nexus-8ooxn, nexus-hcy4w, nexus-fjc8v)

Reviewer and critic findings on a71c93e, 9a1d504 and 4c092e4:

- nexus-i24r4: test_cli_banner_era_survives_real_transition_order relied on a
  dev checkout writing the stamp, which the fix ended. The test now runs the
  trigger as a tool install with every leg after the stamp write stubbed;
  test_preview_never_calls_the_backfill gets the same patch its siblings had,
  so the guard no longer exits before the logic it pins.
- nexus-owna8: the SessionStart summary reports the indexer's own recursive
  document count beside the RDR count (298 documents, 215 RDRs), so the two
  numbers reconcile with the collection; the T3 existence call runs under a
  4s deadline inside the hook's 10s cap, with the listing as fallback.
- nexus-fv65m: on malformed quoting the raw-scan fallback blanks the
  --reason/--description/--notes/-m value first, so an unbalanced quote
  cannot harvest prose ids as close targets.
- nexus-8ooxn, nexus-hcy4w: redaction moves to nexus.redact and is applied
  where the service error body enters VectorServiceError's message, so
  nx search, nx doc and the doctor all see the redacted form; the regex
  leaves prose alone (the managed-service remedy's "invalid token\nthe ..."
  kept its next word).
- nexus-fjc8v: the one remaining collection="knowledge" example in
  conexus/README.md.
…; stale-dim count pins tally code lines only (nexus-9gggv)

Two pins moved by hand on every cut. The floor assertion in
test_engine_version.py hardcoded REQUIRED_ENGINE_VERSION and was edited
in every release commit (missed once, on 7.23.0). It now equals the first
engine-service-vX.Y.Z the newest released CHANGELOG.md section names,
which every release since 7.26.0 records anyway; [Unreleased] is skipped
so an engine cut ahead of the client never moves the floor, and a section
with no pairing fails loud. The comment trail stays as provenance.

The stale-dim-table count pins moved whenever a comment named a retired
table (three fix-forward commits on 2026-09-07). The pinned tally now
skips comment lines; a pin of 0 means the file's mentions are all prose
and any code hit is a violation. 56 of 70 pins regenerated from the live
code-only counts. The unlisted-file guard and the frozen-file
non-vacuity keep the raw scan.
…e CHANGELOG read names its encoding, the pairing-first convention is in the release skill (nexus-9gggv)
…module records why the classifier it declined is now a prefix heuristic (nexus-9gggv)
@Hellblazer

Copy link
Copy Markdown
Owner Author

Release battery on 1ce5407 (logs /tmp/nxb-20260908-045709-1084):

RELEASE BATTERY REPORT (logs: /tmp/nxb-20260908-045709-1084/logs)
LEG         STATUS                   WALL_S  VERDICT
artifacts   PASSED                     2079  ARTIFACTS BUILT: /tmp/nxb-20260908-045709-1084/artifacts
preflight   FAILED                      207  PINS PREFLIGHT FAILED: lint bucket
shakedown   PASSED                     1436  SHAKEDOWN PASSED: every fail-capable release-gate step is green (9/11 catalog stats is informat
lsg         PASSED                      705  [gate] LOCAL-SERVICE GATE PASSED (passed=594 skipped=35 passed-by-default=0)
pkgup       PASSED                      264  PACKAGE-UPGRADE CONVERGENCE MVV PASSED — conexus 7.35.0 + engine-service-v0.1.107 -> package-on
mvv         PASSED                      133  FRESH-INSTALL MVV PASSED — conexus 7.36.1 (LOCAL WHEEL, release-battery layer)
smoke       PASSED                       89  SMOKE PASSED: all steps green.
upshakeout  PASSED                       52  UPGRADE-SHAKEOUT PASSED — steps=12 skipped=0
genflip     PASSED                       40  GEN-FLIP LIVE-HOLDER PASSED — two real conexus generations, a live nx-mcp holder across a flip
pluginls    PASSED                       48  PLUGIN-LOCKSTEP GATE PASSED — conexus + sn 7.35.0 -> 7.36.0 via nx upgrade against the real cla
shakeout    PASSED                      179  CANDIDATE SHAKEOUT PASSED — verb matrix + incremental index + concurrent load, all against the 
candmig     NOT RUN (no changeset in service/src/main/resources/db/changelog since engine-service-v0.1.108)

gate group wall: 1436s vs serial sum 2767s (8 legs, max 4 concurrent)
battery wall: 3901s
RELEASE BATTERY FAILED: 1 red leg(s)

The one red is the preflight detector, not the tree: the lint bucket reported 1103 passed / 0 failed, a rerun in the same tree exited 0 with no match for the detector regex, and this PR's CI lint job passed on the same commit. Filed as nexus-aut8g. candmig NOT RUN is correct: no changeset since engine-service-v0.1.108. Unit suite result follows.

@Hellblazer

Copy link
Copy Markdown
Owner Author

Unit suite on 1ce5407: 17873 passed, 36 skipped, 4 xfailed, 1 failed. The failure is tests/test_sn_plugin.py::TestWorktreeDetection::test_this_repo_primary_is_not_a_worktree, which asserts the suite's own checkout is a primary; this run was from a linked worktree, so the detector was right and the non-vacuity assertion fails by environment. CI's shards passed the same commit from a primary checkout. Merging.

@Hellblazer
Hellblazer merged commit 4d91d98 into main Sep 8, 2026
24 checks passed
@Hellblazer
Hellblazer deleted the release/v7.36.1 branch September 8, 2026 13:11
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