Files
ruvnet__ruflo/Cargo.toml
T
rUv 1e64c2fd3b ADR-378/379/380: npm Trusted Publishing, statusline segments, AGNTCY/Outshift runtime integration (#2879)
* docs(adr): ADR-378/379/380 — npm trusted publishing, statusline segments, AGNTCY runtime integration

Renumbered from the original 322/323/324 (chosen when this branch was
based on an older main) — origin/main has since merged real, Accepted
ADRs at those numbers (322=metaharness-flywheel-integration,
323=typed-memory-provenance, 324=agentic-policy-engine-codex-swarm).
Content unchanged from the original commit, only the numbers and
filenames moved to the next free slot after ADR-377.

ADR-378: npm Trusted Publishing (OIDC) for CI/CD release automation,
replacing the standing NPM_TOKEN class with per-run short-lived
tokens; pairs GCP WIF for the helpers-signing-secret fetch instead of
a static service-account key.

ADR-379: optional context/session/week usage segments and extra
statusline tip lines for .claude/helpers/statusline.cjs, following
the existing CONFIG.hideCost toggle precedent; session/week/effort
default OFF pending a stdin-schema verification spike.

ADR-380: AGNTCY/Outshift runtime integration (SLIM transport, CASA
enforcement, IOC Layer 9 coordination events) as an optional,
removable augmentation per ADR-150's pattern. Companion to metaharness
repo ADR-237 (agent/adr-237-agntcy-outshift-integration branch), which
owns the build-time half (identity, OASF export, observability).

* feat(agntcy): ADR-380 scaffolding — CASA envelope, SLIM/IOC CLI verbs, Rust crate

Renumbered from the original ADR-324 (origin/main has since merged a
real, unrelated, Accepted ADR-324 — see the companion docs commit).
Content and behavior unchanged; only the ADR number/filename and every
in-file reference to it moved to ADR-380.

Implements the buildable-now portion of ADR-380 (AGNTCY/Outshift
runtime integration) as optional, removable augmentation per ADR-150's
pattern. No AGNTCY/SLIM/Outshift npm or crates.io packages exist yet
under any plausible name (verified live) — every network touchpoint is
a clearly-logged stub gated behind explicit config, never a fake
success.

- plugins/ruflo-agntcy/: CASA envelope schema (Zod) + deterministic
  compiler + enforcement gate (checkAuthorization, deny-by-default) +
  bypass-attempt tests; Ed25519-signed CASA decision receipts
  (.swarm/casa-receipts.jsonl); AGNTCY OTel span attribute constants
  this repo owns (coordination.episode, authorization.decision).
- v3/@claude-flow/cli/src/commands/agntcy/: `ruflo transport use slim`,
  `ruflo agent publish`, `ruflo swarm join <namespace>` — wired into
  the top-level command registry and into agent.ts/swarm.ts's existing
  subcommand arrays (merged alongside main's concurrently-added
  pheromoneCommand); all exit 0 with a clear message when AGNTCY/SLIM
  isn't configured (RUFLO_AGNTCY_SLIM_ENDPOINT unset).
- v3/crates/ruflo-agntcy/: Rust CasaEnvelope + check_authorization
  mirroring the TS enforcement logic exactly, LocalTransport (real,
  working, in-process) + SlimTransport stub behind a non-default
  `slim` Cargo feature. Added to the workspace; also fixed a
  pre-existing `cargo check` blocker (v3/plugins/gastown-bridge's
  nested [workspace] table conflicting with the parent workspace) by
  moving it from `members` to `exclude`.

Adversarial security review (as ADR-380 §3 requires before trusting
this gate) found and this commit fixes two real bugs in the first
pass:
- enforce.ts trusted the erased TS type instead of validating its own
  input — a non-array `allow`/`deny` collapsed `.includes()` into
  JS's substring-match overload, and a malformed `now`/`expires_at`
  silently skipped the expiry check instead of failing closed.
  checkAuthorization now runs CasaEnvelopeSchema.safeParse() on entry,
  requires an explicit timezone offset on all timestamps, and treats
  any unparseable timestamp as expired.
- compile.ts's keyword table matched bare "push"/"publish"/"release"/
  "deploy" with no contextual gate, false-permissively granting
  git.push/deployment.create for objectives like "push notification
  integration" or "review the release notes". Patterns now require a
  co-occurring contextual noun (git/commit/branch for push;
  service/app/production/version/etc. for deploy).

Deferred to a follow-up pass (documented, not silently dropped):
plugins/ruflo-agntcy has no package.json yet (this repo's plugins/
ruflo-* convention is Claude Code plugin content, not an npm
workspace package — unlike @metaharness/agntcy's sibling-package
convention on the metaharness side), so no optionalDependencies entry
was added anywhere; adding one now would reference a package shape
that doesn't exist and break installs.

Companion: metaharness repo ADR-237 (agent/adr-237-agntcy-outshift-
integration branch) — build-time half of this integration.

* docs(agntcy): fix stale companion-ADR cross-reference (metaharness ADR-237 -> ADR-240)

Metaharness's own numbering collided too (ADR-237 was already taken by
evals-math-live-gsm8k-fast-domain on their main) and got renumbered to
ADR-240 — this repo's references to it were stale.

* fix(agntcy): add missing allowed-tools frontmatter to agntcy-status skill

CI's fleet-wide SKILL.md frontmatter audit correctly flagged this —
no implicit 'all tools' is allowed. Scoped to Read since this is a
scaffolding stub (not yet implemented) that will only ever need to
inspect local package.json/config state, never execute commands.
2026-07-30 23:05:44 -04:00

25 lines
1.0 KiB
TOML

[workspace]
resolver = "2"
members = [
"v3/crates/ruflo-federation-peer",
"v3/crates/ruflo-agntcy",
]
exclude = [
"v3/plugins/gastown-bridge",
]
# ruflo is primarily TypeScript; this workspace manifest exists so the
# repo-scorecard analyzer sees ruflo's Rust components (federation peer
# binary, gastown-bridge plugin) without traversing deep subdirs.
#
# `v3/plugins/gastown-bridge` is deliberately in `exclude`, not `members`:
# it declares its own nested `[workspace]` (a separate WASM-focused
# workspace — see its own Cargo.toml) for `wasm/gastown-formula-wasm` and
# `wasm/ruvector-gnn-wasm`. Cargo refuses to resolve ANY member of this
# (parent) workspace — old or new — while a listed member path is itself
# another workspace root ("multiple workspace roots found in the same
# workspace"). `exclude` keeps the directory out of Cargo's member-set
# resolution (so `cargo check`/`cargo test` on every other crate here
# works) while still leaving it in the repo tree at the same path for the
# scorecard analyzer to find.