diff --git a/.shakedown-actions/ACTIONS.txt b/.shakedown-actions/ACTIONS.txt new file mode 100644 index 000000000..64b5b0faf --- /dev/null +++ b/.shakedown-actions/ACTIONS.txt @@ -0,0 +1,8 @@ +flows OPEN-PR fix/cli-help-shakedown-0910 .shakedown-actions/help-pr-body.md +flows OPEN-PR fix/docs-inline-model-shakedown-0910 .shakedown-actions/docs-pr-body.md +flows FILE-ISSUE .shakedown-actions/issues/llm-local.title.txt .shakedown-actions/issues/llm-local.md +flows FILE-ISSUE .shakedown-actions/issues/yaml-worker.title.txt .shakedown-actions/issues/yaml-worker.md +flows FILE-ISSUE .shakedown-actions/issues/yaml-binding.title.txt .shakedown-actions/issues/yaml-binding.md +flows FILE-ISSUE .shakedown-actions/issues/runtime-diagnostic.title.txt .shakedown-actions/issues/runtime-diagnostic.md +flows FILE-ISSUE .shakedown-actions/issues/dependency-audit.title.txt .shakedown-actions/issues/dependency-audit.md +flows FILE-ISSUE .shakedown-actions/issues/observer-origins.title.txt .shakedown-actions/issues/observer-origins.md diff --git a/.shakedown-actions/README.md b/.shakedown-actions/README.md new file mode 100644 index 000000000..1ca77dde7 --- /dev/null +++ b/.shakedown-actions/README.md @@ -0,0 +1 @@ +COMPLETED: all actions delivered by the coordinator. Do not re-run ACTIONS.txt. Actual issue/PR/comment URLs and public API verification are in evidence/shakedown-0910/DELIVERY.md and publication.json. Report PR #281 is a draft. No merge was performed. diff --git a/.shakedown-actions/docs-pr-body.md b/.shakedown-actions/docs-pr-body.md new file mode 100644 index 000000000..f3455ca03 --- /dev/null +++ b/.shakedown-actions/docs-pr-body.md @@ -0,0 +1,21 @@ +The surface docs still say all models require a project registry, contradicting #266. Document the actual split: inline named-agent models reach the live readiness probe when no `flows.json` exists, while direct step models still need an allowlist; an existing config still enforces its policy. + +Validated against `preflight.ts:180` and two actual `flows run` outcomes from the launch shakedown (both outside any config ancestry): + +```text +agent-inline.flow.yaml: EXIT 2 +REFUSED [cli_unauthenticated] Step "draft" declares CLI "claude", but "claude auth status" exited non-zero; authenticate it or repair that adapter's authentication probe. + +chained.flow.yaml with model directly on llm step: EXIT 2 +REFUSED [model_unknown] Step "extract" declares model "claude-sonnet-4-6" for CLI "claude", but it is not listed in the nearest project config (no model registry was found); add the exact model only after verifying that project is allowed to use it. +``` + +A forward-only PATH shim captured the real inline-model probe before the auth refusal: + +```text +auth status --help +-p --model claude-sonnet-4-6 --tools --no-session-persistence Reply with exactly RELAYFLOWS_MODEL_READY and nothing else. +auth status +``` + +`git diff --check` exited 0 with no output. Documentation-only change. diff --git a/.shakedown-actions/help-pr-body.md b/.shakedown-actions/help-pr-body.md new file mode 100644 index 000000000..23ddfb6b0 --- /dev/null +++ b/.shakedown-actions/help-pr-body.md @@ -0,0 +1,127 @@ +`flows --help` and `flows -h` now print one usage form per line to stdout and exit 0; unknown options still exit 2. Single-step summaries now say `(1 step)` instead of `(1 steps)`. + +Reproduced during the launch shakedown on main a42ca16. This small PR is based directly on main; it does not modify #268/#269 branches. + +Validation on this change (full captured output in the shakedown report): + +```text +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx tsc --noEmit +EXIT: 0 + +``` + +```text +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx vitest run tests/cli.test.ts +EXIT: 0 + + RUN v2.1.9 /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk + + ✓ tests/cli.test.ts (63 tests) 2691ms + ✓ flows check CLI > binds a checked relative wrapper to the flow directory for worker execution 704ms + + Test Files 1 passed (1) + Tests 63 passed (63) + Start at 16:21:14 + Duration 3.14s (transform 133ms, setup 0ms, collect 236ms, tests 2.69s, environment 0ms, prepare 34ms) + + +``` + +```text +COMMAND: node packages/sdk/dist/cli.js --help +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js -h +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js --definitely-invalid +EXIT: 2 +STDOUT: + +STDERR: +REFUSED [invalid_invocation] Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +``` + +```text +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk/dist/cli.js run /Users/khaliqgant/flows-shakedown-0910/testdata/shakedown/hello-world.flow.yaml --data-dir /tmp/rfd-96g6toyf +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.249s +STDOUT: +RUN 01M25V99YWG6MCDTKWNG9PB3HK completed (1 step) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + + +``` + +```text +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git rev-parse HEAD +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a + +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git ls-remote origin refs/heads/fix/cli-help-shakedown-0910 +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a refs/heads/fix/cli-help-shakedown-0910 + + +``` + +`cargo test -p relayflowd` exited 0. Final literal output: + +```text + +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s + + Running tests/subscription_liveness.rs (target/debug/deps/subscription_liveness-9506d11f678a9586) + +running 3 tests +test submit_event_upserts_subscription_row_and_sweep_flags_it_stale_after_budget ... ok +test stale_transition_is_journaled_as_subscription_stale_entry_in_the_last_known_run ... ok +test a_fresh_arrival_re_arms_the_latch_and_the_next_silence_can_stale_again ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Doc-tests relayflowd + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +``` diff --git a/.shakedown-actions/issues/dependency-audit.md b/.shakedown-actions/issues/dependency-audit.md new file mode 100644 index 000000000..0de177ab8 --- /dev/null +++ b/.shakedown-actions/issues/dependency-audit.md @@ -0,0 +1,41 @@ +## Summary + +**Low launch severity for this local CLI shakedown; reachability not assessed.** The documented fresh `packages/sdk` install succeeds but immediately reports `6 vulnerabilities (4 moderate, 1 high, 1 critical)`. This is visible first-build friction and merits dependency maintenance. The high/critical findings are in development tooling, not the production-only audit. + +## Repro + +From main `a42ca16` plus #268/#269, using Node 25.8.1: + +```sh +cd packages/sdk +npm ci +npm audit --json +npm audit --omit=dev --json +``` + +Install output: + +```text +added 58 packages, and audited 59 packages in 1s + +16 packages are looking for funding + run `npm fund` for details + +6 vulnerabilities (4 moderate, 1 high, 1 critical) +``` + +Full audit: `vitest` critical, `vite` high, `@vitest/mocker`, `vite-node`, `esbuild`, and `ajv` moderate. The suggested test-tooling upgrade crosses a major version to Vitest 4.1.11. Production-only audit contains just the moderate Ajv `$data` ReDoS advisory (GHSA-2g4f-4pwh-qvx6). This report does not establish exploitability or assert that `$data` is enabled. + +## Expected + +The documented clean SDK build has an evaluated dependency baseline and no unexplained high/critical install banner. + +## Suggested direction + +Evaluate compatible test-tooling and Ajv updates, capture reachability where upgrades must be deferred, and rerun the SDK tests. Do not use blanket audit suppression or `npm audit fix --force` without checking the resulting major-version changes. + +## Acceptance criteria + +- Fresh install and full/production-only audits are captured after maintenance. +- The selected dependency changes pass SDK type checks and relevant tests. +- Any remaining advisory has an explicit, evidence-based disposition. diff --git a/.shakedown-actions/issues/dependency-audit.title.txt b/.shakedown-actions/issues/dependency-audit.title.txt new file mode 100644 index 000000000..6da598f6c --- /dev/null +++ b/.shakedown-actions/issues/dependency-audit.title.txt @@ -0,0 +1 @@ +flows: fresh SDK npm ci reports six dependency advisories diff --git a/.shakedown-actions/issues/llm-local.md b/.shakedown-actions/issues/llm-local.md new file mode 100644 index 000000000..259e97ee1 --- /dev/null +++ b/.shakedown-actions/issues/llm-local.md @@ -0,0 +1,59 @@ +## Summary + +**BLOCKER for the 2026-09-11 launch's requested `llm → agent → deterministic` demo.** With a real authenticated Codex CLI, declarative YAML parks at its first `llm` step with no worker; authored TypeScript with `--local-agent` reports `unsupported_verb` for `f.llm`. A standalone TypeScript `f.agent` using the same installation succeeds, so this is not a missing provider login. + +Observed against main `a42ca16` composed with #268 `33c460a` and #269 `f3dc7ce`, on macOS arm64 / Node 25.8.1. + +## Repro + +Build kernel and SDK, then run this file outside any `flows.json` ancestry with a fresh data directory and an authenticated `codex` on PATH: + +```yaml +version: "0.1.0" +name: llm-first +steps: + - id: extract + type: llm + cli: codex + prompt: 'Return only JSON: {"message":"hello"}' + output: + type: object + required: [message] + properties: + message: {type: string} +``` + +```sh +node packages/sdk/dist/cli.js run /tmp/llm-first.flow.yaml --data-dir /tmp/llm-first-fresh +``` + +Captured from the three-step variant: + +``` +EXIT: 3 +RUN 01M25TMMN68GZPYJ7JK85CSH2B parked (0 steps) +PARKED [run_parked] Run "01M25TMMN68GZPYJ7JK85CSH2B" parked at step "extract" (llm): no worker is attached for step type "llm". +``` + +Trying the imperative path (`await f.llm(...)`) with installed `@relayflows/surface` and `flows run chained.flow.ts --local-agent --input '{}'` instead gives: + +``` +EXIT: 1 +FAILED [protocol_error] relayflowd could not complete the run request: unsupported_verb: the initial authored executor does not lower f.llm +``` + +## Expected + +The supported local CLI can execute a real `llm` request, validate its JSON output, and advance through the advertised three-step chain. If a worker must be started separately, ship and document the exact supported command and refuse before creating a run when a required executor is absent (RFC-0001 covenant 2). + +## Suggested direction + +Implement authored `f.llm` lowering and a real local LLM worker/runner path using existing kernel `llm` dispatch and typed completion. Cover the declarative entry point as well. Do not disguise this as `agent` or remove the typed gate to get a green demo. + +## Acceptance criteria + +- A documented local command runs `llm → agent → deterministic` with real provider output and a fresh data directory. +- Invalid JSON and schema mismatch fail with a typed completion reason. +- The deterministic final step consumes verified upstream data and writes the expected artifact. +- Missing runtime capabilities are reported before run submission with a concrete remediation command. +- Capture a real-provider CLI transcript; a stubbed worker alone is not acceptance evidence. diff --git a/.shakedown-actions/issues/llm-local.title.txt b/.shakedown-actions/issues/llm-local.title.txt new file mode 100644 index 000000000..4c34c1904 --- /dev/null +++ b/.shakedown-actions/issues/llm-local.title.txt @@ -0,0 +1 @@ +flows: flagship llm chain has no executable local path in YAML or TypeScript diff --git a/.shakedown-actions/issues/observer-264-comment.md b/.shakedown-actions/issues/observer-264-comment.md new file mode 100644 index 000000000..491269c4e --- /dev/null +++ b/.shakedown-actions/issues/observer-264-comment.md @@ -0,0 +1,12 @@ +Launch shakedown against #269 `f3dc7ce` found a real endpoint mismatch, independent of the stale-cookie browser issue. Please handle on the existing observer branch; this shakedown is not editing that PR. + +1. `RELAYCAST_WORKSPACE_KEY=rk_live_test flows run observer.flow.yaml` succeeds as a flow but emits `[observer] token mint failed: mint API returned HTTP 404; skipping observer link`. Default `https://agentrelay.com/v1/observer-tokens` is the dashboard origin, not the canonical API. +2. The active workspace reports `relaycastUrl: https://cast.agentrelay.com`. Setting `RELAYCAST_API_URL` to that URL makes the dummy key fail with the expected HTTP401. +3. With the existing real canonical workspace key (never logged), minting succeeds, but the CLI prints `Observer: https://cast.agentrelay.com/observer?key=ot_live_REDACTED`. +4. Actually loading that printed URL with `curl -L` returns **HTTP404**, body `{"ok":false,"error":{"code":"not_found","message":"Route not found"}}`. + +The code derives both `/v1/observer-tokens` and `/observer` from the same base. The API and dashboard are different origins in the canonical deployment. Acceptance: separate the API mint origin from the human dashboard origin, and load a freshly printed real-key URL before declaring the link delivered. Dummy-key failure must remain best-effort and leave a successful local run at exit0. + +At this tested head, `flows observer` itself is still absent (`REFUSED [invalid_invocation]`, exit2); I will retest if the follow-up lands. A first real-key mint attempt also hit HTTP429, so the final successful mint was done after backing off. + +Follow-up at `0a0bca4`: rebuilt and exercised new `flows observer` and the actual existing cloud-login store. With no env key, the default mint still404s; canonical API override mints successfully, and the printed URL still loads404. Suppressed and absent-store refusals are actionable. `npx tsc --noEmit` passes. `npx vitest run tests/observer-link.test.ts` is **34 passed / 4 failed** when composed with #268: `startCliLoopback` still binds `join(dataDir, 'relayflowd.sock')` at line74, so the CLI connects to a freshly spawned real daemon on its hashed path instead of the test loopback; expected sentinel run IDs are replaced by real ULIDs. Please reconcile test socket setup with #268 on your branch. diff --git a/.shakedown-actions/issues/observer-origins.md b/.shakedown-actions/issues/observer-origins.md new file mode 100644 index 000000000..34659e6ea --- /dev/null +++ b/.shakedown-actions/issues/observer-origins.md @@ -0,0 +1,53 @@ +## Summary + +**High launch severity; #269 remains with its existing owner.** The default API base is the dashboard origin (`https://agentrelay.com`), so minting returns 404. Overriding to the canonical API (`https://cast.agentrelay.com`) allows minting, but the generated dashboard URL uses that API origin too and also returns 404 when loaded. + +Confirmed both on initial #269 `f3dc7ce` and its on-demand/cloud-login follow-up `0a0bca4`, composed with main `a42ca16` and #268 `33c460a`. + +## Repro + +```sh +RELAYCAST_WORKSPACE_KEY=rk_live_test flows observer +``` + +``` +EXIT: 2 +REFUSED [observer_link_unavailable] mint API returned HTTP 404 +``` + +The canonical API reported by `agent-relay workspace active --json` is `https://cast.agentrelay.com`. A dummy key there gives HTTP401 as expected. With an existing real cloud-login workspace key and **no** RELAYCAST_WORKSPACE_KEY env var: + +```sh +RELAYCAST_API_URL=https://cast.agentrelay.com flows observer +``` + +``` +EXIT: 0 +https://cast.agentrelay.com/observer?key=ot_live_REDACTED +``` + +Actually loading the printed URL: + +```text +curl --max-time 15 -sS -L '' +HTTP: 404 +{"ok":false,"error":{"code":"not_found","message":"Route not found"}} +``` + +`flows run` also prints an unusable URL; a mint failure itself correctly leaves a successful deterministic run at exit0. Live credential material is intentionally redacted. + +## Expected + +Default cloud-login or explicit-key observer commands mint against the canonical API and emit a dashboard URL that actually loads. + +## Suggested direction + +Separate the mint API base and dashboard URL. Default the API to the canonical Relaycast service and the dashboard to its UI origin; respect deployment overrides independently. Do not conflate this with the separate stale-cookie fix. + +## Acceptance criteria + +- Dummy key against the default mint endpoint yields an auth failure, not 404. +- A real existing workspace key mints a URL through both `flows run` and `flows observer`. +- Load the printed URL with a browser or curl and capture a non-404 dashboard response. +- Cloud-login fallback works without exposing the admin key in URLs/logs. +- Observer failures remain nonfatal to otherwise successful runs. diff --git a/.shakedown-actions/issues/observer-origins.title.txt b/.shakedown-actions/issues/observer-origins.title.txt new file mode 100644 index 000000000..550bd97cb --- /dev/null +++ b/.shakedown-actions/issues/observer-origins.title.txt @@ -0,0 +1 @@ +flows: observer API and dashboard origins produce HTTP 404 diff --git a/.shakedown-actions/issues/runtime-diagnostic.md b/.shakedown-actions/issues/runtime-diagnostic.md new file mode 100644 index 000000000..c8fa89001 --- /dev/null +++ b/.shakedown-actions/issues/runtime-diagnostic.md @@ -0,0 +1,49 @@ +## Summary + +**High launch friction.** When a deterministic command exits nonzero, `flows run` reports only the run-level `step_failed`. The user's stderr and the actual exit code are absent, and the message gives no inspection command. A first-time author must reach into the journal to learn why a command failed. + +## Repro + +```yaml +version: "0.1.0" +name: runtime-error +steps: + - id: fail-command + type: deterministic + command: 'printf "shakedown intentional failure" >&2; exit 7' +``` + +Run with a fresh data directory: + +```sh +flows run runtime-error.flow.yaml --data-dir /tmp/runtime-error-fresh +``` + +Captured output (main `a42ca16` + #268/#269): + +```text +EXIT: 1 +STDOUT: +RUN 01M25VBQ8W3TCRWTM15KYAM7AA failed (1 steps) completionReason: step_failed + +STDERR: +WARNING [unprovable_effects] Step "fail-command" command "printf" resolves, but its effects cannot be proven before execution. +FAILED [step_failed] Run "01M25VBQ8W3TCRWTM15KYAM7AA" failed with completionReason: step_failed. +``` + +Neither `exit 7` nor `shakedown intentional failure` appears. The warning happens to name the step here, but it is unrelated to the failure and cannot substitute for a failed-step diagnostic. + +## Expected + +The refusal/failure output names the failed step and exit code, includes an appropriately bounded stderr tail, and gives an executable inspection command when additional context is available. Preserve the typed run completion reason. + +## Suggested direction + +Read the journaled failed attempt result at the CLI reporting boundary and render the already captured result, applying the project's output bounds and credential-redaction conventions. Do not re-run the command to diagnose it. + +## Acceptance criteria + +- The repro identifies `fail-command`, exit code 7, and its captured stderr. +- Successful summaries remain concise. +- `--json` exposes the same useful failure context in structured form. +- Long stderr is bounded, with clear truncation and an inspection path. diff --git a/.shakedown-actions/issues/runtime-diagnostic.title.txt b/.shakedown-actions/issues/runtime-diagnostic.title.txt new file mode 100644 index 000000000..e0f5ae2d7 --- /dev/null +++ b/.shakedown-actions/issues/runtime-diagnostic.title.txt @@ -0,0 +1 @@ +flows: failed deterministic runs hide the command exit code and stderr diff --git a/.shakedown-actions/issues/yaml-binding.md b/.shakedown-actions/issues/yaml-binding.md new file mode 100644 index 000000000..4b17329d3 --- /dev/null +++ b/.shakedown-actions/issues/yaml-binding.md @@ -0,0 +1,52 @@ +## Summary + +**BLOCKER for the requested declarative `llm → agent → deterministic` demo.** `dependsOn` orders steps, but the YAML surface has no input binding for passing a verified JSON value into a downstream instruction or deterministic command. The accepted step fields and kernel compilation expose no binding mechanism. + +This is a missing authoring capability, not a claim that a particular template syntax is promised. + +## Repro + +The launch shakedown attempted a three-step YAML flow: `extract` declares a JSON `output` schema; `draft` depends on `extract`; `write` depends on `draft`. There is no documented value-reference field. An exploratory `input: {from: first}` is refused: + +``` +REFUSED [invalid_spec] Relayflow spec is invalid: spec.steps[1]: unknown key "input" (expected one of id | type | dependsOn | verification | maxIterations | memory | requirements | command | timeoutMs) +``` + +A provider-free control using a guessed `{{steps.first.output}}` string completes but writes that exact literal to its output file: + +```yaml +version: "0.1.0" +name: binding +steps: + - id: first + type: deterministic + command: printf hello + - id: second + type: deterministic + dependsOn: [first] + command: "printf '%s' '{{steps.first.output}}' > binding-result.txt" +``` + +``` +EXIT: 0 +RUN 01M25TW2BTQ39XDNJPRN2RBA0B completed (2 steps) completionReason: success +FILE CONTENTS: {{steps.first.output}} +``` + +Again, the guessed braces syntax is not documented; this establishes that it is not an available workaround. + +## Expected + +A documented declarative binding reads a completed, verified upstream value, preserves its type, and supplies it to the next step without hand-written journal readers or shell files standing in for declared data flow. + +## Suggested direction + +Design input references at the authoring/protocol boundary with missing-reference preflight, explicit value selection, safe command argument transport, and durable provenance. Clarify how this composes with JSON Schema outputs and `dependsOn`. Avoid raw shell substitution of model output. + +## Acceptance criteria + +- A three-step YAML example passes verified `llm` JSON through an agent and writes a deterministic artifact. +- Missing step IDs/fields are refused before effects when statically knowable. +- Quotes, newlines, and shell metacharacters in upstream values remain data. +- Resume consumes the journaled output, with no duplicate upstream execution. +- Document and exercise the actual syntax through `flows run`. diff --git a/.shakedown-actions/issues/yaml-binding.title.txt b/.shakedown-actions/issues/yaml-binding.title.txt new file mode 100644 index 000000000..5070bb4d5 --- /dev/null +++ b/.shakedown-actions/issues/yaml-binding.title.txt @@ -0,0 +1 @@ +flows: declarative steps lack a supported way to consume upstream output diff --git a/.shakedown-actions/issues/yaml-worker.md b/.shakedown-actions/issues/yaml-worker.md new file mode 100644 index 000000000..f94664e8e --- /dev/null +++ b/.shakedown-actions/issues/yaml-worker.md @@ -0,0 +1,50 @@ +## Summary + +**High launch friction.** `flows run agent.flow.yaml` with an installed/authenticated CLI creates a parked run because no worker is attached. The obvious remediation, `--local-agent`, is rejected for YAML. The message gives no command for attaching a worker. The same real Codex installation succeeds through a TypeScript `f.agent` plus `--local-agent`. + +The agent-only use case is workaroundable through authored TypeScript: a real `f.agent` with `--local-agent` and `flows.json` containing `{"cli":"codex"}` completed successfully in 5.476s. This is HIGH friction for YAML, not by itself a launch BLOCKER; the separate missing `f.llm` path still blocks the flagship chain in TS. + +## Repro + +Outside any `flows.json` ancestry: + +```yaml +version: "0.1.0" +name: agent +steps: + - id: draft + type: agent + cli: codex + instruction: Reply with exactly hello. Do not use tools or modify files. + verification: {type: output_contains, value: hello} +``` + +```sh +flows run agent.flow.yaml --data-dir /tmp/yaml-agent-fresh +flows run agent.flow.yaml --local-agent --data-dir /tmp/yaml-agent-fresh-2 +``` + +Captured first command: + +``` +EXIT: 3 +RUN 01M25TMMAW07DKQCQBTTZVGZ8P parked (0 steps) +PARKED [run_parked] Run "01M25TMMAW07DKQCQBTTZVGZ8P" parked at step "draft" (agent): no worker is attached for step type "agent". +``` + +Second command exits 2 with `REFUSED [invalid_invocation] Usage: ...`. + +## Expected + +A first-time YAML author has a documented, supported way to run their agent locally, including stream/workspace capability requirements. Missing-worker diagnostics name that next command. + +## Suggested direction + +Extend the existing local agent path to declarative specs with explicit surface handling, or expose a supported worker command and document the complete run/attach/resume sequence. Do not fabricate workspace pins or silently discard declared permissions to make a run proceed. + +## Acceptance criteria + +- A fresh YAML agent flow executes through a documented CLI-only sequence with a real CLI. +- Missing-worker output supplies an actionable command. +- Unsupported workspace/permission combinations fail closed. +- Auth and model preflight still happen before agent execution. diff --git a/.shakedown-actions/issues/yaml-worker.title.txt b/.shakedown-actions/issues/yaml-worker.title.txt new file mode 100644 index 000000000..940f57da4 --- /dev/null +++ b/.shakedown-actions/issues/yaml-worker.title.txt @@ -0,0 +1 @@ +flows: YAML agent runs park without a supported local-worker command diff --git a/.shakedown-actions/report-pr-body.md b/.shakedown-actions/report-pr-body.md new file mode 100644 index 000000000..03f2e53e8 --- /dev/null +++ b/.shakedown-actions/report-pr-body.md @@ -0,0 +1,5 @@ +The six-flow launch shakedown found two blockers for the requested flagship demo: local LLM execution is unavailable in both YAML and TypeScript, and YAML lacks upstream-output bindings. The report records the exact failures alongside passing deterministic/deep-cwd runs and a real Codex TypeScript agent run. + +Findings are filed as #273–#278; small help/summary and model-registry documentation fixes are in #279 and #280. The latest #269 observer/cloud-login follow-up was exercised: token minting works with the canonical API override, but the printed dashboard URL returns HTTP 404. Its test suite also fails 4/38 when composed with #268; that evidence was posted to #264 for the existing owner. + +Validation and literal output are included: kernel release and SDK builds pass; the initial composed TypeScript/Rust checks pass; the CLI fix passes TypeScript, Rust, and all 63 existing CLI tests. The late observer suite failure is recorded explicitly. This draft PR changes only documentation, captured evidence, and the completed publication handoff; no in-flight feature branch was modified. Launch-ready verdict remains NO. diff --git a/SHAKEDOWN-REPORT.md b/SHAKEDOWN-REPORT.md new file mode 100644 index 000000000..8f23d2609 --- /dev/null +++ b/SHAKEDOWN-REPORT.md @@ -0,0 +1,58 @@ +# Launch-ready? NO + +The requested flagship **`llm → agent → deterministic` flow remains blocked**: the local CLI has no working LLM execution path, and declarative YAML has no supported upstream-output binding. A real observer token also produces a URL that returns HTTP 404. This verdict applies to the tested launch composition, not just unpatched main. + +**Publication complete:** [six issues #273–#278](https://github.com/AgentWorkforce/flows/issues/273), fix PRs [#279](https://github.com/AgentWorkforce/flows/pull/279) and [#280](https://github.com/AgentWorkforce/flows/pull/280), and **draft report PR [#281](https://github.com/AgentWorkforce/flows/pull/281)** are open. The coordinator completed these writes through an authenticated session after local `gh` attempts returned HTTP401. Their URLs, open states, fix head SHAs, and the report's draft flag were independently checked through GitHub's public API; [captured publication metadata](evidence/shakedown-0910/publication.json). The failed local attempts remain as historical evidence. No product blocker is resolved merely by filing its issue; a human still merges. + +## Tested substrate and build + +Session: 2026-09-10, beginning 14:06 UTC, macOS arm64, Node v25.8.1. Source checkout: `/Users/khaliqgant/flows-shakedown-0910`, isolated from the coordinator's detached checkout. The run build composes: + +- main `a42ca16` (includes inline named-agent model fix #266). +- #268 `33c460a9e21502f4a9aa56d0e886376bb5520c58`. +- #269 `f3dc7ce1a05743901149079a18deba9a19fce67c` for the initial six-flow sweep; follow-up observer checks rebuilt its new head `0a0bca44e460167951457371fd723c60aebf4303`. + +Both feature PRs were open at the captured API check. Their branches were not modified. This report branch is based directly on main and carries only the report and evidence, not those feature commits. Fix branches are independently based on main. + +The exact requested kernel release build, SDK `npm ci`, and SDK build exited 0. `npm ci` printed six dependency advisories; production-only audit narrowed that to one moderate Ajv advisory. The high/critical findings are development tooling, and exploitability was not assessed. The verification command `node packages/sdk/dist/cli.js --help` exposed the first product friction: it exited 2 with one flattened `REFUSED` usage message. [Kernel build](evidence/shakedown-0910/build-kernel.txt), [install](evidence/shakedown-0910/npm-ci.txt), [SDK build](evidence/shakedown-0910/build-sdk.txt), [original help](evidence/shakedown-0910/help.txt), [full audit](evidence/shakedown-0910/npm-audit-full.json), [production audit](evidence/shakedown-0910/npm-audit-production.json). + +On the composed source, `npx tsc --noEmit` and `cargo test -p relayflowd` exited 0. Before the code-fix commit, those required checks also exited 0 in its main-based checkout, together with all 63 existing CLI tests. Literal output and commands: [composition TypeScript](evidence/shakedown-0910/substrate-tsc.txt), [composition Rust](evidence/shakedown-0910/substrate-cargo-tests.txt), [fix TypeScript](evidence/shakedown-0910/help-tsc.txt), [fix Rust](evidence/shakedown-0910/help-cargo-tests.txt), [63 CLI tests](evidence/shakedown-0910/help-cli-tests.txt). + +The #269 follow-up arrived during final review. Its SDK build and TypeScript check passed, but its observer test file **did not pass** on the #268 composition: **34 passed / 4 failed**. The test helper still binds `/relayflowd.sock` at `observer-link.test.ts:74`; the CLI uses #268's hashed socket and starts a real daemon instead, so the tests receive real ULIDs rather than their expected sentinel run IDs. This combination failure is reported to the existing owner and left unfixed here. [Follow-up build](evidence/shakedown-0910/followup-build.txt), [TypeScript](evidence/shakedown-0910/followup-tsc.txt), [literal failing tests](evidence/shakedown-0910/followup-observer-tests.txt). + +## Six flow outcomes + +**1. `hello-world.flow.yaml`.** A single `deterministic` step with `command: printf hello` ran immediately with no external dependencies, exit 0, in 0.591s. The CLI printed `RUN 01M25TFA3YGC4YX7YT8FV8V32Q completed (1 steps) completionReason: success`. The status and reason are readable, but the grammar was wrong; the fix branch now prints `(1 step)`. The command's `hello` output is captured rather than echoed by the declarative CLI, and even this trivial command produces an `unprovable_effects` warning. That warning is existing preflight policy, not evidence of a failed run. [Original run](evidence/shakedown-0910/hello-world.txt), [fixed singular summary](evidence/shakedown-0910/help-singular-summary.txt). + +**2. `agent-inline.flow.yaml`.** The required `agents: { drafter: { cli: claude, model: claude-sonnet-4-6 } }` map works through model resolution without a `flows.json`. The first attempt from `testdata/shakedown` inherited the repo's `testdata/flows.json` and correctly refused its unlisted model, so the actual no-config check copied the flow into a fresh temporary project and verified that no ancestor had `flows.json`. That run reached the real Claude model probe and then refused with `cli_unauthenticated`: this host has no Claude login. A forward-only PATH logger confirmed the exact model flag before any task execution; it did not simulate CLI responses. The diagnostic names the step, CLI, auth command, and remedy. This establishes #266's probe path, **not a successful Claude task**. Supplemental real Codex YAML passed auth but parked without an agent worker; `--local-agent` is rejected for YAML. A separate TypeScript `f.agent` with `--local-agent` ran the real authenticated Codex successfully in 5.476s and printed `hello`. [Inherited-config refusal](evidence/shakedown-0910/agent-inline.txt), [no-config probe](evidence/shakedown-0910/agent-inline-isolated.txt), [ancestry check](evidence/shakedown-0910/config-ancestry.txt), [probe argv](evidence/shakedown-0910/agent-probe-argv.txt), [YAML parked](evidence/shakedown-0910/agent-codex.txt), [YAML local flag refusal](evidence/shakedown-0910/agent-inline-local.txt), [real TS agent](evidence/shakedown-0910/agent-typescript-codex.txt). + +**3. `deep-cwd.flow.yaml`.** The deterministic source was run as `hello-world.flow.yaml`, matching the requested command, in a local clone at `~/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/`; it succeeded. That literal directory alone does not exceed this host's socket limit, so a nested `first-time-author-prospect-example` directory raised the old default socket path to **117 bytes**. With #268, a fresh default-data-dir run and resume both exited 0. A main-based SDK/kernel negative control in the same deep directory exited 2 with `path must be shorter than SUN_LEN`. The actual connection file points to the hashed socket under the macOS temporary directory. This is positive and negative runtime evidence for #262/#268, not merely a long-directory smoke. [Requested directory](evidence/shakedown-0910/deep-cwd.txt), [117-byte run](evidence/shakedown-0910/deep-over-sun-len.txt), [resume](evidence/shakedown-0910/deep-resume.txt), [main failure](evidence/shakedown-0910/deep-main-baseline.txt), [socket paths](evidence/shakedown-0910/deep-socket-path.txt). + +**4. `chained.flow.yaml`.** The three steps are a JSON-schema `llm`, a dependent `agent`, and a dependent file-writing deterministic command. An initial attempt to select a named `agent` on the `llm` step was correctly refused with an allowed-field list. After using explicit `cli`/`model` there, the no-config flow hit the separate rule that direct step models still need a registry. An authenticated Codex variant without explicit model reached the actual runtime and parked at `extract`, with no LLM worker. The installed TypeScript surface was then tried with the proper tagged-template `f.llm` syntax; it exited 1: `unsupported_verb: the initial authored executor does not lower f.llm`. Thus the flagship artifact was **not produced**, and the typed-output gate was **not validated end to end**. Separately, `dependsOn` provides ordering but no value binding: an exploratory `input` field is refused, and a provider-free control writes the guessed `{{steps.first.output}}` expression literally. That braces syntax is not documented; its literal handling is evidence of a missing available binding, not a claim of a broken promised syntax. [Initial shape refusal](evidence/shakedown-0910/chained.txt), [direct-model policy](evidence/shakedown-0910/chained-valid-isolated.txt), [YAML runtime](evidence/shakedown-0910/chained-codex.txt), [TS runtime](evidence/shakedown-0910/chained-typescript-resolved.txt), [input refusal](evidence/shakedown-0910/yaml-input-field.txt), [binding control](evidence/shakedown-0910/yaml-binding.txt), [literal artifact](evidence/shakedown-0910/yaml-binding-result.txt). + +**5. `error-path.flow.yaml`.** `cli: claudee` was refused before a run with `cli_missing`, naming both `broken` and the misspelled CLI. A nonexistent dependency was refused with `step "broken" dependsOn unknown step "does-not-exist"`. Both messages are actionable without reading source. A supplemental runtime failure (`printf "shakedown intentional failure" >&2; exit 7`) did fail closed with exit 1 / `completionReason: step_failed`, but the CLI hid both exit code 7 and the stderr message, and supplied no inspection command. That is a separate high-severity diagnostic gap. [Typo refusal](evidence/shakedown-0910/error-path.txt), [dependency refusal](evidence/shakedown-0910/error-dependency.txt), [runtime diagnostic](evidence/shakedown-0910/runtime-error.txt). + +**6. `observer.flow.yaml`.** With dummy `rk_live_test` and the default base, the local run completed but minting returned HTTP 404. The active canonical workspace reports `https://cast.agentrelay.com` as its API; overriding `RELAYCAST_API_URL` to that origin gives the expected HTTP 401 for the dummy key. After an initial real-key HTTP 429 and backoff, the existing canonical key successfully minted a URL and the CLI printed `Observer: https://cast.agentrelay.com/observer?key=ot_live_REDACTED`. **Actually loading that printed URL with `curl -L` returned HTTP 404**, with `Route not found`. API minting and dashboard hosting require different origins; the standalone dashboard at `https://agentrelay.com/observer` returned HTTP200. [Dashboard-origin check](evidence/shakedown-0910/observer-dashboard-origin.txt). Live credential material is redacted in all committed evidence. At initial #269 head `f3dc7ce`, `flows observer` and the cloud-login alternative were absent. The follow-up `0a0bca4` arrived and was rebuilt/retested: the on-demand verb now works, and without any env key it reads the real existing cloud-login workspace key. With the canonical API override it mints successfully, but its printed URL **still loads 404**. With default settings it reports mint HTTP404. Missing-store and explicitly suppressed cases return useful `observer_link_unavailable` refusals. The owner/coordinator was notified; no edits were made to #269 or the stale-cookie fix. [Follow-up default](evidence/shakedown-0910/observer-followup-cloud-default.txt), [cloud-key mint](evidence/shakedown-0910/observer-followup-cloud-canonical.txt), [actual follow-up URL load](evidence/shakedown-0910/observer-followup-cloud-canonical-http.txt), [missing store](evidence/shakedown-0910/observer-followup-no-store.txt), [suppressed](evidence/shakedown-0910/observer-followup-suppressed.txt), [run fallback](evidence/shakedown-0910/observer-followup-run-cloud.txt). [Default dummy](evidence/shakedown-0910/observer-dummy.txt), [canonical dummy](evidence/shakedown-0910/observer-dummy-canonical-api.txt), [real mint](evidence/shakedown-0910/observer-live.txt), [actual URL load](evidence/shakedown-0910/observer-live-http.txt), [on-demand verb](evidence/shakedown-0910/observer-verb.txt). + +## Friction inventory + +The coordinator filed the findings and opened the PRs from the committed action files. Links below identify the actual GitHub objects; captured local HTTP401 failures document the delivery friction that was overcome. + +- **BLOCKER — No local LLM execution path:** YAML parks; authored TS rejects `f.llm`. **Filed [#273](https://github.com/AgentWorkforce/flows/issues/273).** +- **BLOCKER — No declarative upstream-output binding:** the requested typed chain cannot pass values between steps. **Filed [#275](https://github.com/AgentWorkforce/flows/issues/275).** +- **High — YAML agent has no supported local-worker CLI sequence:** auth succeeds, run parks; obvious `--local-agent` remedy is rejected. **Filed [#274](https://github.com/AgentWorkforce/flows/issues/274).** +- **High — Observer endpoint/origin mismatch:** default mint is 404; successful canonical mint prints a dashboard URL that is also 404. Tracked with existing [#264](https://github.com/AgentWorkforce/flows/issues/264) / [#269](https://github.com/AgentWorkforce/flows/pull/269), branch left to its owner. **Filed [#278](https://github.com/AgentWorkforce/flows/issues/278)** and [posted the evidence to #264](https://github.com/AgentWorkforce/flows/issues/264#issuecomment-5620663794). +- **High — #269 observer test fixtures conflict with #268 socket placement:** 4 of 38 tests fail against the composed launch state. **Reported to the existing owner in [the #264 comment](https://github.com/AgentWorkforce/flows/issues/264#issuecomment-5620663794)**, with [literal failures](evidence/shakedown-0910/followup-observer-tests.txt). The coordinator acknowledged responsibility for the composed-branch retest/fix. +- **High — Runtime failure hides exit code and stderr:** only a run-level failure reason is shown. **Filed [#276](https://github.com/AgentWorkforce/flows/issues/276).** +- **High on main; fixed in the tested composition — Deep directories prevent daemon startup:** [#262](https://github.com/AgentWorkforce/flows/issues/262), fixed by existing [#268](https://github.com/AgentWorkforce/flows/pull/268). The shakedown independently proved run/resume success and main's failure; #268 still needs to land before a main-based release. +- **Low — Help is an error, usage is flattened, and one-step summaries say “1 steps”:** **fixed and pushed**, commit `179092173be91d4e4fcc9245be17371bca08360a`, [fix branch](https://github.com/AgentWorkforce/flows/tree/fix/cli-help-shakedown-0910). **PR [#279](https://github.com/AgentWorkforce/flows/pull/279)**; [push equality](evidence/shakedown-0910/help-push-verification.txt). +- **Low — Surface docs contradict #266's no-config named-model behavior:** **fixed and pushed**, commit `e88651b67401ef21a55710bc8f2ae71b2dab58b9`, [fix branch](https://github.com/AgentWorkforce/flows/tree/fix/docs-inline-model-shakedown-0910). **PR [#280](https://github.com/AgentWorkforce/flows/pull/280)**; [push equality](evidence/shakedown-0910/docs-push-verification.txt). +- **Low — Fresh install displays six dependency advisories:** high/critical findings are dev tooling; production-only audit has one moderate Ajv finding, with reachability unassessed. **Filed [#277](https://github.com/AgentWorkforce/flows/issues/277).** + +Host Claude authentication and GitHub write authentication are environment limitations, not product defects. The inherited `testdata/flows.json` refusal and `printf` effects warning are existing documented policies. The real Codex TS run prevents the Claude-login limitation from being mistaken for the general local execution gap. + +## Evidence and delivery + +[Flow source snapshots](evidence/shakedown-0910/flow-sources.md) preserve the authored inputs, including experimental and supplemental cases. The original files remain uncommitted under `testdata/shakedown/` in the substrate worktree. Every CLI run used a fresh data directory, except the deliberate resume of the already-completed deep-path run. Every verification claim above links to its literal command and output. + +[DELIVERY.md](evidence/shakedown-0910/DELIVERY.md) records the completed GitHub actions and preserves the original commands for audit, not re-execution. Local shakedown work and publication finished within the 90-minute time-box. Test daemons were stopped and their journals preserved. No workaround was committed to conceal the LLM, binding, worker, or observer defects. diff --git a/evidence/shakedown-0910/DELIVERY.md b/evidence/shakedown-0910/DELIVERY.md new file mode 100644 index 000000000..9b7cfe2a2 --- /dev/null +++ b/evidence/shakedown-0910/DELIVERY.md @@ -0,0 +1,78 @@ +# Completed GitHub delivery + +**Delivered by the coordinator's authenticated session on 2026-09-10; independently verified via the public API. Do not re-run these creation commands.** + +- LLM: [#273](https://github.com/AgentWorkforce/flows/issues/273) +- YAML worker: [#274](https://github.com/AgentWorkforce/flows/issues/274) +- YAML binding: [#275](https://github.com/AgentWorkforce/flows/issues/275) +- Runtime diagnostic: [#276](https://github.com/AgentWorkforce/flows/issues/276) +- Dependency audit: [#277](https://github.com/AgentWorkforce/flows/issues/277) +- Observer origins: [#278](https://github.com/AgentWorkforce/flows/issues/278) +- Help fix: [PR #279](https://github.com/AgentWorkforce/flows/pull/279) +- Docs fix: [PR #280](https://github.com/AgentWorkforce/flows/pull/280) +- Report: [draft PR #281](https://github.com/AgentWorkforce/flows/pull/281) +- Observer owner update: [#264 comment](https://github.com/AgentWorkforce/flows/issues/264#issuecomment-5620663794) + +The commands below and local HTTP401 transcripts are historical evidence. A human still merges. No credentials belong in this file. + +## llm-local + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: flagship llm chain has no executable local path in YAML or TypeScript' --body-file evidence/shakedown-0910/issues/llm-local.md +``` + +## yaml-worker + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: YAML agent runs park without a supported local-worker command' --body-file evidence/shakedown-0910/issues/yaml-worker.md +``` + +## yaml-binding + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: declarative steps lack a supported way to consume upstream output' --body-file evidence/shakedown-0910/issues/yaml-binding.md +``` + +## runtime-diagnostic + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: failed deterministic runs hide the command exit code and stderr' --body-file evidence/shakedown-0910/issues/runtime-diagnostic.md +``` + +## dependency-audit + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: fresh SDK npm ci reports six dependency advisories' --body-file evidence/shakedown-0910/issues/dependency-audit.md +``` + +## observer-comment + +```sh +gh issue comment 264 --repo AgentWorkforce/flows --body-file evidence/shakedown-0910/issues/observer-264-comment.md +``` + +## help-pr + +```sh +gh pr create --repo AgentWorkforce/flows --base main --head fix/cli-help-shakedown-0910 --title 'fix(cli): make help and single-step summaries readable' --body-file evidence/shakedown-0910/help-pr-body.md +``` + +## docs-pr + +```sh +gh pr create --repo AgentWorkforce/flows --base main --head fix/docs-inline-model-shakedown-0910 --title 'fix(docs): clarify inline model behavior without project config' --body-file evidence/shakedown-0910/docs-pr-body.md +``` + +## report-pr + +```sh +gh pr create --repo AgentWorkforce/flows --base main --head shakedown/v2-launch-0910 --title 'docs: report v2 launch shakedown findings and evidence' --body-file evidence/shakedown-0910/report-pr-body.md --draft +``` + +The report now links the created objects. Filing an issue does not resolve the product blocker. + +## observer-origins + +```sh +gh issue create --repo AgentWorkforce/flows --title 'flows: observer API and dashboard origins produce HTTP 404' --body-file evidence/shakedown-0910/issues/observer-origins.md +``` diff --git a/evidence/shakedown-0910/agent-codex.txt b/evidence/shakedown-0910/agent-codex.txt new file mode 100644 index 000000000..b596adde9 --- /dev/null +++ b/evidence/shakedown-0910/agent-codex.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/agent-codex.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-codex-nvv1nkt5 +ENV OVERRIDES: {} +EXIT: 3 +ELAPSED: 0.280s +STDOUT: +RUN 01M25TMMAW07DKQCQBTTZVGZ8P parked (0 steps) + +STDERR: +PARKED [run_parked] Run "01M25TMMAW07DKQCQBTTZVGZ8P" parked at step "draft" (agent): no worker is attached for step type "agent". + diff --git a/evidence/shakedown-0910/agent-inline-isolated.txt b/evidence/shakedown-0910/agent-inline-isolated.txt new file mode 100644 index 000000000..dca04d8c3 --- /dev/null +++ b/evidence/shakedown-0910/agent-inline-isolated.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-author-os52tlx5/agent-inline.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-isolated-1qq7hybc +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 1.440s +STDOUT: + +STDERR: +REFUSED [cli_unauthenticated] Step "draft" declares CLI "claude", but "claude auth status" exited non-zero; authenticate it or repair that adapter's authentication probe. + diff --git a/evidence/shakedown-0910/agent-inline-local.txt b/evidence/shakedown-0910/agent-inline-local.txt new file mode 100644 index 000000000..2db362b43 --- /dev/null +++ b/evidence/shakedown-0910/agent-inline-local.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/agent-inline.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-agent-vv7e1kt6 --local-agent +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.083s +STDOUT: + +STDERR: +REFUSED [invalid_invocation] Usage: flows check [--json] flows run [--json] [--no-spawn] [--no-observer-link] [--data-dir ] flows run --cloud [--json] [--wait] flows run [--json] [--no-spawn] [--no-observer-link] [--data-dir ] [--local-agent] --input flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] flows resume [--json] [--no-spawn] [--no-observer-link] [--data-dir ] flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + diff --git a/evidence/shakedown-0910/agent-inline.txt b/evidence/shakedown-0910/agent-inline.txt new file mode 100644 index 000000000..83fc29654 --- /dev/null +++ b/evidence/shakedown-0910/agent-inline.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/agent-inline.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-agent-bviht7sl +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.088s +STDOUT: + +STDERR: +REFUSED [model_unknown] Named agent "drafter" declares model "claude-sonnet-4-6" for CLI "claude", but it is not listed in project model registry "/Users/khaliqgant/flows-shakedown-0910/testdata/flows.json"; add the exact model only after verifying that project is allowed to use it. + diff --git a/evidence/shakedown-0910/agent-probe-argv.txt b/evidence/shakedown-0910/agent-probe-argv.txt new file mode 100644 index 000000000..e1e22f97d --- /dev/null +++ b/evidence/shakedown-0910/agent-probe-argv.txt @@ -0,0 +1,4 @@ +Forward-only PATH shim logs argv then execs the installed Claude binary. No simulated responses. +auth status --help +-p --model claude-sonnet-4-6 --tools --no-session-persistence Reply with exactly RELAYFLOWS_MODEL_READY and nothing else. +auth status diff --git a/evidence/shakedown-0910/agent-probe-trace.txt b/evidence/shakedown-0910/agent-probe-trace.txt new file mode 100644 index 000000000..9a1da5bce --- /dev/null +++ b/evidence/shakedown-0910/agent-probe-trace.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/agent-inline.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-probe-j0gpvlrc +ENV OVERRIDES: {"PATH": "/var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/opt/homebrew/bin:/Users/khaliqgant/.local/share/vite-plus/bin:/Users/khaliqgant/.local/bin:/opt/homebrew/lib/node_modules/@openai/codex/node_modules/@openai/codex-darwin-arm64/vendor/aarch64-apple-darwin/codex-path:/Users/khaliqgant/.codex/tmp/arg0/codex-arg0fApWVR:/Users/khaliqgant/.rvm/bin"} +EXIT: 2 +ELAPSED: 2.052s +STDOUT: + +STDERR: +REFUSED [cli_unauthenticated] Step "draft" declares CLI "claude", but "claude auth status" exited non-zero; authenticate it or repair that adapter's authentication probe. + diff --git a/evidence/shakedown-0910/agent-typescript-codex.txt b/evidence/shakedown-0910/agent-typescript-codex.txt new file mode 100644 index 000000000..4fe239df4 --- /dev/null +++ b/evidence/shakedown-0910/agent-typescript-codex.txt @@ -0,0 +1,16 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-ts-_nlz0z2o/agent.flow.ts --local-agent --input '{}' --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-ts-agent-jtqafc9e +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 5.476s +STDOUT: +hello + +RUN 01M25TP1V99RAKNE3GYHJDFC6X completed (2 steps) completionReason: success + +STDERR: +○ agent-1 (agent) [agent: preparing] 0.00s +WAITING [worker_lease] Run "01M25TNWT19BNW0537XV1N99SN" step "agent-1" (agent) is running under a worker lease until 1789049661559. +↻ agent-1 (agent) [agent: running] 0.13s +✓ agent-1 (agent) [agent: completed] 5.28s completionReason: success + diff --git a/evidence/shakedown-0910/build-kernel.txt b/evidence/shakedown-0910/build-kernel.txt new file mode 100644 index 000000000..caf2fcae2 --- /dev/null +++ b/evidence/shakedown-0910/build-kernel.txt @@ -0,0 +1,222 @@ +COMMAND: /Users/khaliqgant/.cargo/bin/cargo build --manifest-path kernel/Cargo.toml --release +EXIT: 0 + Downloading crates ... + Downloaded clap_lex v1.1.0 + Downloaded colorchoice v1.0.5 + Downloaded autocfg v1.5.1 + Downloaded potential_utf v0.1.6 + Downloaded zerofrom v0.1.8 + Downloaded foldhash v0.1.5 + Downloaded bytecount v0.6.9 + Downloaded ulid v1.2.1 + Downloaded ref-cast-impl v1.0.27 + Downloaded outref v0.5.2 + Downloaded clap_derive v4.6.4 + Downloaded wait-timeout v0.2.1 + Downloaded zerofrom-derive v0.1.7 + Downloaded yoke-derive v0.8.2 + Downloaded uuid-simd v0.8.0 + Downloaded once_cell v1.21.4 + Downloaded num v0.4.3 + Downloaded idna_adapter v1.2.2 + Downloaded num-iter v0.1.46 + Downloaded num-cmp v0.1.0 + Downloaded hashlink v0.10.0 + Downloaded find-msvc-tools v0.1.11 + Downloaded displaydoc v0.2.7 + Downloaded borrow-or-share v0.2.4 + Downloaded ref-cast v1.0.27 + Downloaded thiserror-impl v2.0.20 + Downloaded zmij v1.0.23 + Downloaded yoke v0.8.3 + Downloaded serde_derive v1.0.229 + Downloaded zerotrie v0.2.5 + Downloaded typenum v1.20.1 + Downloaded zerovec v0.11.8 + Downloaded serde_json v1.0.151 + Downloaded rusqlite v0.37.0 + Downloaded icu_properties_data v2.3.0 + Downloaded aho-corasick v1.1.5 + Downloaded regex v1.13.1 + Downloaded jsonschema v0.33.0 + Downloaded vcpkg v0.2.15 + Downloaded hashbrown v0.15.5 + Downloaded zerocopy v0.8.56 + Downloaded syn v3.0.4 + Downloaded syn v2.0.119 + Downloaded clap_builder v4.6.6 + Downloaded regex-syntax v0.8.11 + Downloaded fraction v0.15.4 + Downloaded fancy-regex v0.16.2 + Downloaded memchr v2.8.3 + Downloaded icu_properties v2.3.0 + Downloaded icu_collections v2.3.0 + Downloaded cc v1.4.4 + Downloaded serde v1.0.229 + Downloaded icu_normalizer v2.3.0 + Downloaded rand v0.9.5 + Downloaded num-bigint v0.4.8 + Downloaded icu_provider v2.3.1 + Downloaded icu_normalizer_data v2.3.0 + Downloaded regex-automata v0.4.18 + Downloaded icu_locale_core v2.3.0 + Downloaded bitflags v2.13.1 + Downloaded uuid v1.26.0 + Downloaded unicode-ident v1.0.24 + Downloaded smallvec v1.15.2 + Downloaded serde_core v1.0.229 + Downloaded proc-macro2 v1.0.107 + Downloaded num-complex v0.4.6 + Downloaded litemap v0.8.3 + Downloaded fluent-uri v0.3.2 + Downloaded fallible-iterator v0.3.0 + Downloaded email_address v0.2.9 + Downloaded libc v0.2.189 + Downloaded clap v4.6.6 + Downloaded bit-set v0.8.0 + Downloaded anstyle v1.0.14 + Downloaded anstream v1.0.0 + Downloaded zerovec-derive v0.11.6 + Downloaded writeable v0.6.4 + Downloaded vsimd v0.8.0 + Downloaded tinystr v0.8.4 + Downloaded thiserror v2.0.20 + Downloaded shlex v2.0.1 + Downloaded referencing v0.33.0 + Downloaded quote v1.0.47 + Downloaded pkg-config v0.3.34 + Downloaded num-integer v0.1.47 + Downloaded bit-vec v0.8.0 + Downloaded ahash v0.8.12 + Downloaded num-rational v0.4.2 + Downloaded anstyle-parse v1.0.0 + Downloaded itoa v1.0.18 + Downloaded fallible-streaming-iterator v0.1.9 + Downloaded anyhow v1.0.104 + Downloaded libsqlite3-sys v0.35.0 + Compiling proc-macro2 v1.0.107 + Compiling unicode-ident v1.0.24 + Compiling quote v1.0.47 + Compiling libc v0.2.189 + Compiling stable_deref_trait v1.2.1 + Compiling version_check v0.9.5 + Compiling cfg-if v1.0.4 + Compiling autocfg v1.5.1 + Compiling serde_core v1.0.229 + Compiling zerocopy v0.8.56 + Compiling getrandom v0.3.4 + Compiling smallvec v1.15.2 + Compiling serde v1.0.229 + Compiling writeable v0.6.4 + Compiling litemap v0.8.3 + Compiling num-traits v0.2.19 + Compiling memchr v2.8.3 + Compiling generic-array v0.14.7 + Compiling utf8_iter v1.0.4 + Compiling icu_normalizer_data v2.3.0 + Compiling icu_properties_data v2.3.0 + Compiling syn v3.0.4 + Compiling syn v2.0.119 + Compiling ref-cast v1.0.27 + Compiling synstructure v0.13.2 + Compiling num-integer v0.1.47 + Compiling parking_lot_core v0.9.12 + Compiling zmij v1.0.23 + Compiling typenum v1.20.1 + Compiling num-bigint v0.4.8 + Compiling zerofrom-derive v0.1.7 + Compiling yoke-derive v0.8.2 + Compiling aho-corasick v1.1.5 + Compiling ahash v0.8.12 + Compiling zerofrom v0.1.8 + Compiling scopeguard v1.2.0 + Compiling regex-syntax v0.8.11 + Compiling zerovec-derive v0.11.6 + Compiling displaydoc v0.2.7 + Compiling serde_derive v1.0.229 + Compiling ref-cast-impl v1.0.27 + Compiling serde_json v1.0.151 + Compiling shlex v2.0.1 + Compiling find-msvc-tools v0.1.11 + Compiling ppv-lite86 v0.2.21 + Compiling cc v1.4.4 + Compiling yoke v0.8.3 + Compiling num-rational v0.4.2 + Compiling lock_api v0.4.14 + Compiling regex-automata v0.4.18 + Compiling num-iter v0.1.46 + Compiling num-complex v0.4.6 + Compiling zerovec v0.11.8 + Compiling zerotrie v0.2.5 + Compiling rand_core v0.9.5 + Compiling bit-vec v0.8.0 + Compiling itoa v1.0.18 + Compiling pkg-config v0.3.34 + Compiling borrow-or-share v0.2.4 + Compiling vcpkg v0.2.15 + Compiling once_cell v1.21.4 + Compiling bit-set v0.8.0 + Compiling tinystr v0.8.4 + Compiling potential_utf v0.1.6 + Compiling icu_collections v2.3.0 + Compiling libsqlite3-sys v0.35.0 + Compiling icu_locale_core v2.3.0 + Compiling rand_chacha v0.9.0 + Compiling num v0.4.3 + Compiling parking_lot v0.12.5 + Compiling block-buffer v0.10.4 + Compiling crypto-common v0.1.7 + Compiling outref v0.5.2 + Compiling foldhash v0.1.5 + Compiling fluent-uri v0.3.2 + Compiling lazy_static v1.5.0 + Compiling percent-encoding v2.3.2 + Compiling utf8parse v0.2.2 + Compiling uuid v1.26.0 + Compiling vsimd v0.8.0 + Compiling thiserror v2.0.20 + Compiling icu_provider v2.3.1 + Compiling regex v1.13.1 + Compiling fancy-regex v0.16.2 + Compiling icu_normalizer v2.3.0 + Compiling icu_properties v2.3.0 + Compiling uuid-simd v0.8.0 + Compiling referencing v0.33.0 + Compiling anstyle-parse v1.0.0 + Compiling fraction v0.15.4 + Compiling hashbrown v0.15.5 + Compiling email_address v0.2.9 + Compiling digest v0.10.7 + Compiling idna_adapter v1.2.2 + Compiling rand v0.9.5 + Compiling idna v1.1.0 + Compiling thiserror-impl v2.0.20 + Compiling cpufeatures v0.2.17 + Compiling bytecount v0.6.9 + Compiling num-cmp v0.1.0 + Compiling is_terminal_polyfill v1.70.2 + Compiling colorchoice v1.0.5 + Compiling base64 v0.22.1 + Compiling anstyle v1.0.14 + Compiling anstyle-query v1.1.5 + Compiling jsonschema v0.33.0 + Compiling anstream v1.0.0 + Compiling ulid v1.2.1 + Compiling sha2 v0.10.9 + Compiling hashlink v0.10.0 + Compiling anyhow v1.0.104 + Compiling strsim v0.11.1 + Compiling heck v0.5.0 + Compiling fallible-streaming-iterator v0.1.9 + Compiling bitflags v2.13.1 + Compiling fallible-iterator v0.3.0 + Compiling clap_lex v1.1.0 + Compiling clap_derive v4.6.4 + Compiling clap_builder v4.6.6 + Compiling wait-timeout v0.2.1 + Compiling relayflowd-core v0.1.0 (/Users/khaliqgant/flows-shakedown-0910/kernel/relayflowd-core) + Compiling clap v4.6.6 + Compiling rusqlite v0.37.0 + Compiling relayflowd-journal v0.1.0 (/Users/khaliqgant/flows-shakedown-0910/kernel/relayflowd-journal) + Compiling relayflowd v0.1.0 (/Users/khaliqgant/flows-shakedown-0910/kernel/relayflowd) + Finished `release` profile [optimized] target(s) in 27.67s diff --git a/evidence/shakedown-0910/build-sdk.txt b/evidence/shakedown-0910/build-sdk.txt new file mode 100644 index 000000000..d736fd2da --- /dev/null +++ b/evidence/shakedown-0910/build-sdk.txt @@ -0,0 +1,6 @@ +COMMAND: npm run build +EXIT: 0 + +> @relayflows/sdk@2.0.8 build +> tsc && node scripts/make-cli-executable.mjs + diff --git a/evidence/shakedown-0910/chained-codex.txt b/evidence/shakedown-0910/chained-codex.txt new file mode 100644 index 000000000..bd942beb9 --- /dev/null +++ b/evidence/shakedown-0910/chained-codex.txt @@ -0,0 +1,12 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/chained-codex.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-chain-codex-6qgtqnge +ENV OVERRIDES: {} +EXIT: 3 +ELAPSED: 0.328s +STDOUT: +RUN 01M25TMMN68GZPYJ7JK85CSH2B parked (0 steps) + +STDERR: +WARNING [unprovable_effects] Step "write" command "printf" resolves, but its effects cannot be proven before execution. +PARKED [run_parked] Run "01M25TMMN68GZPYJ7JK85CSH2B" parked at step "extract" (llm): no worker is attached for step type "llm". + diff --git a/evidence/shakedown-0910/chained-typescript-resolved.txt b/evidence/shakedown-0910/chained-typescript-resolved.txt new file mode 100644 index 000000000..518f83b70 --- /dev/null +++ b/evidence/shakedown-0910/chained-typescript-resolved.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-ts-final-k7sa1iih/chained.flow.ts --local-agent --input '{}' --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-chain-final-0xeh_n9e +ENV OVERRIDES: {} +EXIT: 1 +ELAPSED: 0.230s +STDOUT: + +STDERR: +FAILED [protocol_error] relayflowd could not complete the run request: unsupported_verb: the initial authored executor does not lower f.llm + diff --git a/evidence/shakedown-0910/chained-typescript.txt b/evidence/shakedown-0910/chained-typescript.txt new file mode 100644 index 000000000..b928daf60 --- /dev/null +++ b/evidence/shakedown-0910/chained-typescript.txt @@ -0,0 +1,12 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/chained-llm.flow.ts --local-agent --input '{}' --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-chain-ts-rw7i29_t +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.191s +STDOUT: + +STDERR: +REFUSED [invalid_spec] Flow "/var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/chained-llm.flow.ts" imports @relayflows/surface, but @relayflows/surface/runtime could not be resolved from the same location: Cannot find module '@relayflows/surface/runtime' +Require stack: +- /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-more-vvv9qyb9/chained-llm.flow.ts + diff --git a/evidence/shakedown-0910/chained-valid-isolated.txt b/evidence/shakedown-0910/chained-valid-isolated.txt new file mode 100644 index 000000000..b05d60e0f --- /dev/null +++ b/evidence/shakedown-0910/chained-valid-isolated.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-author-os52tlx5/chained.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-chain-a7ks9ujy +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.114s +STDOUT: + +STDERR: +REFUSED [model_unknown] Step "extract" declares model "claude-sonnet-4-6" for CLI "claude", but it is not listed in the nearest project config (no model registry was found); add the exact model only after verifying that project is allowed to use it. + diff --git a/evidence/shakedown-0910/chained.txt b/evidence/shakedown-0910/chained.txt new file mode 100644 index 000000000..10fcfe7fb --- /dev/null +++ b/evidence/shakedown-0910/chained.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/chained.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-chained-tcxmagl0 +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.106s +STDOUT: + +STDERR: +REFUSED [invalid_spec] Relayflow spec is invalid: spec.steps[0]: unknown key "agent" (expected one of id | type | dependsOn | verification | maxIterations | memory | requirements | prompt | model | cli | output) + diff --git a/evidence/shakedown-0910/config-ancestry.txt b/evidence/shakedown-0910/config-ancestry.txt new file mode 100644 index 000000000..895f2a83b --- /dev/null +++ b/evidence/shakedown-0910/config-ancestry.txt @@ -0,0 +1,3 @@ +COMMAND: python3 -c 'from pathlib import Path; p=Path("/var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-author-os52tlx5"); found=[str(q/"flows.json") for q in [p,*p.parents] if (q/"flows.json").exists()]; print("flows.json files in tested project ancestry:", found); assert not found' +EXIT: 0 +flows.json files in tested project ancestry: [] diff --git a/evidence/shakedown-0910/deep-cwd-fresh-data.txt b/evidence/shakedown-0910/deep-cwd-fresh-data.txt new file mode 100644 index 000000000..06a3bbaca --- /dev/null +++ b/evidence/shakedown-0910/deep-cwd-fresh-data.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run hello-world.flow.yaml --data-dir /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/.relayflowd-shakedown-fresh +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.153s +STDOUT: +RUN 01M25TGV9NAQYVW79JSWPT4MP7 completed (1 steps) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + diff --git a/evidence/shakedown-0910/deep-cwd.txt b/evidence/shakedown-0910/deep-cwd.txt new file mode 100644 index 000000000..e15810afd --- /dev/null +++ b/evidence/shakedown-0910/deep-cwd.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run hello-world.flow.yaml +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.434s +STDOUT: +RUN 01M25TGV4F5FQMW183NBBFMC6E completed (1 steps) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + diff --git a/evidence/shakedown-0910/deep-main-baseline.txt b/evidence/shakedown-0910/deep-main-baseline.txt new file mode 100644 index 000000000..d81119d3b --- /dev/null +++ b/evidence/shakedown-0910/deep-main-baseline.txt @@ -0,0 +1,15 @@ +CWD: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example +COMMAND: node /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk/dist/cli.js run hello-world.flow.yaml --data-dir /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example/.relayflowd-baseline +ENV OVERRIDES: {"RELAYFLOWD_BIN": "/Users/khaliqgant/flows-help-shakedown-0910/kernel/target/debug/relayflowd"} +EXIT: 2 +ELAPSED: 0.190s +STDOUT: + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. +REFUSED [daemon_start_failed] relayflowd exited 1 during startup. Last output in "/Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example/.relayflowd-baseline/relayflowd.log": +Error: bind socket /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example/.relayflowd-baseline/relayflowd.sock + +Caused by: + path must be shorter than SUN_LEN + diff --git a/evidence/shakedown-0910/deep-over-sun-len.txt b/evidence/shakedown-0910/deep-over-sun-len.txt new file mode 100644 index 000000000..7eaea99db --- /dev/null +++ b/evidence/shakedown-0910/deep-over-sun-len.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run hello-world.flow.yaml +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.211s +STDOUT: +RUN 01M25TW1WVJSPMPTA1R9RB1V9A completed (1 steps) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + diff --git a/evidence/shakedown-0910/deep-resume.txt b/evidence/shakedown-0910/deep-resume.txt new file mode 100644 index 000000000..4662606d6 --- /dev/null +++ b/evidence/shakedown-0910/deep-resume.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js resume 01M25TW1WVJSPMPTA1R9RB1V9A +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.087s +STDOUT: +RUN 01M25TW1WVJSPMPTA1R9RB1V9A completed (1 steps) completionReason: success + +STDERR: + diff --git a/evidence/shakedown-0910/deep-socket-path.txt b/evidence/shakedown-0910/deep-socket-path.txt new file mode 100644 index 000000000..8602ebb94 --- /dev/null +++ b/evidence/shakedown-0910/deep-socket-path.txt @@ -0,0 +1,3 @@ +Legacy path bytes: 117 +Legacy path: /Users/khaliqgant/tmp/a/b/c/d/e/f/g/h/i/j/k/l/m/n/deep/first-time-author-prospect-example/.relayflowd/relayflowd.sock +Actual connection.json: {"socket_path":"/var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/relayflowd-0f60f389e97a.sock","pid":87505,"version":"0.1.0","protocol":0,"started_at_ms":1789049833320} diff --git a/evidence/shakedown-0910/delivery-dependency-audit.txt b/evidence/shakedown-0910/delivery-dependency-audit.txt new file mode 100644 index 000000000..dcb90199d --- /dev/null +++ b/evidence/shakedown-0910/delivery-dependency-audit.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: fresh SDK npm ci reports six dependency advisories' --body-file evidence/shakedown-0910/issues/dependency-audit.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-docs-pr.txt b/evidence/shakedown-0910/delivery-docs-pr.txt new file mode 100644 index 000000000..7732ad841 --- /dev/null +++ b/evidence/shakedown-0910/delivery-docs-pr.txt @@ -0,0 +1,7 @@ +COMMAND: gh pr create --repo AgentWorkforce/flows --base main --head fix/docs-inline-model-shakedown-0910 --title 'fix(docs): clarify inline model behavior without project config' --body-file evidence/shakedown-0910/docs-pr-body.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-help-pr.txt b/evidence/shakedown-0910/delivery-help-pr.txt new file mode 100644 index 000000000..47fe775cf --- /dev/null +++ b/evidence/shakedown-0910/delivery-help-pr.txt @@ -0,0 +1,7 @@ +COMMAND: gh pr create --repo AgentWorkforce/flows --base main --head fix/cli-help-shakedown-0910 --title 'fix(cli): make help and single-step summaries readable' --body-file evidence/shakedown-0910/help-pr-body.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-llm-local.txt b/evidence/shakedown-0910/delivery-llm-local.txt new file mode 100644 index 000000000..dd22eb6e6 --- /dev/null +++ b/evidence/shakedown-0910/delivery-llm-local.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: flagship llm chain has no executable local path in YAML or TypeScript' --body-file evidence/shakedown-0910/issues/llm-local.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-observer-comment.txt b/evidence/shakedown-0910/delivery-observer-comment.txt new file mode 100644 index 000000000..7946cbe26 --- /dev/null +++ b/evidence/shakedown-0910/delivery-observer-comment.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue comment 264 --repo AgentWorkforce/flows --body-file evidence/shakedown-0910/issues/observer-264-comment.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-observer-origins.txt b/evidence/shakedown-0910/delivery-observer-origins.txt new file mode 100644 index 000000000..1c75c8bfc --- /dev/null +++ b/evidence/shakedown-0910/delivery-observer-origins.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: observer API and dashboard origins produce HTTP 404' --body-file evidence/shakedown-0910/issues/observer-origins.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-report-pr.txt b/evidence/shakedown-0910/delivery-report-pr.txt new file mode 100644 index 000000000..7b9131317 --- /dev/null +++ b/evidence/shakedown-0910/delivery-report-pr.txt @@ -0,0 +1,7 @@ +COMMAND: gh pr create --repo AgentWorkforce/flows --base main --head shakedown/v2-launch-0910 --title 'docs: report v2 launch shakedown findings and evidence' --body-file evidence/shakedown-0910/report-pr-body.md --draft +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-runtime-diagnostic.txt b/evidence/shakedown-0910/delivery-runtime-diagnostic.txt new file mode 100644 index 000000000..f24ab4a48 --- /dev/null +++ b/evidence/shakedown-0910/delivery-runtime-diagnostic.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: failed deterministic runs hide the command exit code and stderr' --body-file evidence/shakedown-0910/issues/runtime-diagnostic.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-yaml-binding.txt b/evidence/shakedown-0910/delivery-yaml-binding.txt new file mode 100644 index 000000000..f40fb9c07 --- /dev/null +++ b/evidence/shakedown-0910/delivery-yaml-binding.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: declarative steps lack a supported way to consume upstream output' --body-file evidence/shakedown-0910/issues/yaml-binding.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/delivery-yaml-worker.txt b/evidence/shakedown-0910/delivery-yaml-worker.txt new file mode 100644 index 000000000..23666a4bd --- /dev/null +++ b/evidence/shakedown-0910/delivery-yaml-worker.txt @@ -0,0 +1,7 @@ +COMMAND: gh issue create --repo AgentWorkforce/flows --title 'flows: YAML agent runs park without a supported local-worker command' --body-file evidence/shakedown-0910/issues/yaml-worker.md +EXIT: 1 +STDOUT: + +STDERR: +HTTP 401: Requires authentication (https://api.github.com/graphql) +Try authenticating with: gh auth login -h github.com diff --git a/evidence/shakedown-0910/docs-pr-body.md b/evidence/shakedown-0910/docs-pr-body.md new file mode 100644 index 000000000..f3455ca03 --- /dev/null +++ b/evidence/shakedown-0910/docs-pr-body.md @@ -0,0 +1,21 @@ +The surface docs still say all models require a project registry, contradicting #266. Document the actual split: inline named-agent models reach the live readiness probe when no `flows.json` exists, while direct step models still need an allowlist; an existing config still enforces its policy. + +Validated against `preflight.ts:180` and two actual `flows run` outcomes from the launch shakedown (both outside any config ancestry): + +```text +agent-inline.flow.yaml: EXIT 2 +REFUSED [cli_unauthenticated] Step "draft" declares CLI "claude", but "claude auth status" exited non-zero; authenticate it or repair that adapter's authentication probe. + +chained.flow.yaml with model directly on llm step: EXIT 2 +REFUSED [model_unknown] Step "extract" declares model "claude-sonnet-4-6" for CLI "claude", but it is not listed in the nearest project config (no model registry was found); add the exact model only after verifying that project is allowed to use it. +``` + +A forward-only PATH shim captured the real inline-model probe before the auth refusal: + +```text +auth status --help +-p --model claude-sonnet-4-6 --tools --no-session-persistence Reply with exactly RELAYFLOWS_MODEL_READY and nothing else. +auth status +``` + +`git diff --check` exited 0 with no output. Documentation-only change. diff --git a/evidence/shakedown-0910/docs-push-verification.txt b/evidence/shakedown-0910/docs-push-verification.txt new file mode 100644 index 000000000..0aa479e0a --- /dev/null +++ b/evidence/shakedown-0910/docs-push-verification.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-docs-shakedown-0910 +COMMAND: git rev-parse HEAD +EXIT: 0 +e88651b67401ef21a55710bc8f2ae71b2dab58b9 + +CWD: /Users/khaliqgant/flows-docs-shakedown-0910 +COMMAND: git ls-remote origin refs/heads/fix/docs-inline-model-shakedown-0910 +EXIT: 0 +e88651b67401ef21a55710bc8f2ae71b2dab58b9 refs/heads/fix/docs-inline-model-shakedown-0910 + diff --git a/evidence/shakedown-0910/error-dependency.txt b/evidence/shakedown-0910/error-dependency.txt new file mode 100644 index 000000000..f12d9943f --- /dev/null +++ b/evidence/shakedown-0910/error-dependency.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/error-dependency.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-error-dependency-xj9c2889 +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.086s +STDOUT: + +STDERR: +REFUSED [invalid_spec] Relayflow spec is invalid: spec.steps: step "broken" dependsOn unknown step "does-not-exist" + diff --git a/evidence/shakedown-0910/error-path.txt b/evidence/shakedown-0910/error-path.txt new file mode 100644 index 000000000..6b3f67d0c --- /dev/null +++ b/evidence/shakedown-0910/error-path.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/error-path.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-error-path-u0qg4zxb +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.090s +STDOUT: + +STDERR: +REFUSED [cli_missing] Step "broken" declares CLI "claudee", but it does not resolve as an executable. + diff --git a/evidence/shakedown-0910/flow-sources.md b/evidence/shakedown-0910/flow-sources.md new file mode 100644 index 000000000..c4c8b1043 --- /dev/null +++ b/evidence/shakedown-0910/flow-sources.md @@ -0,0 +1,200 @@ +# Shakedown flow sources + +YAML schema version is `0.1.0`; v2 names the product/CLI generation. +These are evidence fixtures, not supported-example claims. The temporary-project copies avoid `testdata/flows.json`. + +## agent-inline.flow.yaml + +```yaml +version: "0.1.0" +name: agent-inline +agents: + drafter: + cli: claude + model: claude-sonnet-4-6 +steps: + - id: draft + type: agent + agent: drafter + instruction: Reply with exactly hello. Do not use tools or modify files. + verification: + type: output_contains + value: hello +``` + +## chained.flow.yaml + +```yaml +version: "0.1.0" +name: chained +agents: + drafter: + cli: claude + model: claude-sonnet-4-6 +steps: + - id: extract + type: llm + cli: claude + model: claude-sonnet-4-6 + prompt: 'Return only JSON: {"message":"hello"}' + output: + type: object + required: [message] + properties: + message: {type: string} + additionalProperties: false + - id: draft + type: agent + agent: drafter + dependsOn: [extract] + instruction: 'Repeat the message from this JSON as plain text: {{steps.extract.output}}. Do not use tools or modify files.' + verification: + type: output_contains + value: hello + - id: write + type: deterministic + dependsOn: [draft] + command: "printf '%s' '{{steps.draft.output}}' > shakedown-result.txt" +``` + +## deep-cwd.flow.yaml + +```yaml +version: "0.1.0" +name: deep-cwd +steps: + - id: hello + type: deterministic + command: printf hello +``` + +## error-dependency.flow.yaml + +```yaml +version: "0.1.0" +name: error-dependency +steps: + - id: broken + type: deterministic + dependsOn: [does-not-exist] + command: printf hello +``` + +## error-path.flow.yaml + +```yaml +version: "0.1.0" +name: error-path +steps: + - id: broken + type: agent + cli: claudee + instruction: Reply hello. + verification: + type: output_contains + value: hello +``` + +## hello-world.flow.yaml + +```yaml +version: "0.1.0" +name: hello-world +steps: + - id: hello + type: deterministic + command: printf hello +``` + +## observer.flow.yaml + +```yaml +version: "0.1.0" +name: observer +steps: + - id: hello + type: deterministic + command: printf hello +``` + +## Supplemental agent-codex.flow.yaml + +```yaml +version: "0.1.0" +name: agent-codex +steps: + - id: draft + type: agent + cli: codex + instruction: Reply with exactly hello. Do not use tools or modify files. + verification: {type: output_contains, value: hello} +``` + +## Supplemental agent.flow.ts + +```ts +import { flow } from '@relayflows/surface'; +export default flow('agent', async (f) => { + const answer = await f.agent('drafter', { task: 'Reply with exactly hello. Do not use tools or modify files.' }); + console.log(answer.summary); + f.done('success'); +}); +``` + +## Supplemental binding.flow.yaml + +```yaml +version: "0.1.0" +name: binding +steps: + - id: first + type: deterministic + command: printf hello + - id: second + type: deterministic + dependsOn: [first] + command: "printf '%s' '{{steps.first.output}}' > binding-result.txt" +``` + +## Supplemental chained-codex.flow.yaml + +```yaml +version: "0.1.0" +name: chained +steps: + - id: extract + type: llm + cli: codex + prompt: 'Return only JSON: {"message":"hello"}' + output: + type: object + required: [message] + properties: + message: {type: string} + additionalProperties: false + - id: draft + type: agent + cli: codex + dependsOn: [extract] + instruction: 'Repeat the message from this JSON as plain text: {{steps.extract.output}}. Do not use tools or modify files.' + verification: + type: output_contains + value: hello + - id: write + type: deterministic + dependsOn: [draft] + command: "printf '%s' '{{steps.draft.output}}' > shakedown-result.txt" +``` + +## Supplemental chained-llm.flow.ts + +```ts +import { flow } from '@relayflows/surface'; +export default flow('chained', async (f) => { + const raw = await f.llm`Return only JSON: {"message":"hello"}`; + const plan = JSON.parse(raw); + const draft = await f.agent('drafter', { task: JSON.stringify(plan) }); + await f.run(`printf '%s' '${draft.summary}' > shakedown-result.txt`); + f.done('success'); +}); +``` diff --git a/evidence/shakedown-0910/followup-build.txt b/evidence/shakedown-0910/followup-build.txt new file mode 100644 index 000000000..def1d9088 --- /dev/null +++ b/evidence/shakedown-0910/followup-build.txt @@ -0,0 +1,7 @@ +HEAD: #269 0a0bca44e460167951457371fd723c60aebf4303 composed with main/#268 +COMMAND: npm --prefix packages/sdk run build +EXIT: 0 + +> @relayflows/sdk@2.0.8 build +> tsc && node scripts/make-cli-executable.mjs + diff --git a/evidence/shakedown-0910/followup-observer-tests.txt b/evidence/shakedown-0910/followup-observer-tests.txt new file mode 100644 index 000000000..56bfa5b92 --- /dev/null +++ b/evidence/shakedown-0910/followup-observer-tests.txt @@ -0,0 +1,89 @@ +HEAD: #269 0a0bca44e460167951457371fd723c60aebf4303 composed with main/#268 +COMMAND: npx vitest run tests/observer-link.test.ts +EXIT: 1 + + RUN v2.1.9 /Users/khaliqgant/flows-shakedown-0910/packages/sdk + + ❯ tests/observer-link.test.ts (38 tests | 4 failed) 3515ms + × flows run: observer link integration > prints the Observer: line immediately after RUN when a workspace key is set 81ms + → expected -1 to be greater than or equal to 0 + × flows run: observer link integration > warns on stderr and proceeds normally when the mint API 500s 70ms + → expected false to be true // Object.is equality + × flows run: observer link integration > emits RUN before the mint resolves and appends Observer on a later line 3014ms + → expected false to be true // Object.is equality + × flows run: observer link integration > folds observerUrl into the --json payload rather than printing a bare line 108ms + → expected '01M25VR91BZCT0F5XZ4PSCF69S' to be 'run-observer-json' // Object.is equality + +⎯⎯⎯⎯⎯⎯⎯ Failed Tests 4 ⎯⎯⎯⎯⎯⎯⎯ + + FAIL tests/observer-link.test.ts > flows run: observer link integration > prints the Observer: line immediately after RUN when a workspace key is set +AssertionError: expected -1 to be greater than or equal to 0 + ❯ tests/observer-link.test.ts:515:22 + 513| expect(exit).toBe(0); + 514| const runIndex = output.stdout.findIndex((line) => line.startsWith… + 515| expect(runIndex).toBeGreaterThanOrEqual(0); + | ^ + 516| expect(output.stdout[runIndex + 1]).toBe( + 517| 'Observer: https://agentrelay.com/observer?key=ot_live_integrati… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/4]⎯ + + FAIL tests/observer-link.test.ts > flows run: observer link integration > warns on stderr and proceeds normally when the mint API 500s +AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + + ❯ tests/observer-link.test.ts:571:88 + 569| + 570| expect(exit).toBe(0); + 571| expect(output.stdout.some((line) => line.startsWith('RUN run-obser… + | ^ + 572| expect(output.stdout.some((line) => line.startsWith('Observer:')))… + 573| expect(output.stderr.some( + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/4]⎯ + + FAIL tests/observer-link.test.ts > flows run: observer link integration > emits RUN before the mint resolves and appends Observer on a later line +AssertionError: expected false to be true // Object.is equality + +- Expected ++ Received + +- true ++ false + + ❯ tests/observer-link.test.ts:673:33 + 671| const exit = await cliDone; + 672| + 673| expect(runLandedBeforeMint).toBe(true); + | ^ + 674| expect(exit).toBe(0); + 675| const runIndex = output.stdout.findIndex((line) => line.startsWith… + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/4]⎯ + + FAIL tests/observer-link.test.ts > flows run: observer link integration > folds observerUrl into the --json payload rather than printing a bare line +AssertionError: expected '01M25VR91BZCT0F5XZ4PSCF69S' to be 'run-observer-json' // Object.is equality + +Expected: "run-observer-json" +Received: "01M25VR91BZCT0F5XZ4PSCF69S" + + ❯ tests/observer-link.test.ts:717:26 + 715| expect(jsonLine).toBeDefined(); + 716| const parsed = JSON.parse(jsonLine!) as { runId: string; observerU… + 717| expect(parsed.runId).toBe('run-observer-json'); + | ^ + 718| expect(parsed.observerUrl).toBe('https://agentrelay.com/observer?k… + 719| }); + +⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/4]⎯ + + Test Files 1 failed (1) + Tests 4 failed | 34 passed (38) + Start at 16:32:34 + Duration 3.94s (transform 121ms, setup 0ms, collect 216ms, tests 3.52s, environment 0ms, prepare 35ms) + diff --git a/evidence/shakedown-0910/followup-tsc.txt b/evidence/shakedown-0910/followup-tsc.txt new file mode 100644 index 000000000..3a33ba3ba --- /dev/null +++ b/evidence/shakedown-0910/followup-tsc.txt @@ -0,0 +1,3 @@ +HEAD: #269 0a0bca44e460167951457371fd723c60aebf4303 composed with main/#268 +COMMAND: npx tsc --noEmit +EXIT: 0 diff --git a/evidence/shakedown-0910/hello-world.txt b/evidence/shakedown-0910/hello-world.txt new file mode 100644 index 000000000..2804858e8 --- /dev/null +++ b/evidence/shakedown-0910/hello-world.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js run testdata/shakedown/hello-world.flow.yaml --data-dir /var/folders/_z/f_fpl8j533g_r63706k2xvp00000gn/T/flows-shakedown-hello-world-itiz3eba +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.591s +STDOUT: +RUN 01M25TFA3YGC4YX7YT8FV8V32Q completed (1 steps) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + diff --git a/evidence/shakedown-0910/help-build.txt b/evidence/shakedown-0910/help-build.txt new file mode 100644 index 000000000..bc73242a1 --- /dev/null +++ b/evidence/shakedown-0910/help-build.txt @@ -0,0 +1,7 @@ +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npm run build +EXIT: 0 + +> @relayflows/sdk@2.0.8 build +> tsc && node scripts/make-cli-executable.mjs + diff --git a/evidence/shakedown-0910/help-cargo-tests.txt b/evidence/shakedown-0910/help-cargo-tests.txt new file mode 100644 index 000000000..2a0ae8273 --- /dev/null +++ b/evidence/shakedown-0910/help-cargo-tests.txt @@ -0,0 +1,213 @@ +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: /Users/khaliqgant/.cargo/bin/cargo test -p relayflowd +EXIT: 0 + Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s + Running unittests src/lib.rs (target/debug/deps/relayflowd-3287862779f564ca) + +running 36 tests +test engine::remote::worker_failure_detail_tests::a_null_or_blank_output_yields_no_detail ... ok +test engine::remote::worker_failure_detail_tests::an_output_at_the_boundary_is_not_truncated ... ok +test engine::remote::worker_failure_detail_tests::a_string_output_is_carried_verbatim_and_trimmed ... ok +test engine::remote::worker_failure_detail_tests::truncation_does_not_split_a_multi_byte_char ... ok +test engine::boot_identity_tests::every_engine_in_this_process_shares_one_boot_id ... ok +test engine::remote::worker_failure_detail_tests::a_non_string_output_is_rendered_rather_than_dropped ... ok +test server::client::tests::resume_waits_while_the_heartbeat_renewed_lease_is_live ... ok +test server::liveness::tests::sweep_id_buckets_by_the_interval ... ok +test server::channels::tests::unknown_verb_never_falls_through_to_receive ... ok +test exec_det::tests::captures_deterministic_output ... ok +test engine::wake::claim_guard_tests::a_disarmed_guard_leaves_the_claim_alone ... ok +test engine::wake::claim_guard_tests::a_guard_only_releases_its_own_run ... ok +test server::liveness::tests::sweep_pass_latches_after_journaling_and_next_bucket_is_empty ... ok +test server::tests::agent::contract::an_agent_worker_attaching_without_pins_is_refused_at_attach ... ok +test engine::wake::claim_guard_tests::an_armed_guard_releases_the_claim_when_dropped ... ok +test server::liveness::tests::sweep_pass_healthy_subscription_is_a_noop ... ok +test server::tests::agent::contract::an_oversized_trajectory_tail_is_refused_at_step_complete ... ok +test engine::wake::claim_guard_tests::a_panic_between_claim_and_register_still_releases ... ok +test server::tests::agent::contract::an_agent_worker_missing_a_declared_surface_parks_the_run_instead_of_erroring ... ok +test server::tests::agent::contract::agent_without_a_compatible_worker_parks_without_starting ... ok +test server::tests::hello_enforces_protocol_version ... ok +test server::tests::agent::contract::a_replacement_worker_that_never_reported_the_pinned_surface_is_not_dispatched_to ... ok +test server::tests::agent::contract::an_llm_completion_claiming_an_effect_fails_closed_with_the_reason_journaled ... ok +test server::tests::a_failed_disconnect_journal_append_is_retained_and_retried_not_dropped ... ok +test server::tests::run_resume_asks_the_registry_instead_of_treating_an_orphan_file_as_a_run ... ok +test server::tests::run_start_fails_closed_on_an_unknown_verification_key ... ok +test server::tests::agent::pins::reset_worker_reporting_a_revision_other_than_its_pin_fails_closed_as_worker_error ... ok +test server::tests::run_resume_refuses_a_journal_that_never_recorded_its_run ... ok +test server::tests::agent::pins::consecutive_agent_steps_on_different_surfaces_each_start_from_their_own_pins ... ok +test server::tests::run_resume_refuses_a_valid_journal_that_belongs_to_another_run ... ok +test server::tests::run_resume_adopts_a_real_journal_whose_registry_row_is_missing ... ok +test server::tests::stopped_heartbeats_past_the_deadline_journal_lease_expired_and_release_the_step ... ok +test exec_det::tests::timeout_kills_the_whole_process_group ... ok +test exec_det::tests::timeout_has_an_explicit_completion_reason ... ok +test server::tests::agent::pins::a_replacement_worker_at_a_different_revision_is_not_dispatched_the_stale_pins ... ok +test server::tests::an_entry_appended_during_watch_registration_is_delivered_exactly_once ... ok + +test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.58s + + Running unittests src/main.rs (target/debug/deps/relayflowd-ae3ceb16e5d803ec) + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + + Running tests/crash_resume.rs (target/debug/deps/crash_resume-4619905d2726c36c) + +running 40 tests +test agent::resume_without_a_worker_parks_immediately_instead_of_timing_out ... ok +test concurrency::cancel_closes_the_lease_and_rejects_a_late_completion ... ok +test concurrency::cancel_and_completion_race_has_one_terminal_fact ... ok +test agent::rung_c_sigkill_after_final_effect_replays_results_without_redispatch ... ok +test channels::channels_reject_foreign_workers_stale_attempts_and_invalid_acknowledgements ... ok +test agent::rung_c_sigkill_between_agent_completion_and_final_effect_memoizes_the_agent ... ok +test agent::rung_c_crash_between_effect_election_and_the_provider_call_performs_it_exactly_once ... ok +test agent::rung_c_reset_sigkill_mid_edit_restores_pins_dedupes_effect_and_explains_attempts ... ok +test concurrency::run_start_dispatches_every_independent_lane_before_any_completion ... ok +test concurrency::live_resume_leaves_an_active_lease_running ... ok +test concurrency::concurrent_resumes_lease_exactly_one_attempt ... ok +test concurrency::server_restart_recovers_every_parallel_lease_without_duplicate_success ... ok +test llm::serve_plumbs_watch_events_and_replayable_stream_verbs ... ok +test agent::rung_c_sigkill_boundaries_resume_only_unfinished_steps_via_real_cli ... ok +test llm::failing_llm_verification_schedules_a_durable_retry_and_succeeds ... ok +test llm::completed_llm_output_is_memoized_when_serve_dies_during_the_next_step ... ok +test llm::llm_verification_exhaustion_is_a_declared_failure_kind ... ok +test llm::sigkill_after_the_final_rung_b_effect_resumes_without_redispatching_llm ... ok +test pin_projection::rejected_completion_cannot_forge_inspect_retry_pins_over_the_real_socket ... ok +test memory::memory_sigkill_after_injection_replays_pack_and_charges_it_once ... ok +test llm::worker_killed_while_holding_a_lease_is_explained_and_released_on_cli_resume ... ok +test llm::sigkill_under_serve_mid_llm_releases_the_lease_and_finishes_via_cli_resume ... ok +test protocol_admission::every_mutating_run_verb_refuses_terminal_before_changing_state ... ok +test parallel_lifecycle::terminal_failure_drains_or_explains_every_live_sibling ... ok +test llm::sigkill_sweep_covers_before_and_between_the_rung_b_steps ... ok +test sigkill_mid_step_replaces_and_explains_the_dead_attempt ... ok +test sigkill_after_cancel_request_resumes_to_one_canceled_fact ... ok +test parallel_lifecycle::overlapping_agent_conflict_survives_server_crash_and_resume ... ok +test surface_identity::aliases_are_rejected_and_external_ancestors_serialize_over_real_sockets ... ok +test sigkill_under_serve_resumes_the_socket_started_run ... ok +test parallel_lifecycle::overlapping_agent_lanes_serialize_while_disjoint_lanes_merge_in_either_order ... ok +test worker_capacity::two_workers_receive_a_deterministic_fair_capacity_bounded_batch ... ok +test workspace_identity::workspace_aliases_are_refused_and_canonical_subtrees_serialize_over_real_sockets ... ok +test channels::channels_sigkill_resume_redelivers_unacked_messages_with_exactly_once_effects ... ok +test worker_capacity::default_capacity_one_reopens_only_after_durable_completion_or_crash ... ok +test sigkill_sweep_covers_every_hello_step_boundary ... ok +test placement::declared_placement_keeps_one_source_tree_across_resume ... ok +test placement::sigkill_before_first_step_preserves_the_submitted_workspace ... ok +test placement::sigkill_mid_step_keeps_the_route_and_source_tree ... ok +test parallel_lifecycle::renewed_parallel_leases_survive_the_original_grant_and_remain_distinct ... ok + +test result: ok. 40 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 37.43s + + Running tests/daemon_lifecycle.rs (target/debug/deps/daemon_lifecycle-e483798b2ec9e14a) + +running 5 tests +test sigkill_leaves_a_stale_file_with_a_dead_pid ... ok +test clean_shutdown_removes_advertisement_and_socket ... ok +test connection_file_is_published_only_after_the_socket_is_live ... ok +test a_second_serve_on_a_served_data_dir_refuses_and_the_first_keeps_serving ... ok +test a_sigkilled_daemons_successor_starts_cleanly ... ok + +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s + + Running tests/event_wake.rs (target/debug/deps/event_wake-bc602276d1cebcd0) + +running 3 tests +test two_racing_deliveries_of_one_event_produce_exactly_one_run ... ok +test matching_event_wakes_once_with_fresh_context ... ok +test a_resumed_run_dispatches_the_original_wake_context ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Running tests/hn_monitor_integration.rs (target/debug/deps/hn_monitor_integration-6b22693ad979dd80) + +running 1 test +test hn_story_event_wakes_monitor_once_with_story_context ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s + + Running tests/invalid_schema_preflight.rs (target/debug/deps/invalid_schema_preflight-2c352b9351d5acf8) + +running 3 tests +test invalid_json_schema_is_refused_before_journal_or_command ... ok +test unbounded_json_schema_is_refused_before_journal_or_command ... ok +test legitimately_recursive_json_schema_still_starts ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.63s + + Running tests/memory.rs (target/debug/deps/memory-a74848a8274a290e) + +running 5 tests +test rejected_journal_fact_releases_reservation_and_never_dispatches ... ok +test llm_dispatch_receives_same_pack_after_resume_without_provider ... ok +test over_budget_and_provider_errors_fail_without_dispatch_or_charge ... ok +test replay_and_resume_need_no_provider_and_script_receives_recorded_pack ... ok +test semantic_retry_reuses_memory_without_a_second_charge ... ok + +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s + + Running tests/memory_epoch.rs (target/debug/deps/memory_epoch-edee30a47cad81b5) + +running 1 test +test epoch_carries_pack_and_exact_charge_and_refuses_duplicate_injection ... ok + +test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Running tests/parallel_driver.rs (target/debug/deps/parallel_driver-74d9d10149c534bd) + +running 4 tests +test stop_after_one_holds_for_an_independent_deterministic_batch ... ok +test pause_before_second_independent_step_holds_the_driver_boundary ... ok +test backpressured_or_mismatched_lane_does_not_drop_a_later_dispatch ... ok +test crash_boundaries_resume_the_real_driver_with_one_effect_per_lane ... ok + +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s + + Running tests/placement_pins.rs (target/debug/deps/placement_pins-893a8773fbe94aee) + +running 3 tests +test unsupported_local_pty_is_refused_before_an_earlier_step_can_run ... ok +test default_worker_pins_the_declared_worktree_base_commit_and_refuses_missing_source ... ok +test a_resumed_attempt_keeps_the_original_pin_after_the_worktree_head_moves ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.58s + + Running tests/placement_routing.rs (target/debug/deps/placement_routing-aabf5947f3ca76b4) + +running 3 tests +test a_failed_routing_append_never_starts_or_dispatches_work ... ok +test crash_between_routing_and_start_does_not_redecide ... ok +test worker_retry_consumes_the_original_routing_fact ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Running tests/routing_diagnostics.rs (target/debug/deps/routing_diagnostics-ddddee3a427ee9ae) + +running 2 tests +test duplicate_routes_have_a_distinct_diagnostic_and_leave_the_original_fact_intact ... ok +test malformed_routes_name_the_same_field_at_append_replay_and_epoch_replay ... ok + +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s + + Running tests/spec_review_routing.rs (target/debug/deps/spec_review_routing-0731f97e90d67407) + +running 4 tests +test attempt_scoped_route_is_rejected_at_append_and_replay ... ok +test malformed_epoch_routes_are_rejected_before_commit ... ok +test epoch_cannot_drop_or_replace_a_durable_route ... ok +test workspace_pin_peels_tags_and_refuses_non_commit_objects ... ok + +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s + + Running tests/subscription_liveness.rs (target/debug/deps/subscription_liveness-9506d11f678a9586) + +running 3 tests +test submit_event_upserts_subscription_row_and_sweep_flags_it_stale_after_budget ... ok +test stale_transition_is_journaled_as_subscription_stale_entry_in_the_last_known_run ... ok +test a_fresh_arrival_re_arms_the_latch_and_the_next_silence_can_stale_again ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Doc-tests relayflowd + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + diff --git a/evidence/shakedown-0910/help-cli-tests.txt b/evidence/shakedown-0910/help-cli-tests.txt new file mode 100644 index 000000000..aa249bf36 --- /dev/null +++ b/evidence/shakedown-0910/help-cli-tests.txt @@ -0,0 +1,14 @@ +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx vitest run tests/cli.test.ts +EXIT: 0 + + RUN v2.1.9 /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk + + ✓ tests/cli.test.ts (63 tests) 2691ms + ✓ flows check CLI > binds a checked relative wrapper to the flow directory for worker execution 704ms + + Test Files 1 passed (1) + Tests 63 passed (63) + Start at 16:21:14 + Duration 3.14s (transform 133ms, setup 0ms, collect 236ms, tests 2.69s, environment 0ms, prepare 34ms) + diff --git a/evidence/shakedown-0910/help-fixed.txt b/evidence/shakedown-0910/help-fixed.txt new file mode 100644 index 000000000..83cb1a670 --- /dev/null +++ b/evidence/shakedown-0910/help-fixed.txt @@ -0,0 +1,41 @@ +COMMAND: node packages/sdk/dist/cli.js --help +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js -h +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js --definitely-invalid +EXIT: 2 +STDOUT: + +STDERR: +REFUSED [invalid_invocation] Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] diff --git a/evidence/shakedown-0910/help-pr-body.md b/evidence/shakedown-0910/help-pr-body.md new file mode 100644 index 000000000..23ddfb6b0 --- /dev/null +++ b/evidence/shakedown-0910/help-pr-body.md @@ -0,0 +1,127 @@ +`flows --help` and `flows -h` now print one usage form per line to stdout and exit 0; unknown options still exit 2. Single-step summaries now say `(1 step)` instead of `(1 steps)`. + +Reproduced during the launch shakedown on main a42ca16. This small PR is based directly on main; it does not modify #268/#269 branches. + +Validation on this change (full captured output in the shakedown report): + +```text +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx tsc --noEmit +EXIT: 0 + +``` + +```text +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx vitest run tests/cli.test.ts +EXIT: 0 + + RUN v2.1.9 /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk + + ✓ tests/cli.test.ts (63 tests) 2691ms + ✓ flows check CLI > binds a checked relative wrapper to the flow directory for worker execution 704ms + + Test Files 1 passed (1) + Tests 63 passed (63) + Start at 16:21:14 + Duration 3.14s (transform 133ms, setup 0ms, collect 236ms, tests 2.69s, environment 0ms, prepare 34ms) + + +``` + +```text +COMMAND: node packages/sdk/dist/cli.js --help +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js -h +EXIT: 0 +STDOUT: +Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +STDERR: + +COMMAND: node packages/sdk/dist/cli.js --definitely-invalid +EXIT: 2 +STDOUT: + +STDERR: +REFUSED [invalid_invocation] Usage: +flows check [--json] +flows run [--json] [--no-spawn] [--data-dir ] +flows run --cloud [--json] [--wait] +flows run [--json] [--no-spawn] [--data-dir ] [--local-agent] --input +flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] +flows resume [--json] [--no-spawn] [--data-dir ] +flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + +``` + +```text +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk/dist/cli.js run /Users/khaliqgant/flows-shakedown-0910/testdata/shakedown/hello-world.flow.yaml --data-dir /tmp/rfd-96g6toyf +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.249s +STDOUT: +RUN 01M25V99YWG6MCDTKWNG9PB3HK completed (1 step) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + + +``` + +```text +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git rev-parse HEAD +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a + +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git ls-remote origin refs/heads/fix/cli-help-shakedown-0910 +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a refs/heads/fix/cli-help-shakedown-0910 + + +``` + +`cargo test -p relayflowd` exited 0. Final literal output: + +```text + +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s + + Running tests/subscription_liveness.rs (target/debug/deps/subscription_liveness-9506d11f678a9586) + +running 3 tests +test submit_event_upserts_subscription_row_and_sweep_flags_it_stale_after_budget ... ok +test stale_transition_is_journaled_as_subscription_stale_entry_in_the_last_known_run ... ok +test a_fresh_arrival_re_arms_the_latch_and_the_next_silence_can_stale_again ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s + + Doc-tests relayflowd + +running 0 tests + +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s + +``` diff --git a/evidence/shakedown-0910/help-push-verification.txt b/evidence/shakedown-0910/help-push-verification.txt new file mode 100644 index 000000000..bd60e757c --- /dev/null +++ b/evidence/shakedown-0910/help-push-verification.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git rev-parse HEAD +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a + +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: git ls-remote origin refs/heads/fix/cli-help-shakedown-0910 +EXIT: 0 +179092173be91d4e4fcc9245be17371bca08360a refs/heads/fix/cli-help-shakedown-0910 + diff --git a/evidence/shakedown-0910/help-singular-summary.txt b/evidence/shakedown-0910/help-singular-summary.txt new file mode 100644 index 000000000..b5bcc1f0d --- /dev/null +++ b/evidence/shakedown-0910/help-singular-summary.txt @@ -0,0 +1,11 @@ +CWD: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-help-shakedown-0910/packages/sdk/dist/cli.js run /Users/khaliqgant/flows-shakedown-0910/testdata/shakedown/hello-world.flow.yaml --data-dir /tmp/rfd-96g6toyf +ENV OVERRIDES: {} +EXIT: 0 +ELAPSED: 0.249s +STDOUT: +RUN 01M25V99YWG6MCDTKWNG9PB3HK completed (1 step) completionReason: success + +STDERR: +WARNING [unprovable_effects] Step "hello" command "printf" resolves, but its effects cannot be proven before execution. + diff --git a/evidence/shakedown-0910/help-tsc.txt b/evidence/shakedown-0910/help-tsc.txt new file mode 100644 index 000000000..bbb312309 --- /dev/null +++ b/evidence/shakedown-0910/help-tsc.txt @@ -0,0 +1,3 @@ +CHECKOUT: /Users/khaliqgant/flows-help-shakedown-0910 +COMMAND: npx tsc --noEmit +EXIT: 0 diff --git a/evidence/shakedown-0910/help.txt b/evidence/shakedown-0910/help.txt new file mode 100644 index 000000000..c3d87a236 --- /dev/null +++ b/evidence/shakedown-0910/help.txt @@ -0,0 +1,10 @@ +CWD: /Users/khaliqgant/flows-shakedown-0910 +COMMAND: node /Users/khaliqgant/flows-shakedown-0910/packages/sdk/dist/cli.js --help +ENV OVERRIDES: {} +EXIT: 2 +ELAPSED: 0.123s +STDOUT: + +STDERR: +REFUSED [invalid_invocation] Usage: flows check [--json] flows run [--json] [--no-spawn] [--no-observer-link] [--data-dir ] flows run --cloud [--json] [--wait] flows run [--json] [--no-spawn] [--no-observer-link] [--data-dir ] [--local-agent] --input flows tick start --schedule-id --interval-ms [--epoch-ms ] [--max-catch-up ] [--poll-interval-ms ] [--data-dir ] flows resume [--json] [--no-spawn] [--no-observer-link] [--data-dir ] flows hn-monitor start [--data-dir ] [--poll-interval-ms ] + diff --git a/evidence/shakedown-0910/issues/dependency-audit.md b/evidence/shakedown-0910/issues/dependency-audit.md new file mode 100644 index 000000000..0de177ab8 --- /dev/null +++ b/evidence/shakedown-0910/issues/dependency-audit.md @@ -0,0 +1,41 @@ +## Summary + +**Low launch severity for this local CLI shakedown; reachability not assessed.** The documented fresh `packages/sdk` install succeeds but immediately reports `6 vulnerabilities (4 moderate, 1 high, 1 critical)`. This is visible first-build friction and merits dependency maintenance. The high/critical findings are in development tooling, not the production-only audit. + +## Repro + +From main `a42ca16` plus #268/#269, using Node 25.8.1: + +```sh +cd packages/sdk +npm ci +npm audit --json +npm audit --omit=dev --json +``` + +Install output: + +```text +added 58 packages, and audited 59 packages in 1s + +16 packages are looking for funding + run `npm fund` for details + +6 vulnerabilities (4 moderate, 1 high, 1 critical) +``` + +Full audit: `vitest` critical, `vite` high, `@vitest/mocker`, `vite-node`, `esbuild`, and `ajv` moderate. The suggested test-tooling upgrade crosses a major version to Vitest 4.1.11. Production-only audit contains just the moderate Ajv `$data` ReDoS advisory (GHSA-2g4f-4pwh-qvx6). This report does not establish exploitability or assert that `$data` is enabled. + +## Expected + +The documented clean SDK build has an evaluated dependency baseline and no unexplained high/critical install banner. + +## Suggested direction + +Evaluate compatible test-tooling and Ajv updates, capture reachability where upgrades must be deferred, and rerun the SDK tests. Do not use blanket audit suppression or `npm audit fix --force` without checking the resulting major-version changes. + +## Acceptance criteria + +- Fresh install and full/production-only audits are captured after maintenance. +- The selected dependency changes pass SDK type checks and relevant tests. +- Any remaining advisory has an explicit, evidence-based disposition. diff --git a/evidence/shakedown-0910/issues/dependency-audit.title.txt b/evidence/shakedown-0910/issues/dependency-audit.title.txt new file mode 100644 index 000000000..6da598f6c --- /dev/null +++ b/evidence/shakedown-0910/issues/dependency-audit.title.txt @@ -0,0 +1 @@ +flows: fresh SDK npm ci reports six dependency advisories diff --git a/evidence/shakedown-0910/issues/llm-local.md b/evidence/shakedown-0910/issues/llm-local.md new file mode 100644 index 000000000..259e97ee1 --- /dev/null +++ b/evidence/shakedown-0910/issues/llm-local.md @@ -0,0 +1,59 @@ +## Summary + +**BLOCKER for the 2026-09-11 launch's requested `llm → agent → deterministic` demo.** With a real authenticated Codex CLI, declarative YAML parks at its first `llm` step with no worker; authored TypeScript with `--local-agent` reports `unsupported_verb` for `f.llm`. A standalone TypeScript `f.agent` using the same installation succeeds, so this is not a missing provider login. + +Observed against main `a42ca16` composed with #268 `33c460a` and #269 `f3dc7ce`, on macOS arm64 / Node 25.8.1. + +## Repro + +Build kernel and SDK, then run this file outside any `flows.json` ancestry with a fresh data directory and an authenticated `codex` on PATH: + +```yaml +version: "0.1.0" +name: llm-first +steps: + - id: extract + type: llm + cli: codex + prompt: 'Return only JSON: {"message":"hello"}' + output: + type: object + required: [message] + properties: + message: {type: string} +``` + +```sh +node packages/sdk/dist/cli.js run /tmp/llm-first.flow.yaml --data-dir /tmp/llm-first-fresh +``` + +Captured from the three-step variant: + +``` +EXIT: 3 +RUN 01M25TMMN68GZPYJ7JK85CSH2B parked (0 steps) +PARKED [run_parked] Run "01M25TMMN68GZPYJ7JK85CSH2B" parked at step "extract" (llm): no worker is attached for step type "llm". +``` + +Trying the imperative path (`await f.llm(...)`) with installed `@relayflows/surface` and `flows run chained.flow.ts --local-agent --input '{}'` instead gives: + +``` +EXIT: 1 +FAILED [protocol_error] relayflowd could not complete the run request: unsupported_verb: the initial authored executor does not lower f.llm +``` + +## Expected + +The supported local CLI can execute a real `llm` request, validate its JSON output, and advance through the advertised three-step chain. If a worker must be started separately, ship and document the exact supported command and refuse before creating a run when a required executor is absent (RFC-0001 covenant 2). + +## Suggested direction + +Implement authored `f.llm` lowering and a real local LLM worker/runner path using existing kernel `llm` dispatch and typed completion. Cover the declarative entry point as well. Do not disguise this as `agent` or remove the typed gate to get a green demo. + +## Acceptance criteria + +- A documented local command runs `llm → agent → deterministic` with real provider output and a fresh data directory. +- Invalid JSON and schema mismatch fail with a typed completion reason. +- The deterministic final step consumes verified upstream data and writes the expected artifact. +- Missing runtime capabilities are reported before run submission with a concrete remediation command. +- Capture a real-provider CLI transcript; a stubbed worker alone is not acceptance evidence. diff --git a/evidence/shakedown-0910/issues/llm-local.title.txt b/evidence/shakedown-0910/issues/llm-local.title.txt new file mode 100644 index 000000000..4c34c1904 --- /dev/null +++ b/evidence/shakedown-0910/issues/llm-local.title.txt @@ -0,0 +1 @@ +flows: flagship llm chain has no executable local path in YAML or TypeScript diff --git a/evidence/shakedown-0910/issues/observer-264-comment.md b/evidence/shakedown-0910/issues/observer-264-comment.md new file mode 100644 index 000000000..491269c4e --- /dev/null +++ b/evidence/shakedown-0910/issues/observer-264-comment.md @@ -0,0 +1,12 @@ +Launch shakedown against #269 `f3dc7ce` found a real endpoint mismatch, independent of the stale-cookie browser issue. Please handle on the existing observer branch; this shakedown is not editing that PR. + +1. `RELAYCAST_WORKSPACE_KEY=rk_live_test flows run observer.flow.yaml` succeeds as a flow but emits `[observer] token mint failed: mint API returned HTTP 404; skipping observer link`. Default `https://agentrelay.com/v1/observer-tokens` is the dashboard origin, not the canonical API. +2. The active workspace reports `relaycastUrl: https://cast.agentrelay.com`. Setting `RELAYCAST_API_URL` to that URL makes the dummy key fail with the expected HTTP401. +3. With the existing real canonical workspace key (never logged), minting succeeds, but the CLI prints `Observer: https://cast.agentrelay.com/observer?key=ot_live_REDACTED`. +4. Actually loading that printed URL with `curl -L` returns **HTTP404**, body `{"ok":false,"error":{"code":"not_found","message":"Route not found"}}`. + +The code derives both `/v1/observer-tokens` and `/observer` from the same base. The API and dashboard are different origins in the canonical deployment. Acceptance: separate the API mint origin from the human dashboard origin, and load a freshly printed real-key URL before declaring the link delivered. Dummy-key failure must remain best-effort and leave a successful local run at exit0. + +At this tested head, `flows observer` itself is still absent (`REFUSED [invalid_invocation]`, exit2); I will retest if the follow-up lands. A first real-key mint attempt also hit HTTP429, so the final successful mint was done after backing off. + +Follow-up at `0a0bca4`: rebuilt and exercised new `flows observer` and the actual existing cloud-login store. With no env key, the default mint still404s; canonical API override mints successfully, and the printed URL still loads404. Suppressed and absent-store refusals are actionable. `npx tsc --noEmit` passes. `npx vitest run tests/observer-link.test.ts` is **34 passed / 4 failed** when composed with #268: `startCliLoopback` still binds `join(dataDir, 'relayflowd.sock')` at line74, so the CLI connects to a freshly spawned real daemon on its hashed path instead of the test loopback; expected sentinel run IDs are replaced by real ULIDs. Please reconcile test socket setup with #268 on your branch. diff --git a/evidence/shakedown-0910/issues/observer-origins.md b/evidence/shakedown-0910/issues/observer-origins.md new file mode 100644 index 000000000..34659e6ea --- /dev/null +++ b/evidence/shakedown-0910/issues/observer-origins.md @@ -0,0 +1,53 @@ +## Summary + +**High launch severity; #269 remains with its existing owner.** The default API base is the dashboard origin (`https://agentrelay.com`), so minting returns 404. Overriding to the canonical API (`https://cast.agentrelay.com`) allows minting, but the generated dashboard URL uses that API origin too and also returns 404 when loaded. + +Confirmed both on initial #269 `f3dc7ce` and its on-demand/cloud-login follow-up `0a0bca4`, composed with main `a42ca16` and #268 `33c460a`. + +## Repro + +```sh +RELAYCAST_WORKSPACE_KEY=rk_live_test flows observer +``` + +``` +EXIT: 2 +REFUSED [observer_link_unavailable] mint API returned HTTP 404 +``` + +The canonical API reported by `agent-relay workspace active --json` is `https://cast.agentrelay.com`. A dummy key there gives HTTP401 as expected. With an existing real cloud-login workspace key and **no** RELAYCAST_WORKSPACE_KEY env var: + +```sh +RELAYCAST_API_URL=https://cast.agentrelay.com flows observer +``` + +``` +EXIT: 0 +https://cast.agentrelay.com/observer?key=ot_live_REDACTED +``` + +Actually loading the printed URL: + +```text +curl --max-time 15 -sS -L '' +HTTP: 404 +{"ok":false,"error":{"code":"not_found","message":"Route not found"}} +``` + +`flows run` also prints an unusable URL; a mint failure itself correctly leaves a successful deterministic run at exit0. Live credential material is intentionally redacted. + +## Expected + +Default cloud-login or explicit-key observer commands mint against the canonical API and emit a dashboard URL that actually loads. + +## Suggested direction + +Separate the mint API base and dashboard URL. Default the API to the canonical Relaycast service and the dashboard to its UI origin; respect deployment overrides independently. Do not conflate this with the separate stale-cookie fix. + +## Acceptance criteria + +- Dummy key against the default mint endpoint yields an auth failure, not 404. +- A real existing workspace key mints a URL through both `flows run` and `flows observer`. +- Load the printed URL with a browser or curl and capture a non-404 dashboard response. +- Cloud-login fallback works without exposing the admin key in URLs/logs. +- Observer failures remain nonfatal to otherwise successful runs. diff --git a/evidence/shakedown-0910/issues/observer-origins.title.txt b/evidence/shakedown-0910/issues/observer-origins.title.txt new file mode 100644 index 000000000..550bd97cb --- /dev/null +++ b/evidence/shakedown-0910/issues/observer-origins.title.txt @@ -0,0 +1 @@ +flows: observer API and dashboard origins produce HTTP 404 diff --git a/evidence/shakedown-0910/issues/runtime-diagnostic.md b/evidence/shakedown-0910/issues/runtime-diagnostic.md new file mode 100644 index 000000000..c8fa89001 --- /dev/null +++ b/evidence/shakedown-0910/issues/runtime-diagnostic.md @@ -0,0 +1,49 @@ +## Summary + +**High launch friction.** When a deterministic command exits nonzero, `flows run` reports only the run-level `step_failed`. The user's stderr and the actual exit code are absent, and the message gives no inspection command. A first-time author must reach into the journal to learn why a command failed. + +## Repro + +```yaml +version: "0.1.0" +name: runtime-error +steps: + - id: fail-command + type: deterministic + command: 'printf "shakedown intentional failure" >&2; exit 7' +``` + +Run with a fresh data directory: + +```sh +flows run runtime-error.flow.yaml --data-dir /tmp/runtime-error-fresh +``` + +Captured output (main `a42ca16` + #268/#269): + +```text +EXIT: 1 +STDOUT: +RUN 01M25VBQ8W3TCRWTM15KYAM7AA failed (1 steps) completionReason: step_failed + +STDERR: +WARNING [unprovable_effects] Step "fail-command" command "printf" resolves, but its effects cannot be proven before execution. +FAILED [step_failed] Run "01M25VBQ8W3TCRWTM15KYAM7AA" failed with completionReason: step_failed. +``` + +Neither `exit 7` nor `shakedown intentional failure` appears. The warning happens to name the step here, but it is unrelated to the failure and cannot substitute for a failed-step diagnostic. + +## Expected + +The refusal/failure output names the failed step and exit code, includes an appropriately bounded stderr tail, and gives an executable inspection command when additional context is available. Preserve the typed run completion reason. + +## Suggested direction + +Read the journaled failed attempt result at the CLI reporting boundary and render the already captured result, applying the project's output bounds and credential-redaction conventions. Do not re-run the command to diagnose it. + +## Acceptance criteria + +- The repro identifies `fail-command`, exit code 7, and its captured stderr. +- Successful summaries remain concise. +- `--json` exposes the same useful failure context in structured form. +- Long stderr is bounded, with clear truncation and an inspection path. diff --git a/evidence/shakedown-0910/issues/runtime-diagnostic.title.txt b/evidence/shakedown-0910/issues/runtime-diagnostic.title.txt new file mode 100644 index 000000000..e0f5ae2d7 --- /dev/null +++ b/evidence/shakedown-0910/issues/runtime-diagnostic.title.txt @@ -0,0 +1 @@ +flows: failed deterministic runs hide the command exit code and stderr diff --git a/evidence/shakedown-0910/issues/yaml-binding.md b/evidence/shakedown-0910/issues/yaml-binding.md new file mode 100644 index 000000000..4b17329d3 --- /dev/null +++ b/evidence/shakedown-0910/issues/yaml-binding.md @@ -0,0 +1,52 @@ +## Summary + +**BLOCKER for the requested declarative `llm → agent → deterministic` demo.** `dependsOn` orders steps, but the YAML surface has no input binding for passing a verified JSON value into a downstream instruction or deterministic command. The accepted step fields and kernel compilation expose no binding mechanism. + +This is a missing authoring capability, not a claim that a particular template syntax is promised. + +## Repro + +The launch shakedown attempted a three-step YAML flow: `extract` declares a JSON `output` schema; `draft` depends on `extract`; `write` depends on `draft`. There is no documented value-reference field. An exploratory `input: {from: first}` is refused: + +``` +REFUSED [invalid_spec] Relayflow spec is invalid: spec.steps[1]: unknown key "input" (expected one of id | type | dependsOn | verification | maxIterations | memory | requirements | command | timeoutMs) +``` + +A provider-free control using a guessed `{{steps.first.output}}` string completes but writes that exact literal to its output file: + +```yaml +version: "0.1.0" +name: binding +steps: + - id: first + type: deterministic + command: printf hello + - id: second + type: deterministic + dependsOn: [first] + command: "printf '%s' '{{steps.first.output}}' > binding-result.txt" +``` + +``` +EXIT: 0 +RUN 01M25TW2BTQ39XDNJPRN2RBA0B completed (2 steps) completionReason: success +FILE CONTENTS: {{steps.first.output}} +``` + +Again, the guessed braces syntax is not documented; this establishes that it is not an available workaround. + +## Expected + +A documented declarative binding reads a completed, verified upstream value, preserves its type, and supplies it to the next step without hand-written journal readers or shell files standing in for declared data flow. + +## Suggested direction + +Design input references at the authoring/protocol boundary with missing-reference preflight, explicit value selection, safe command argument transport, and durable provenance. Clarify how this composes with JSON Schema outputs and `dependsOn`. Avoid raw shell substitution of model output. + +## Acceptance criteria + +- A three-step YAML example passes verified `llm` JSON through an agent and writes a deterministic artifact. +- Missing step IDs/fields are refused before effects when statically knowable. +- Quotes, newlines, and shell metacharacters in upstream values remain data. +- Resume consumes the journaled output, with no duplicate upstream execution. +- Document and exercise the actual syntax through `flows run`. diff --git a/evidence/shakedown-0910/issues/yaml-binding.title.txt b/evidence/shakedown-0910/issues/yaml-binding.title.txt new file mode 100644 index 000000000..5070bb4d5 --- /dev/null +++ b/evidence/shakedown-0910/issues/yaml-binding.title.txt @@ -0,0 +1 @@ +flows: declarative steps lack a supported way to consume upstream output diff --git a/evidence/shakedown-0910/issues/yaml-worker.md b/evidence/shakedown-0910/issues/yaml-worker.md new file mode 100644 index 000000000..f94664e8e --- /dev/null +++ b/evidence/shakedown-0910/issues/yaml-worker.md @@ -0,0 +1,50 @@ +## Summary + +**High launch friction.** `flows run agent.flow.yaml` with an installed/authenticated CLI creates a parked run because no worker is attached. The obvious remediation, `--local-agent`, is rejected for YAML. The message gives no command for attaching a worker. The same real Codex installation succeeds through a TypeScript `f.agent` plus `--local-agent`. + +The agent-only use case is workaroundable through authored TypeScript: a real `f.agent` with `--local-agent` and `flows.json` containing `{"cli":"codex"}` completed successfully in 5.476s. This is HIGH friction for YAML, not by itself a launch BLOCKER; the separate missing `f.llm` path still blocks the flagship chain in TS. + +## Repro + +Outside any `flows.json` ancestry: + +```yaml +version: "0.1.0" +name: agent +steps: + - id: draft + type: agent + cli: codex + instruction: Reply with exactly hello. Do not use tools or modify files. + verification: {type: output_contains, value: hello} +``` + +```sh +flows run agent.flow.yaml --data-dir /tmp/yaml-agent-fresh +flows run agent.flow.yaml --local-agent --data-dir /tmp/yaml-agent-fresh-2 +``` + +Captured first command: + +``` +EXIT: 3 +RUN 01M25TMMAW07DKQCQBTTZVGZ8P parked (0 steps) +PARKED [run_parked] Run "01M25TMMAW07DKQCQBTTZVGZ8P" parked at step "draft" (agent): no worker is attached for step type "agent". +``` + +Second command exits 2 with `REFUSED [invalid_invocation] Usage: ...`. + +## Expected + +A first-time YAML author has a documented, supported way to run their agent locally, including stream/workspace capability requirements. Missing-worker diagnostics name that next command. + +## Suggested direction + +Extend the existing local agent path to declarative specs with explicit surface handling, or expose a supported worker command and document the complete run/attach/resume sequence. Do not fabricate workspace pins or silently discard declared permissions to make a run proceed. + +## Acceptance criteria + +- A fresh YAML agent flow executes through a documented CLI-only sequence with a real CLI. +- Missing-worker output supplies an actionable command. +- Unsupported workspace/permission combinations fail closed. +- Auth and model preflight still happen before agent execution. diff --git a/evidence/shakedown-0910/issues/yaml-worker.title.txt b/evidence/shakedown-0910/issues/yaml-worker.title.txt new file mode 100644 index 000000000..940f57da4 --- /dev/null +++ b/evidence/shakedown-0910/issues/yaml-worker.title.txt @@ -0,0 +1 @@ +flows: YAML agent runs park without a supported local-worker command diff --git a/evidence/shakedown-0910/npm-audit-full.json b/evidence/shakedown-0910/npm-audit-full.json new file mode 100644 index 000000000..38cffd6bb --- /dev/null +++ b/evidence/shakedown-0910/npm-audit-full.json @@ -0,0 +1,270 @@ +{ + "auditReportVersion": 2, + "vulnerabilities": { + "@vitest/mocker": { + "name": "@vitest/mocker", + "severity": "moderate", + "isDirect": false, + "via": [ + { + "source": 1193684, + "name": "@vitest/mocker", + "dependency": "@vitest/mocker", + "title": "Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock", + "url": "https://github.com/advisories/GHSA-82fw-gwwq-j7x9", + "severity": "moderate", + "cwe": [ + "CWE-22" + ], + "cvss": { + "score": 5.9, + "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N" + }, + "range": ">=2.1.0 <4.1.11" + }, + "vite" + ], + "effects": [ + "vitest" + ], + "range": "<=4.1.10", + "nodes": [ + "node_modules/@vitest/mocker" + ], + "fixAvailable": { + "name": "vitest", + "version": "4.1.11", + "isSemVerMajor": true + } + }, + "ajv": { + "name": "ajv", + "severity": "moderate", + "isDirect": true, + "via": [ + { + "source": 1113715, + "name": "ajv", + "dependency": "ajv", + "title": "ajv has ReDoS when using `$data` option", + "url": "https://github.com/advisories/GHSA-2g4f-4pwh-qvx6", + "severity": "moderate", + "cwe": [ + "CWE-400", + "CWE-1333" + ], + "cvss": { + "score": 0, + "vectorString": null + }, + "range": ">=7.0.0-alpha.0 <8.18.0" + } + ], + "effects": [], + "range": "7.0.0-alpha.0 - 8.17.1", + "nodes": [ + "node_modules/ajv" + ], + "fixAvailable": true + }, + "esbuild": { + "name": "esbuild", + "severity": "moderate", + "isDirect": false, + "via": [ + { + "source": 1102341, + "name": "esbuild", + "dependency": "esbuild", + "title": "esbuild enables any website to send any requests to the development server and read the response", + "url": "https://github.com/advisories/GHSA-67mh-4wv8-2f99", + "severity": "moderate", + "cwe": [ + "CWE-346" + ], + "cvss": { + "score": 5.3, + "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N" + }, + "range": "<=0.24.2" + } + ], + "effects": [ + "vite" + ], + "range": "<=0.24.2", + "nodes": [ + "node_modules/esbuild" + ], + "fixAvailable": { + "name": "vitest", + "version": "4.1.11", + "isSemVerMajor": true + } + }, + "vite": { + "name": "vite", + "severity": "high", + "isDirect": false, + "via": [ + { + "source": 1116229, + "name": "vite", + "dependency": "vite", + "title": "Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling", + "url": "https://github.com/advisories/GHSA-4w7w-66w2-5vf9", + "severity": "moderate", + "cwe": [ + "CWE-22", + "CWE-200" + ], + "cvss": { + "score": 0, + "vectorString": null + }, + "range": "<=6.4.1" + }, + { + "source": 1120784, + "name": "vite", + "dependency": "vite", + "title": "launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows", + "url": "https://github.com/advisories/GHSA-v6wh-96g9-6wx3", + "severity": "moderate", + "cwe": [ + "CWE-73", + "CWE-522" + ], + "cvss": { + "score": 0, + "vectorString": null + }, + "range": "<=6.4.2" + }, + { + "source": 1123525, + "name": "vite", + "dependency": "vite", + "title": "vite: `server.fs.deny` bypass on Windows alternate paths", + "url": "https://github.com/advisories/GHSA-fx2h-pf6j-xcff", + "severity": "high", + "cwe": [ + "CWE-22", + "CWE-200" + ], + "cvss": { + "score": 7.5, + "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N" + }, + "range": "<=6.4.2" + }, + "esbuild" + ], + "effects": [ + "@vitest/mocker", + "vite-node", + "vitest" + ], + "range": "<=6.4.2", + "nodes": [ + "node_modules/vite" + ], + "fixAvailable": { + "name": "vitest", + "version": "4.1.11", + "isSemVerMajor": true + } + }, + "vite-node": { + "name": "vite-node", + "severity": "moderate", + "isDirect": false, + "via": [ + "vite" + ], + "effects": [ + "vitest" + ], + "range": "<=2.2.0-beta.2", + "nodes": [ + "node_modules/vite-node" + ], + "fixAvailable": { + "name": "vitest", + "version": "4.1.11", + "isSemVerMajor": true + } + }, + "vitest": { + "name": "vitest", + "severity": "critical", + "isDirect": true, + "via": [ + "@vitest/mocker", + { + "source": 1139528, + "name": "vitest", + "dependency": "vitest", + "title": "When Vitest UI server is listening, arbitrary file can be read and executed", + "url": "https://github.com/advisories/GHSA-5xrq-8626-4rwp", + "severity": "critical", + "cwe": [ + "CWE-22", + "CWE-862" + ], + "cvss": { + "score": 9.8, + "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H" + }, + "range": "<3.2.6" + }, + { + "source": 1193683, + "name": "vitest", + "dependency": "vitest", + "title": "Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock", + "url": "https://github.com/advisories/GHSA-82fw-gwwq-j7x9", + "severity": "moderate", + "cwe": [ + "CWE-22" + ], + "cvss": { + "score": 5.9, + "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N" + }, + "range": ">=2.1.0 <4.1.11" + }, + "vite", + "vite-node" + ], + "effects": [], + "range": "<=4.1.10", + "nodes": [ + "node_modules/vitest" + ], + "fixAvailable": { + "name": "vitest", + "version": "4.1.11", + "isSemVerMajor": true + } + } + }, + "metadata": { + "vulnerabilities": { + "info": 0, + "low": 0, + "moderate": 4, + "high": 1, + "critical": 1, + "total": 6 + }, + "dependencies": { + "prod": 12, + "dev": 94, + "optional": 50, + "peer": 0, + "peerOptional": 0, + "total": 105 + } + } +} diff --git a/evidence/shakedown-0910/npm-audit-production.json b/evidence/shakedown-0910/npm-audit-production.json new file mode 100644 index 000000000..605e72d7d --- /dev/null +++ b/evidence/shakedown-0910/npm-audit-production.json @@ -0,0 +1,53 @@ +{ + "auditReportVersion": 2, + "vulnerabilities": { + "ajv": { + "name": "ajv", + "severity": "moderate", + "isDirect": true, + "via": [ + { + "source": 1113715, + "name": "ajv", + "dependency": "ajv", + "title": "ajv has ReDoS when using `$data` option", + "url": "https://github.com/advisories/GHSA-2g4f-4pwh-qvx6", + "severity": "moderate", + "cwe": [ + "CWE-400", + "CWE-1333" + ], + "cvss": { + "score": 0, + "vectorString": null + }, + "range": ">=7.0.0-alpha.0 <8.18.0" + } + ], + "effects": [], + "range": "7.0.0-alpha.0 - 8.17.1", + "nodes": [ + "node_modules/ajv" + ], + "fixAvailable": true + } + }, + "metadata": { + "vulnerabilities": { + "info": 0, + "low": 0, + "moderate": 1, + "high": 0, + "critical": 0, + "total": 1 + }, + "dependencies": { + "prod": 12, + "dev": 94, + "optional": 50, + "peer": 0, + "peerOptional": 0, + "total": 105 + } + } +} diff --git a/evidence/shakedown-0910/npm-ci.txt b/evidence/shakedown-0910/npm-ci.txt new file mode 100644 index 000000000..3806e5a6f --- /dev/null +++ b/evidence/shakedown-0910/npm-ci.txt @@ -0,0 +1,18 @@ +CWD: packages/sdk +COMMAND: npm ci +EXIT: 0 + +added 58 packages, and audited 59 packages in 1s + +16 packages are looking for funding + run `npm fund` for details + +6 vulnerabilities (4 moderate, 1 high, 1 critical) + +To address issues that do not require attention, run: + npm audit fix + +To address all issues (including breaking changes), run: + npm audit fix --force + +Run `npm audit` for details. diff --git a/evidence/shakedown-0910/observer-dashboard-origin.txt b/evidence/shakedown-0910/observer-dashboard-origin.txt new file mode 100644 index 000000000..e23904079 --- /dev/null +++ b/evidence/shakedown-0910/observer-dashboard-origin.txt @@ -0,0 +1,8 @@ +COMMAND: curl --max-time 15 -sS -L -o /tmp/shakedown-dashboard-origin.html -w '%{http_code} +' https://agentrelay.com/observer +EXIT: 0 +HTTP: 200 + +STDERR: +BODY PREFIX: +