From 0783364977147c1fb2cdb11b1820d58f40056236 Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Sun, 23 Aug 2026 00:18:45 -0600 Subject: [PATCH 1/2] docs: inventory Loop WF1 registry digests Record digest pins for the four WF1 capabilities so loop-wf1-multi-os can compose via registry_ref without waiting on a hosted loop workflow. Co-authored-by: Cursor --- AGENTS.md | 2 + docs/adr/0003-loop-wasm-from-registry-only.md | 4 +- docs/decision-log.md | 2 +- docs/loop-registry-deps.md | 64 +++++++++++++++++++ docs/specs/003-loop-wf1-reference-app/spec.md | 4 +- 5 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 docs/loop-registry-deps.md diff --git a/AGENTS.md b/AGENTS.md index dd78f5b..9a4735b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,6 +29,8 @@ gh project item-list 2 --owner traverse-framework --format json --limit 300 \ | `llm-mcp-cursor-live-smoke` | **Done** (#240) | Cursor MCP Mode A stdio evidence | | `llm-mcp-claude-live-smoke` | **Done** (#241) | Claude Desktop/Code MCP Mode A evidence | | `llm-mcp-traverse-starter-catalog` | **Blocked** | Kit IDs on MCP stdio — Traverse #865 / registry #99 | +| `loop-wf1-registry-deps` | **In Progress** | Digest inventory in `docs/loop-registry-deps.md` | +| `loop-wf1-multi-os` | Ready (after deps merge) | `apps/loop/` WF1 × 7 OS; compose via `registry_ref` | Full gap table + wave notes: [`docs/production-reference-plan.md`](docs/production-reference-plan.md). diff --git a/docs/adr/0003-loop-wasm-from-registry-only.md b/docs/adr/0003-loop-wasm-from-registry-only.md index 16c5fe1..069beac 100644 --- a/docs/adr/0003-loop-wasm-from-registry-only.md +++ b/docs/adr/0003-loop-wasm-from-registry-only.md @@ -14,9 +14,9 @@ Loop clients consume digest-pinned agents/workflows published to the Traverse re ## Consequences -- `loop-wf1-multi-os` remains `Blocked` until registry digests exist (`loop-wf1-registry-deps`). +- Capability digests for WF1 are inventoried in `docs/loop-registry-deps.md` (ticket `loop-wf1-registry-deps`); `loop-wf1-multi-os` may proceed with in-app workflow composition over those `registry_ref`s. - Matches prior `consume-product-wasm-agents` pattern. -- UI work can scaffold hosts/tests against fixtures while blocked on publish. +- A first-party registry-hosted `workflows/loop/...` publish remains optional Future work. ## Alternatives considered diff --git a/docs/decision-log.md b/docs/decision-log.md index 1a2b44a..b30ef19 100644 --- a/docs/decision-log.md +++ b/docs/decision-log.md @@ -194,7 +194,7 @@ Append-only record of design decisions for App-References. Newest sessions at th | **1a** | Shared event-fixture harness + docs | One contract for runtime + capability event → UI state mapping; CI-ready helpers | | **1b** | Apply harness to primary apps | starter, meeting-notes, doc-approval, trace-explorer green on existing platforms | | **1c** | Demo inventory | Each demo `upgrade` or `retire`; retire tickets scrub code/CI/docs; README “Retired demos” | -| **1d** | Registry dependency tracker | List WF1 capabilities / digests required from Traverse; Blocked notes until published | +| **1d** | Registry dependency tracker | `docs/loop-registry-deps.md` — WF1 capability digests published (2026-08-23); in-app workflow compose OK | | **2** | `apps/loop/` WF1, all seven OS | Digest-pinned agents; subscribe to state machine + capability events; same CI bar as starter | | **Follow-up** | meeting-notes remaining natives | iOS / macOS / Android / Windows clients | | **Later** | Loop WF3 (nudge hero) | After WF1 ref app is green | diff --git a/docs/loop-registry-deps.md b/docs/loop-registry-deps.md new file mode 100644 index 0000000..259d2c2 --- /dev/null +++ b/docs/loop-registry-deps.md @@ -0,0 +1,64 @@ +# Loop WF1 — registry dependency inventory + +**Ticket:** `loop-wf1-registry-deps` +**Governing:** Spec [`003-loop-wf1-reference-app`](specs/003-loop-wf1-reference-app/spec.md), ADR [`0003`](adr/0003-loop-wasm-from-registry-only.md) +**Inventory date:** 2026-08-23 +**Source:** local clone of `traverse-framework/registry` (`capabilities/**/contract.json` artifact digests) + +WF1 product sequence (Loop package v2): **ingest → extract → normalize → authorize** (human review is UI-only). + +## Recommended pins for App-Refs Loop clients + +| Role | Capability id | Version | Artifact digest | Release URL | +|---|---|---|---|---| +| Meeting ingest | `meeting-notes.process` | `1.3.2` | `sha256:ec192a0c2104b08bee76418c5c6d44358036568d655d8465e506858d1aaadbf2` | [wasm](https://github.com/traverse-framework/registry/releases/download/artifacts/meeting-notes.process-1.1.0/meeting-process-agent.wasm) | +| Extract action items | `core.extract-action-items` | `1.2.0` | `sha256:1f815c8debd26d9f17cc895e49154e204b05b637df6d66760c59002f1ef0a503` | [wasm](https://github.com/traverse-framework/registry/releases/download/artifacts/core.extract-action-items-1.2.0/core-extract-action-items.wasm) | +| Normalize participants | `core.normalize-participants` | `1.1.0` | `sha256:6bb5c6300710de6090c4b5f25d611a6a6af7d2dd9e1bacb3bdb01b166110b5ad` | [wasm](https://github.com/traverse-framework/registry/releases/download/artifacts/core.normalize-participants-1.1.0/core-normalize-participants.wasm) | +| Authorize | `core.authorize` | `1.2.0` | `sha256:0c318fff56a74eddfbc1ab850c25c1ba191744309984a07bd503b8cd9cb92e40` | [wasm](https://github.com/traverse-framework/registry/releases/download/artifacts/core.authorize-1.2.0/core-authorize.wasm) | + +Notes: + +- Digests were read from each version’s `contract.json` `artifact.digest` field. +- `meeting-notes.process` `1.1.0`–`1.3.2` currently share the same published artifact digest/URL (registry republish history). Prefer the newest **active** contract version (`1.3.2`) in manifests; re-verify digests before shipping if registry republishes. +- `core.extract-action-items` `1.1.0` is deprecated in-registry (honesty republish); prefer `1.2.0`. + +## Also published (not required for WF1 slice) + +The registry already contains many Loop package v2 capability ids (nudge / follow-up / escalation family) under `capabilities/core/` — e.g. `core.select-items-for-followup`, `core.generate-nudge-message`, `core.transition-action-status`. Those are **WF3+** and stay out of scope for Spec 003. + +## Remaining gaps + +| Item | Status | Impact on `loop-wf1-multi-os` | +|---|---|---| +| Capability WASM digests for WF1 four-step set | **Published** | Unblocked | +| Registry-hosted workflow id `loop.*` / `wf1` composition | **Not published** under `registry/workflows/` (only `traverse-starter`, `doc-approval`, examples today) | **Non-blocking** if Loop ships an in-app workflow JSON that `registry_ref`s the four capabilities (same pattern as other App-Refs manifests) | +| Dedicated “Loop” content group / MCP kit id | Not required by Spec 003 | Out of scope | + +## Unblock decision + +As of 2026-08-23, **capability digests required by Spec 003 FR path exist**. +`loop-wf1-multi-os` may move to **Ready**. Loop implementation should: + +1. Pin the four capabilities above via `registry_ref` + digest-synced bundles (follow `docs/runtime-bundle-sync.md` / existing sync scripts). +2. Compose WF1 in the Loop app manifest/workflow (App-Refs), not invent WASM. +3. Optionally file a **Future** Traverse/registry ticket for a first-party `workflows/loop/...` publish if we want the composition hosted upstream later. + +## Re-verification + +```bash +# From a registry checkout +python3 - <<'PY' +import json +from pathlib import Path +pins = [ + ("meeting-notes/meeting-notes.process", "1.3.2"), + ("core/core.extract-action-items", "1.2.0"), + ("core/core.normalize-participants", "1.1.0"), + ("core/core.authorize", "1.2.0"), +] +for path, ver in pins: + c = json.loads(Path(f"capabilities/{path}/{ver}/contract.json").read_text()) + art = c.get("artifact") or {} + print(c.get("id"), ver, art.get("digest"), art.get("url")) +PY +``` diff --git a/docs/specs/003-loop-wf1-reference-app/spec.md b/docs/specs/003-loop-wf1-reference-app/spec.md index 467c67d..328e048 100644 --- a/docs/specs/003-loop-wf1-reference-app/spec.md +++ b/docs/specs/003-loop-wf1-reference-app/spec.md @@ -43,9 +43,9 @@ Same bar as `traverse-starter` / `doc-approval`: - **FR-005**: README + platform table + design-language reference row updated when shipping. - **FR-006**: Unit tests use embedder test doubles only for host logic; conformance fixtures reused from the shared harness. -## Blocked until +## Registry dependencies -Digest-pinned WF1 capabilities/workflow are published to the Traverse registry (at minimum the contracts referenced by Loop package WF1, including `core.extract-action-items` 1.1.0 path, normalize, authorize, and meeting ingest dependency as applicable). Tracked by Project 2 ticket `loop-wf1-registry-deps`. +Digest pins for the WF1 capability set are inventoried in [`docs/loop-registry-deps.md`](../../loop-registry-deps.md) (ticket `loop-wf1-registry-deps`). As of 2026-08-23 the four WF1 capabilities are published with consumable digests; Loop may compose WF1 in-app via `registry_ref` until a first-party `workflows/loop/...` publish exists. ## Non-goals From 335483491722071e8e8c42bf264b92c498956e2d Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Sun, 23 Aug 2026 00:19:15 -0600 Subject: [PATCH 2/2] docs: mark loop-wf1-multi-os Ready on start plan Board note cleared; deps ticket tracked via PR #263. Co-authored-by: Cursor --- AGENTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 9a4735b..199bf72 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -29,8 +29,8 @@ gh project item-list 2 --owner traverse-framework --format json --limit 300 \ | `llm-mcp-cursor-live-smoke` | **Done** (#240) | Cursor MCP Mode A stdio evidence | | `llm-mcp-claude-live-smoke` | **Done** (#241) | Claude Desktop/Code MCP Mode A evidence | | `llm-mcp-traverse-starter-catalog` | **Blocked** | Kit IDs on MCP stdio — Traverse #865 / registry #99 | -| `loop-wf1-registry-deps` | **In Progress** | Digest inventory in `docs/loop-registry-deps.md` | -| `loop-wf1-multi-os` | Ready (after deps merge) | `apps/loop/` WF1 × 7 OS; compose via `registry_ref` | +| `loop-wf1-registry-deps` | **In Progress** | PR [#263](https://github.com/traverse-framework/reference-apps/pull/263) digest inventory | +| `loop-wf1-multi-os` | **Ready** | `apps/loop/` WF1 × 7 OS; compose via `registry_ref` | Full gap table + wave notes: [`docs/production-reference-plan.md`](docs/production-reference-plan.md).