Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/crew/AGENT-WORKING-AGREEMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions docs/crew/CI.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand All @@ -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,
Expand Down
24 changes: 24 additions & 0 deletions docs/crew/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
32 changes: 21 additions & 11 deletions docs/crew/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
98 changes: 98 additions & 0 deletions docs/crew/verification/0007-gate-e2e-shard-relationship.md
Original file line number Diff line number Diff line change
@@ -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.