v1.6.0 release: qualify telemetry, soak, and publish #1105
Copy link
Copy link
Open
Labels
enhancementNew feature or requestNew feature or requestserial-releaseSerialize because it changes release, gate, or final adoption postureSerialize because it changes release, gate, or final adoption posturetier:RCode Mower generated labelCode Mower generated labelv1.6Code Mower v1.6 operational clarity and minimum telemetryCode Mower v1.6 operational clarity and minimum telemetry
Milestone
Description
Part of #1066.
Goal
Qualify and publish one immutable v1.6.0 candidate after every v1.6 implementation dependency has merged.
Entry criteria
- v1.6.0: align Board inventory filters, versions, and service guidance #1063 is merged as PR v1.6: align Board inventory and service guidance #1109 (
3cfd554ec3e63356d97ea44ea7453531b9b33fbd). - v1.6.0: make audit comment ingestion payload-aware #1104 is merged as PR v1.6.0: harden audit comment ingestion #1107 (
166013b017988938d0085a870993ca975b0413dd). - v1.6.0: minimum control-surface telemetry contract and OSS emitters #921 / OSS telemetry is merged as PR v1.6.0: add minimum control-surface session summaries #1098 (9f6a89d).
- v1.6.0: minimal CodeMower.com Slack telemetry ingestion and aggregates #978 / hosted telemetry consumer is deployed from CodeMower.com PR v0.9: harden install and upgrade docs #542 (
bcddaa25c633f2dcf8fa2077d6ecb8004c1d8f88) and advertises the exact accepted contract identity. - The v1.6 epic and current-state documentation reflect the final scope (release PR Prepare v1.6.0 immutable release qualification #1110, merge
ac585cb65ab910a48866ae784e09dab193dc8ec6).
Qualification
- Built and retained one immutable source distribution and wheel from release commit
ac585cb65ab910a48866ae784e09dab193dc8ec6in first-attempt candidate run35679417608. - Run the complete CI, release-integrity, privacy, documentation, package, Graphify, Board, Slack, and cloud capability checks against that exact candidate (candidate run
35679417608, plus independent Python 3.12/3.13 installed-wheel qualification). - Run one bounded private Slack telemetry canary and reconcile local Board state with authenticated hosted totals.
- Verify the metadata-only privacy boundary, tenant isolation, capability gating, retention, export/deletion, and rollback behavior.
- Exercise clean install, v1.5.2 upgrade, rollback, basic Slack, Graphify, Board service, and public-package installation.
- Soak the retained candidate for at least 24 hours.
- Obtain two independent installation/adoption passes against the retained candidate.
- Obtain independent exact-head Code Mower release audits with every P0/P1/P2 resolved (PR Prepare v1.6.0 immutable release qualification #1110 exact reviewed head
98eea9a793cd3e2739175016693d2e447b852ac8: Claude PASS and Codex PASS). - Publish GitHub/PyPI artifacts from the retained candidate and verify public checksums and installation.
- Update release facts, release notes, current-state roadmap, and milestone/epic state.
Rollback
Retain the v1.5.2 package and documented rollback path. Production telemetry emission must remain capability-gated and independently disableable from the hosted consumer.
Delivery
This issue is serial-release work. Do not publish or enable production telemetry until all entry criteria and exact-candidate evidence are complete.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestserial-releaseSerialize because it changes release, gate, or final adoption postureSerialize because it changes release, gate, or final adoption posturetier:RCode Mower generated labelCode Mower generated labelv1.6Code Mower v1.6 operational clarity and minimum telemetryCode Mower v1.6 operational clarity and minimum telemetry
Activity
jeffhuber commentedon Sep 22, 2026
Immutable v1.6.0 candidate retained
The one allowed candidate build completed successfully on its first attempt:
ac585cb65ab910a48866ae784e09dab193dc8ec6code_mower-1.6.0-py3-none-any.whl3dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698code_mower-1.6.0.tar.gz58165ebc84eb31f6444d7865d2b803e782f21cd168b7fa3cb08b493b77346ce47b442c53fd6260a2288722f1afbaca0c863f25147b298513de0e17989b9668f18c782062b00b80f2e745a8c91e1fdbde01a39b2db8a68b16ef046baa3c87596frelease_candidate.py verify --require-candidatepassed against the retained download.candidate.jsonbinds version 1.6.0, PR #1110, the exact source SHA, both artifact digests, required modules/docs, and full wheel/sdist inventories.rehearsal.jsonisstatus: pass, binds the same source and wheel digest, verifies the digest-pinned v1.5.2 rollback wheel, and records ten installed-wheel rehearsals including Graphify, Slack-free defaults, state-preserving upgrade/rollback, and uninstall.No rerun will be attempted. Live Slack/capability canary, 24-hour soak, and independent adoption remain open.
jeffhuber commentedon Sep 22, 2026
Exact-candidate upgrade and rollback qualification
An independent disposable qualification passed against the retained candidate:
ac585cb65ab910a48866ae784e09dab193dc8ec63dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f469844c7082b1fec2983d85ac7ce7feb7cf54b2b7d26e020e073716614d480118147No live service, Slack workspace, provider, or paid work was used. This is upgrade/rollback evidence; it does not substitute for the retained-candidate live Slack canary or the two independent adoption passes during soak.
jeffhuber commentedon Sep 22, 2026
Exact-candidate clean/offline qualification
A separate Python 3.12.13 plain-pip run passed against the retained v1.6.0 wheel
3dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698from sourceac585cb65ab910a48866ae784e09dab193dc8ec6:code-mower --versionboth reported 1.6.0doc_refnode passed all four query types; bounded partial output stayed usable and reported truncationdispatch_authorized: falseNo provider, paid work, live Slack message, repository edit, candidate mutation, or cloud upload occurred. Together with first-attempt candidate workflow rehearsals, exact-head release audits, green Python 3.12–3.14 CI, and the independent v1.5.2 upgrade/rollback run, the complete offline candidate check row is satisfied. Live canary, privacy control exercises, soak, adoption, and publication remain separate.
jeffhuber commentedon Sep 22, 2026
Independent external installation/adoption pass 1 of 2 is complete against the retained v1.6.0 candidate.
2026.09.08-6caf4ffat launch (self-updated after the evaluation to2026.09.18-9a7762b).3dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698.code-mower 1.6.0.doc_refnode, and the v1.6 reader returned an availablecode_mower.contextPacket.v1query packet.Public-safe evidence archive SHA-256:
df631228c64e395b958d1ed51e295ad8dce18c611bd6b5d2eaa535c0197902fd; content bundle SHA-256:69587119dcf4b90a2fb61bfdcc2006e6102209d6bf44377ce75542d3d32858d6. The retained local evidence was rescanned and contains no username, home path, or original absolute candidate path.jeffhuber commentedon Sep 22, 2026
Independent external installation/adoption pass 2 of 2 is complete against the retained v1.6.0 candidate.
2.1.274.3dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698.code-mower 1.6.0.doc_refnodes. The exact v1.6 reader parsed it withoutReaderIncompatible; symbol, dependency, and impact queries were available.Transparency: the first Claude run is retained as FAIL because its prompt incorrectly required
doc_refnodes to appear in answer packets. Code Mower deliberately excludes non-code nodes from those packets. That run nevertheless demonstrated the intended #1007 behavior: a valid graph containingdoc_refparsed successfully. First-run evidence manifest SHA-256:10fe40d54ac8ec2ac677c502f1dbf05b2ddb58193d18a4093eb3f84bacdf6057; corrected sanitized evidence manifest SHA-256:e4427e3a8bfd355c412a7e88243f5ea4551edb9160b6eaefe3e1fcc2d895111b.Nonblocking adoption findings for later follow-up: group-writable Homebrew Cellar ancestry makes Graphify fail closed unless a private interpreter is used;
/tmpversus/private/tmprealpath strictness is visible on macOS;init --graphifyretains a v1.4.1 docs URL; and the combineddoctor --slack --share-safeflags are rejected even though Slack doctor output is already redacted.jeffhuber commentedon Oct 13, 2026
Bounded Slack canary — blocked before task creation
The retained v1.6.0 candidate remains unchanged at
ac585cb65ab910a48866ae784e09dab193dc8ec6(wheel SHA-2563dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698).The private production canary completed OAuth reconnection, restored the same private user/repository/channel policy, registered a ready
code_mower.supervisor.v2orchestrator, and exercised signed/codemower start code-mowercommands. The commands reached the production ingress, but the start modal did not open because the durable hosted admission exceeded Slack's acknowledgement budget under the current hosted database capacity.Observed after pausing the two background refresh jobs:
reserved_tasks=0andreserved_acu=0throughout;pg_stat_statementscounters cleared the long exporter statement, but the first post-resetslack_hosted_interaction_commitstill took about 5.9 seconds whileslack_runtime_credentialaveraged about 105 ms—longer than the 2.5-second application acknowledgement budget;enabled=false,reserved_tasks=0, andreserved_acu=0;This is a release blocker, not a failed paid provider canary. Before publication, the hosted lane should either provision enough database capacity for the durable admission path or reduce that path to a reliably sub-budget operation, then rerun the same one-task/2-ACU canary. Do not count the current run as the required successful Slack telemetry canary.
jeffhuber commentedon Oct 14, 2026
Retained-candidate Slack telemetry canary accepted
The bounded private v1.6.0 canary completed against retained source
ac585cb65ab910a48866ae784e09dab193dc8ec6and wheel SHA-2563dfa8ac0c5c72fce2d18c186153820e97e01ad35ac756cccf665b5f0e59f4698.Sanitized results:
terminated, and counts dispatch 1 / message 2 / cancel 1 / collect 0; the latest hosted summary was the sameterminatedstate with outcomecancelled;metadata_only, and remained bound to the authenticated tenant andcodemower-ai/code-mower;fresh; the one-task campaign is disabled and retains its accounting and receipts;89a700c2ba6cd099bd22cce232a9dcb88674557d: Slack hosted bridge and interaction flags are off, source-sync and staged-refresh jobs are on, the deployment is Ready, and/api/healthstill advertises the exact accepted v1 contract.The accepted terminal summary was observed at
2026-10-14T01:33:41Z. Per the immutable runbook, the post-canary soak therefore completes no earlier than2026-10-15T01:33:41Z. Publication remains blocked only on that soak, the final pre-publication recheck, and release publication/reinstall.jeffhuber commentedon Oct 14, 2026
Owner-only canary evidence has been sealed into a seven-file sanitized evidence manifest. Manifest SHA-256:
53be3acd28714a60091606ef271dfb9f53507214a3686b006e433195bc06800c. The manifest binds the retained source, candidate run, wheel/sdist digests, accepted terminal timestamp, soak boundary, and individual evidence-file digests; it contains no Slack, task, campaign, provider-session, tenant, credential, or local-path identifiers.