diff --git a/docs/crew/AGENT-WORKING-AGREEMENT.md b/docs/crew/AGENT-WORKING-AGREEMENT.md index dd6a8dc03b7..1da9e29de1e 100644 --- a/docs/crew/AGENT-WORKING-AGREEMENT.md +++ b/docs/crew/AGENT-WORKING-AGREEMENT.md @@ -84,6 +84,8 @@ Before a multi-step plan, confirm: - [ ] Agent-facing success = signed/published room updates where relevant - [ ] Wrong-role or out-of-scope work fails loudly or asks — not silent “done” - [ ] Docs updated only if user-visible behavior or durable rules change +- [ ] Shipped state changed (release published, slice merged, gate changed) + → update [`STATE.md`](STATE.md) in the same PR - [ ] New sticky choice → append [`DECISIONS.md`](DECISIONS.md) ## When stuck with the founder diff --git a/docs/crew/CI.md b/docs/crew/CI.md index f6603566156..00daec1e997 100644 --- a/docs/crew/CI.md +++ b/docs/crew/CI.md @@ -12,6 +12,12 @@ The gate always appears. It requires `CI Policy` and accepts a deliberately skipped conditional job only when the path classifier says that surface is unchanged. +A green `NuncioCrew Gate` is not evidence that the Desktop Smoke E2E suite +passed. + +This advisory posture is recorded in [`verification/0007`](verification/0007-gate-e2e-shard-relationship.md) +and D-032; revisit making the shards required once #109 and #110 are closed. + | Job | Runs when | Proves | | --- | --- | --- | | `CI Policy` | Always | Workflow contract and relevant-path classification | @@ -20,6 +26,7 @@ unchanged. | `buzz-acp` | `crates/buzz-acp/**`, path-dep `crates/buzz-persona/**`, root `Cargo.toml`/`Cargo.lock`, `rust-toolchain.toml`, `Justfile`, or this workflow change | ACP harness lib tests (`cargo test -p buzz-acp --lib`). Not covered by Desktop Rust — `desktop/src-tauri` does not depend on this crate | | `macOS ARM Package` | Same desktop boundary as Desktop Fast | Unsigned `aarch64-apple-darwin` Tauri package with Nuncio identity | | `Project Relay` | Project, relay, schema, or Nostr paths change | Kind `30617` local-path lifecycle against an isolated real relay | +| `Desktop Smoke E2E` | Desktop paths change | **nothing that blocks merge** — advisory (`continue-on-error`), excluded from the gate by design (#36/#37) | The PR package uses placeholder sidecars only to satisfy Tauri's packaging shape. The manual release workflow builds real sidecars, signs the app, diff --git a/docs/crew/DECISIONS.md b/docs/crew/DECISIONS.md index d99f86e6aa8..796ce092ebf 100644 --- a/docs/crew/DECISIONS.md +++ b/docs/crew/DECISIONS.md @@ -483,3 +483,27 @@ The accepted consequence: without an explicit clock input, row `age` values stay fixed until another input changes. The desktop caller passes no clock and the home surface has no ticker, so ages already only refresh when a store changes. A caller that wants clock-driven recomputation passes `now`. + +## D-031 — Keep shipped state in sync with STATE.md + +- **Status:** Accepted +- **Date:** 2026-08-10 +- **Working agreement:** [`AGENT-WORKING-AGREEMENT.md`](AGENT-WORKING-AGREEMENT.md) + +When a release is published, a slice merges, or the gate changes, update +`STATE.md` in the same PR. Repeated drift is costly because agents sequence +work from that file. Enforcement is review-visible prose, not a CI guard. + +## D-032 — Keep Desktop Smoke E2E advisory until known failures close + +- **Status:** Accepted +- **Date:** 2026-08-10 +- **Verification:** [`verification/0007`](verification/0007-gate-e2e-shard-relationship.md) + +The founder decided that Desktop Smoke E2E shards stay advisory and excluded +from `NuncioCrew Gate`. The trade-off is that `main` can merge with red E2E; +making a known-broken lane required would red-wall every desktop PR without +fixing a test. Over the last 10 `main` runs, shard 1 failed `8/8`, shard 4 +cancelled at the 30-minute timeout `8/8`, shard 3 failed `2/8`, shard 2 passed +`8/8`, and the Gate was green `10/10`. Revisit making the shards required once +#109 and #110 are closed. diff --git a/docs/crew/STATE.md b/docs/crew/STATE.md index bdfdfe39c0c..6674e67f1c9 100644 --- a/docs/crew/STATE.md +++ b/docs/crew/STATE.md @@ -69,7 +69,8 @@ Out of scope for this slice: - Identity store: existing system-Keychain service `buzz-desktop`. - Buzz and NuncioCrew must not run concurrently. - The build includes real release versions of all five agent sidecars. -- Settings displays `v0.5.3 · Local`. +- Settings displays the pinned Buzz version `v0.5.7 · Local`; the + machine-readable source is [`upstream-buzz.json`](upstream-buzz.json). - Updater configuration and updater signing are disabled for this flavor. ## Release lane @@ -91,8 +92,9 @@ Out of scope for this slice: - Safety: one global release queue, current-main-only source, monotonic rolling manifests, public versioned assets before channel advance, updater key-ID match, and explicit entitlements verification. -- Buzz source pin: `upstream-buzz.json`, currently `0.5.3` at - `3a96acea09b4a9e3f02c3a26cfb0607d2ccacf42`. +- Buzz source pin: [`upstream-buzz.json`](upstream-buzz.json), currently + `0.5.7` / `desktop-v0.5.7` at + `f167818d25dd9f03115ab907a16f07daee2ece5c`. - The protected Environment, reviewer, nine encrypted release secrets, updater public variable, and Nuncio updater keypair are configured. - Signed dry run `30537460233` and publish run `30538712572` passed. @@ -176,13 +178,20 @@ and the ## Current gate -Project-thread worktree lifecycle telemetry and UI are implemented for the -`0.0.6` candidate. The branch is not merged, `crew-v0.0.6` is not published, -and the real signed `0.0.5 → 0.0.6` updater relaunch remains the required -post-merge release verification. Worktree freshness is measured from the -thread worktree's actual `HEAD`; an unavailable fetch reports an unknown -remote distance, and lifecycle actions require both the live branch ownership -record and its durable root claim. +Releases are published through [`crew-v0.0.9`](https://github.com/Nuncio-hq/crew/releases/tag/crew-v0.0.9), +released 2026-08-07, and it is the latest release. The `0.0.6` +thread-worktree line merged and was released; it is not an in-flight +candidate. No signed updater install and relaunch has been verified on a +release pair in the repository evidence yet, so that remains a required +release verification. Worktree freshness is measured from the thread +worktree's actual `HEAD`; an unavailable fetch reports an unknown remote +distance, and lifecycle actions require both the live branch ownership record +and its durable root claim. + +Attention/recovery work is merged through #108 (`6793c86da`), #113 +(`304173e42`), and #114 (`35af74019`, the current `origin/main` head). The +roles track is issue #116, with PR #120 (`feat/issue-116-agent-roles`) open +and in flight. ## Current test gate @@ -219,7 +228,8 @@ record and its durable root claim. - Earlier focused live relay test: `1/1` passed with an isolated Buzz relay. - Typecheck, file-size gate, Biome checks, production build, and `git diff --check` passed. -- No `crew-v0.0.6` tag or public `0.0.6` artifact has been created. +- The latest published Crew release is `crew-v0.0.9` (2026-08-07); the + `crew-v0.0.6` thread-worktree release is part of that published history. - Manual release contracts: `10/10` passed. - Always-run Crew CI/local/release contracts: `20/20` passed. - Real unsigned Tauri bundle spike accepted `0.0.1-dev` and produced diff --git a/docs/crew/verification/0007-gate-e2e-shard-relationship.md b/docs/crew/verification/0007-gate-e2e-shard-relationship.md new file mode 100644 index 00000000000..e6c5cb7bb19 --- /dev/null +++ b/docs/crew/verification/0007-gate-e2e-shard-relationship.md @@ -0,0 +1,98 @@ +# Verification 0007 — Gate and Desktop Smoke E2E relationship + +- **Date:** 2026-08-10 +- **Question:** Does a green `NuncioCrew Gate` prove that Desktop Smoke E2E + passed? + +## Workflow evidence + +The answer is no. The Crew workflow documents the smoke suite as advisory: + +- `.github/workflows/nuncio-crew-ci.yml:248-251` says the suite remains + advisory while its moving failures are attributed and quarantined, keeps the + signal visible with `continue-on-error`, and explicitly says not to add the + job to `gate.needs` or `JOB_RELEVANCE` yet. +- `.github/workflows/nuncio-crew-ci.yml:252-253` names the job + `desktop-smoke-e2e`; `.github/workflows/nuncio-crew-ci.yml:257` sets a + 30-minute timeout; `.github/workflows/nuncio-crew-ci.yml:258` sets + `continue-on-error: true`; and `.github/workflows/nuncio-crew-ci.yml:262` + runs shards 1 through 4. +- `.github/workflows/nuncio-crew-ci.yml:317` defines `gate`, and + `.github/workflows/nuncio-crew-ci.yml:320` lists + `needs: [changes, desktop-fast, desktop-rust, macos-arm, project-relay, + buzz-acp]`; `desktop-smoke-e2e` is absent. +- `desktop/scripts/check-nuncio-crew-ci-results.mjs:6-12` has no + `desktop-smoke-e2e` entry in `JOB_RELEVANCE`. +- `desktop/src/testing/nuncio-crew-ci-contract.test.mjs:130-156` contract-tests + this posture. In particular, `:150` asserts that the workflow does not + consume `needs.desktop-smoke-e2e.result`, and `:155` asserts that the gate + helper has no `desktop-smoke-e2e` reference. + +This is deliberate exclusion, not a mis-reported result. The inherited +upstream workflow does the opposite: `.github/workflows/ci.yml:295` includes +`desktop-smoke-e2e` in the gate's `needs`, and `.github/workflows/ci.yml:306-307` +fails the gate when that result is not success. + +## Concrete #114 run + +Run `31362178966` was the `NuncioCrew CI` run for `35af74019` (`#114`) on +2026-08-10. `NuncioCrew Gate` succeeded at `06:38:19`; Desktop Smoke E2E shard +1 failed, shard 3 failed, shard 2 succeeded, and shard 4 was cancelled at +`07:00:04` after starting at `06:29:47` (`gh run 31362178966`). + +The strongest observation is that the gate completed 22 minutes before shard 4 +finished (`gh run 31362178966`). The gate does not wait on the smoke shards or +consume their conclusions. + +## Last 10 `main` runs + +The per-shard conclusions below are from the last 10 `NuncioCrew CI` runs on +`main`. Each row is identified by its GitHub Actions run ID. + +| Run | Head | Shard 1 | Shard 2 | Shard 3 | Shard 4 | Gate | +| --- | --- | --- | --- | --- | --- | --- | +| [`31362178966`](https://github.com/Nuncio-hq/crew/actions/runs/31362178966) | `35af74019` (#114) | failure | success | failure | cancelled | success | +| [`31351537772`](https://github.com/Nuncio-hq/crew/actions/runs/31351537772) | `06107122b` (#115) | skipped (docs-only) | — | — | — | success | +| [`31325507788`](https://github.com/Nuncio-hq/crew/actions/runs/31325507788) | `304173e42` (#113) | failure | success | failure | cancelled | success | +| [`31317585196`](https://github.com/Nuncio-hq/crew/actions/runs/31317585196) | `6793c86da` (#108) | failure | success | success | cancelled | success | +| [`31263949909`](https://github.com/Nuncio-hq/crew/actions/runs/31263949909) | `e41a1a6a4` (#107) | failure | success | success | cancelled | success | +| [`31258634798`](https://github.com/Nuncio-hq/crew/actions/runs/31258634798) | `a74a18fc3` (#106) | failure | success | success | cancelled | success | +| [`31256878409`](https://github.com/Nuncio-hq/crew/actions/runs/31256878409) | `820146681` (#103) | failure | success | success | cancelled | success | +| [`31253637576`](https://github.com/Nuncio-hq/crew/actions/runs/31253637576) | `bf9260544` (#101) | failure | success | success | cancelled | success | +| [`31251678176`](https://github.com/Nuncio-hq/crew/actions/runs/31251678176) | `f1b1eb485` (#100) | skipped (non-desktop) | — | — | — | success | +| [`31188797720`](https://github.com/Nuncio-hq/crew/actions/runs/31188797720) | `c1bffec27` (#98) | failure | success | success | cancelled | success | + +Across the eight desktop-touching runs, shard 1 failed `8/8`, shard 4 +cancelled at the 30-minute timeout `8/8`, shard 3 failed `2/8`, shard 2 passed +`8/8`, and `NuncioCrew Gate` succeeded `10/10` (`gh run 31362178966`, +`31325507788`, `31317585196`, `31263949909`, `31258634798`, `31256878409`, +`31253637576`, `31251678176`, `31188797720`, and `31351537772`). + +Issue [#109](https://github.com/Nuncio-hq/crew/issues/109) records shard 4's +timing-out specs as upstream-owned at `desktop-v0.5.7`; the Crew-only +`project-outcomes.spec.ts` is not among them. Issue +[#110](https://github.com/Nuncio-hq/crew/issues/110) tracks shard 1's hard +failure at `channels.spec.ts:500`, which has failed since `25263120e` (#96). + +The run history establishes the timeout pattern, but this record does not +claim a count of tests executed before shard 4 was killed. That count is not +needed to establish the gate relationship and is not present in the supplied +run conclusions. + +## Open input + +PR #114 merged without a separate published flake-versus-real triage of its +shard 1 and shard 3 failures (`gh run 31362178966`). Shard 1 matches the +`channels.spec.ts:500` signature tracked by issue +[#110](https://github.com/Nuncio-hq/crew/issues/110), which predates #114. +Phase 04 should treat this as the one open triage input; the workflow-config +half of this audit is complete. + +## Verdict + +**PASS.** The Crew gate excludes Desktop Smoke E2E by design, the exclusion is +contract-tested, and the upstream contrast is explicit. The defect found here +was the documentation gap: `docs/crew/CI.md:15-23` listed the gate jobs without +mentioning Desktop Smoke E2E. This record and the CI table now state that a +green `NuncioCrew Gate` is not E2E evidence. The founder's decision to keep +the shards advisory is recorded in D-032.