Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
3521cb4
fix(broker): atomic bracketed-paste injection for paste-capable harne…
Oct 4, 2026
a973af9
fix(broker): detect truncated injection echoes without replaying tasks
Oct 4, 2026
924171f
feat(cli): add task files and confirm fleet spawn task delivery
Oct 4, 2026
d735b8d
fix(broker): confirm task receipt from whole-payload echo only
Oct 4, 2026
5c8b798
fix(fleet): report pending spawns and wait for name clearance
Oct 4, 2026
68ea64b
fix(mcp): mirror pending spawn evidence and removal waits
Oct 4, 2026
bc6cb60
style: auto-format Rust code with cargo fmt
github-actions[bot] Oct 4, 2026
1665d24
style: auto-format with Prettier
github-actions[bot] Oct 4, 2026
d843398
fix: coalesce pending replies and verify provider subscriptions
Oct 5, 2026
1691814
Keep relayflow working files out of the change
Oct 5, 2026
d82c251
style: auto-format with Prettier
github-actions[bot] Oct 5, 2026
b9162ce
fix: fail verified Devin spawns on unresolved directory trust
Oct 6, 2026
c960f5c
style: auto-format with Prettier
github-actions[bot] Oct 6, 2026
ed23be1
Merge remote-tracking branch 'origin/main' into relayflow/relay-softw…
Oct 8, 2026
f12922f
fix(broker): treat visible Devin trust history as inactive and reset …
Oct 8, 2026
3bc4f44
Merge remote-tracking branch 'origin/main' into relayflow/relay-softw…
Oct 8, 2026
e6bd9d6
fix(mcp): key channel/thread write replay on the request, not the tex…
Oct 8, 2026
2de6077
Merge remote-tracking branch 'origin/main' into relayflow/relay-softw…
Oct 8, 2026
747b6ed
fix(fleet): never confirm a timed-out spawn from a name-only heartbea…
Oct 8, 2026
5dfc8a1
Merge remote-tracking branch 'origin/main' into relayflow/relay-softw…
Oct 8, 2026
6ffef38
fix(broker): resolve verified spawns in either frame order, release o…
Oct 8, 2026
9dc1a75
fix(broker): leave room for the envelope in body caps; reject oversiz…
Oct 8, 2026
e9ef78f
fix(broker): measure the decorated initial task against the body cap …
Oct 8, 2026
efafa4d
test(broker): canonicalize the Devin trust fixture's cwd so the trust…
Oct 8, 2026
b8b6394
test(fleet-e2e): model Codex's composer in the stub so the chunked in…
Oct 8, 2026
24002fb
fix(fleet): keep the public spawn_unconfirmed code for pending spawns
Oct 8, 2026
7b9de91
style: auto-format with Prettier
github-actions[bot] Oct 8, 2026
d5f616e
ci: run checks on the auto-formatted head
Oct 8, 2026
479c98d
Merge PR #1913
Oct 8, 2026
3a18ac9
Merge PR #1910
Oct 8, 2026
7021964
Merge PR #1900
Oct 8, 2026
9c42834
Merge PR #1893
Oct 8, 2026
3901e42
docs(changelog): order bundled Unreleased sections Added/Changed/Fixed
Oct 8, 2026
c3f5a76
test(broker): build #1913's Devin trust fixture with #1893's PendingV…
Oct 8, 2026
7a59ddc
fix(relay-pty): latch bracketed paste when DECSET 2004 spans reads
Oct 8, 2026
a2a20ef
fix: apply the PTY body cap only where the PTY envelope is used
Oct 8, 2026
f516fb1
fix(mcp): scope message replay to the acting agent token
Oct 8, 2026
35b6e33
fix(broker): address bundle review findings in delivery, wrap and PTY…
Oct 8, 2026
c81a678
test(mcp): stop leaked timers from flaking MCP startup tests
Oct 8, 2026
8c2167a
fix(cli): address bundle review findings in task input, removal and l…
Oct 8, 2026
cd303e7
docs: correct bundled changelog placement and review-flagged docs
Oct 8, 2026
31fde22
fix(broker): bound headless delivery by the single-argument ceiling
Oct 8, 2026
f04888c
fix(cli): size tasks by runtime, reject invalid UTF-8, tighten timeouts
Oct 8, 2026
1b14ce9
fix: apply the argv ceiling only where a body becomes a process argument
Oct 8, 2026
4795830
fix(mcp): expire retained replay keys on a monotonic clock
Oct 8, 2026
290a30d
fix(mcp): scope spawn and add_agent replay to their acting credentials
Oct 8, 2026
3672c1e
Merge remote-tracking branch 'origin/trunk' into bundle/relay-garden-…
Oct 8, 2026
4fcd1df
docs(changelog): keep bundled entries unreleased after the v13.2.0 cut
Oct 8, 2026
2197c0e
fix: address cubic review on the trunk-based bundle head
Oct 9, 2026
bed0f31
style: auto-format with Prettier
github-actions[bot] Oct 10, 2026
882506f
Merge origin/main into the #1913/#1910/#1900/#1893 bundle
khaliqgant Oct 10, 2026
4690354
fix(broker,cli,harnesses): address #1930 review threads
khaliqgant Oct 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,108 @@
"reasoning": "npm ci pinned SDK 8.0.7 without metadata while Publish Package freshly resolves 8.14.0 with relay.action-caller=v1. Align CI with release resolution without weakening assertions or changing production code."
},
"significance": "high"
},
{
"ts": 1791096850177,
"type": "decision",
"content": "Root-caused tail truncation to paced per-codepoint typing (5ms/atom) with no bracketed-paste framing for Claude; plan fixes it with capability-gated atomic paste + head/tail-anchored confirmation: Root-caused tail truncation to paced per-codepoint typing (5ms/atom) with no bracketed-paste framing for Claude; plan fixes it with capability-gated atomic paste + head/tail-anchored confirmation",
"raw": {
"question": "Root-caused tail truncation to paced per-codepoint typing (5ms/atom) with no bracketed-paste framing for Claude; plan fixes it with capability-gated atomic paste + head/tail-anchored confirmation",
"chosen": "Root-caused tail truncation to paced per-codepoint typing (5ms/atom) with no bracketed-paste framing for Claude; plan fixes it with capability-gated atomic paste + head/tail-anchored confirmation",
"alternatives": [],
"reasoning": "write_paced emits one VT atom per write_all, so a 6.7KB task spends ~33s only in the TUI composer; any composer clear in that window loses the head. devin.rs:12 wraps paste only for Devin. check_echo_in_output cannot detect the loss, so pty_worker.rs:2368 acks it as timeout_fallback success."
},
"significance": "high"
},
{
"ts": 1791099654001,
"type": "decision",
"content": "Reserve per-byte VTE parsing for chunks carrying the DECSET 2004 parameter: Reserve per-byte VTE parsing for chunks carrying the DECSET 2004 parameter",
"raw": {
"question": "Reserve per-byte VTE parsing for chunks carrying the DECSET 2004 parameter",
"chosen": "Reserve per-byte VTE parsing for chunks carrying the DECSET 2004 parameter",
"alternatives": [],
"reasoning": "The paste-capability latch parsed every PTY output byte with its own processor.advance() call until the mode was seen, which is permanent for any harness that never enables 2004. Scanning the chunk for the literal 2004 and otherwise bulk-parsing with one post-chunk mode check keeps enable+disable-in-one-read detection (both complete sequences must contain 2004) and still latches a sequence split across reads."
},
"significance": "high"
},
{
"ts": 1791099654447,
"type": "decision",
"content": "Treat the two failing CLI suites and four Rust hook-chain tests as sandbox environment, not branch regressions: Treat the two failing CLI suites and four Rust hook-chain tests as sandbox environment, not branch regressions",
"raw": {
"question": "Treat the two failing CLI suites and four Rust hook-chain tests as sandbox environment, not branch regressions",
"chosen": "Treat the two failing CLI suites and four Rust hook-chain tests as sandbox environment, not branch regressions",
"alternatives": [],
"reasoning": "sdk-client.test.ts and fleet-lifecycle-integration.test.ts assert no ambient gateway is inherited and read the real process env; this sandbox exports RELAY_BASE_URL, which no CI workflow sets. The spawner hook-chain tests are defeated by the sandbox's GIT_CONFIG_COUNT core.hooksPath=/dev/null override. Both fixed in .relayflow/check.sh (uncommitted) rather than by changing tests."
},
"significance": "high"
},
{
"ts": 1791100397805,
"type": "decision",
"content": "Review current PR and staged repair together; withhold clean signoff for unverified task success: Review current PR and staged repair together; withhold clean signoff for unverified task success",
"raw": {
"question": "Review current PR and staged repair together; withhold clean signoff for unverified task success",
"chosen": "Review current PR and staged repair together; withhold clean signoff for unverified task success",
"alternatives": [],
"reasoning": "The user requires full receipt confirmation; timeout_fallback still completes a verified spawn successfully."
},
"significance": "high"
},
{
"ts": 1791100495394,
"type": "decision",
"content": "Review PR 1893 requests changes: timeout success and incomplete-echo confirmations remain: Review PR 1893 requests changes: timeout success and incomplete-echo confirmations remain",
"raw": {
"question": "Review PR 1893 requests changes: timeout success and incomplete-echo confirmations remain",
"chosen": "Review PR 1893 requests changes: timeout success and incomplete-echo confirmations remain",
"alternatives": [],
"reasoning": "188 CLI tests and six PTY tests pass; temporary adversarial PTY integration reproduces echo_anchors for a missing middle and paste_summary for a marker plus 40-byte tail. Findings recorded in review.md; no review.clean."
},
"significance": "high"
},
{
"ts": 1791100867791,
"type": "decision",
"content": "Positive delivery confirmation requires whole-payload echo evidence; endpoint anchors and collapsed-paste markers are inconclusive, and an unconfirmed initial task resolves a verified fleet spawn as an explicit non-retryable unconfirmed outcome rather than success: Positive delivery confirmation requires whole-payload echo evidence; endpoint anchors and collapsed-paste markers are inconclusive, and an unconfirmed initial task resolves a verified fleet spawn as an explicit non-retryable unconfirmed outcome rather than success",
"raw": {
"question": "Positive delivery confirmation requires whole-payload echo evidence; endpoint anchors and collapsed-paste markers are inconclusive, and an unconfirmed initial task resolves a verified fleet spawn as an explicit non-retryable unconfirmed outcome rather than success",
"chosen": "Positive delivery confirmation requires whole-payload echo evidence; endpoint anchors and collapsed-paste markers are inconclusive, and an unconfirmed initial task resolves a verified fleet spawn as an explicit non-retryable unconfirmed outcome rather than success",
"alternatives": [],
"reasoning": "review.md P1 x3: timeout_fallback/anchors/paste_summary all reached the spawn success branch, so a swallowed or middle-truncated task was indistinguishable from a received one"
},
"significance": "high"
},
{
"ts": 1791101890744,
"type": "decision",
"content": "Report what the terminal actually showed (echo_incomplete / paste_summary) instead of labelling every unconfirmed ack timeout_fallback: Report what the terminal actually showed (echo_incomplete / paste_summary) instead of labelling every unconfirmed ack timeout_fallback",
"raw": {
"question": "Report what the terminal actually showed (echo_incomplete / paste_summary) instead of labelling every unconfirmed ack timeout_fallback",
"chosen": "Report what the terminal actually showed (echo_incomplete / paste_summary) instead of labelling every unconfirmed ack timeout_fallback",
"alternatives": [],
"reasoning": "Operators need to tell a collapsed paste apart from a silent agent; the runtime gates on verification_label_confirms_receipt, so richer labels cost nothing in correctness"
},
"significance": "high"
},
{
"ts": 1791101891202,
"type": "reflection",
"content": "Three P1s shared one root cause: confirmed() conflated 'some evidence' with 'full receipt'. Narrowing confirmation to whole-payload echo and gating the spawn result on the label fixed all three; 20 cold starts and the two adversarial fixture modes pass.",
"raw": {
"focalPoints": [
"verification-policy",
"spawn-confirmation"
],
"confidence": 0.85
},
"significance": "high",
"tags": [
"focal:verification-policy",
"focal:spawn-confirmation",
"confidence:0.85"
]
}
]
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"id": "compact_hbapxe3axu5d",
"version": 1,
"type": "compacted",
"compactedAt": "2026-10-06T13:43:02.276Z",
"sourceTrajectories": [
"traj_t5rhaj5534rg"
],
"dateRange": {
"start": "2026-10-06T13:38:30.682Z",
"end": "2026-10-06T13:42:41.615Z"
},
"summary": {
"totalDecisions": 2,
"totalEvents": 2,
"uniqueAgents": [
"default"
]
},
"decisionGroups": [
{
"category": "api",
"decisions": [
{
"question": "Implement reviewed-plan Part 1; defer automatic trust acceptance pending real captures",
"chosen": "Implement reviewed-plan Part 1; defer automatic trust acceptance pending real captures",
"reasoning": "No Devin binary or raw trust captures are available. Preserve the existing Claude planner and generic Devin approval restrictions. Add the Devin veto to both startup gate paths; deadline uses detector and verification ticks. CLI help inspection and advisory path corroboration remain Part 2 prerequisites.",
"fromTrajectory": "traj_t5rhaj5534rg"
}
]
},
{
"category": "testing",
"decisions": [
{
"question": "Run broker validation without inherited Git config injection",
"chosen": "Run broker validation without inherited Git config injection",
"reasoning": "The default suite passed 1374 tests and failed four hook-chain tests because the runner injects core.hooksPath. With GIT_CONFIG_COUNT unset only in the test process, all four hook tests pass and all 1378 broker unit tests pass.",
"fromTrajectory": "traj_t5rhaj5534rg"
}
]
}
],
"keyLearnings": [],
"keyFindings": [],
"filesAffected": [],
"commits": []
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Trajectory Compaction: Oct 6, 2026 - Oct 6, 2026

## Summary
- Sessions: 1
- Decisions: 2
- Events: 2
- Agents: default
- Files: 0
- Commits: 0

## Api
- Implement reviewed-plan Part 1; defer automatic trust acceptance pending real captures -> Implement reviewed-plan Part 1; defer automatic trust acceptance pending real captures (traj_t5rhaj5534rg)

## Testing
- Run broker validation without inherited Git config injection -> Run broker validation without inherited Git config injection (traj_t5rhaj5534rg)

## Key Learnings
- None

## Key Findings
- None
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"id": "compact_o598x260wugy",
"version": 1,
"type": "compacted",
"compactedAt": "2026-10-04T14:54:40.616Z",
"sourceTrajectories": [
"traj_ro3v7jmydpo5"
],
"dateRange": {
"start": "2026-10-04T14:42:43.542Z",
"end": "2026-10-04T14:54:28.331Z"
},
"summary": {
"totalDecisions": 4,
"totalEvents": 4,
"uniqueAgents": [
"default"
]
},
"decisionGroups": [
{
"category": "other",
"decisions": [
{
"question": "Keep SDK error unions unchanged; use CLI-owned pending and collision errors with known-class exit codes",
"chosen": "Keep SDK error unions unchanged; use CLI-owned pending and collision errors with known-class exit codes",
"reasoning": "Preserve SDK behavior and sandbox safety; uncertain accepted spawns exit 8 with diagnostics.",
"fromTrajectory": "traj_ro3v7jmydpo5"
}
]
},
{
"category": "security",
"decisions": [
{
"question": "Ship removal waits opt-in; use get not-found and deadline list absence, never released status",
"chosen": "Ship removal waits opt-in; use get not-found and deadline list absence, never released status",
"reasoning": "No workspace credential environment variables or machine-global agent-relay configuration are available for live deletion verification. Reviewed-plan section 3.7 requires opt-in in this case. Exit 8 requires observed presence; all-read failures keep the asynchronous acknowledgement.",
"fromTrajectory": "traj_ro3v7jmydpo5"
}
]
},
{
"category": "naming",
"decisions": [
{
"question": "Keep existing asynchronous broker identity cleanup; expose safe name-reuse guidance",
"chosen": "Keep existing asynchronous broker identity cleanup; expose safe name-reuse guidance",
"reasoning": "Cleanup is already scheduled for owned failed spawns. A collision never grants ownership of the incumbent identity. Fleet release adds removal evidence to its existing JSON only with --wait.",
"fromTrajectory": "traj_ro3v7jmydpo5"
}
]
},
{
"category": "api",
"decisions": [
{
"question": "Final invocation reads preserve the actual requested readiness contract",
"chosen": "Final invocation reads preserve the actual requested readiness contract",
"reasoning": "SDK confirm:true also requests verify_ready by default. A late terminal result must have ready:true; live heartbeat recovery remains explicitly confirmed:false. Late persona child acknowledgements stay pending and retain their child invocation/node.",
"fromTrajectory": "traj_ro3v7jmydpo5"
}
]
}
],
"keyLearnings": [],
"keyFindings": [],
"filesAffected": [
".agentworkforce/trajectories/fleet-spawn-fix/active/traj_ro3v7jmydpo5/trajectory.json",
"CHANGELOG.md",
"crates/broker/src/runtime/relaycast_events.rs",
"packages/cli/README.md",
"packages/cli/src/cli/commands/agent.test.ts",
"packages/cli/src/cli/commands/agent.ts",
"packages/cli/src/cli/commands/fleet.test.ts",
"packages/cli/src/cli/commands/fleet.ts",
"packages/cli/src/cli/lib/agent-registration.ts",
"packages/cli/src/cli/lib/agent-removal.test.ts",
"packages/cli/src/cli/lib/agent-removal.ts",
"packages/cli/src/cli/lib/fleet-live-agents.ts",
"packages/cli/src/cli/lib/sdk-command.test.ts",
"packages/cli/src/cli/lib/sdk-command.ts",
"packages/cli/src/cli/lib/spawn-liveness.test.ts",
"packages/cli/src/cli/lib/spawn-liveness.ts"
],
"commits": [
"5c8b798"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Trajectory Compaction: Oct 4, 2026 - Oct 4, 2026

## Summary
- Sessions: 1
- Decisions: 4
- Events: 4
- Agents: default
- Files: 16
- Commits: 1

## Other
- Keep SDK error unions unchanged; use CLI-owned pending and collision errors with known-class exit codes -> Keep SDK error unions unchanged; use CLI-owned pending and collision errors with known-class exit codes (traj_ro3v7jmydpo5)

## Security
- Ship removal waits opt-in; use get not-found and deadline list absence, never released status -> Ship removal waits opt-in; use get not-found and deadline list absence, never released status (traj_ro3v7jmydpo5)

## Naming
- Keep existing asynchronous broker identity cleanup; expose safe name-reuse guidance -> Keep existing asynchronous broker identity cleanup; expose safe name-reuse guidance (traj_ro3v7jmydpo5)

## Api
- Final invocation reads preserve the actual requested readiness contract -> Final invocation reads preserve the actual requested readiness contract (traj_ro3v7jmydpo5)

## Key Learnings
- None

## Key Findings
- None

## Completion evidence

CLI and MCP pending spawn evidence, fresh target-node heartbeat checks, sandbox preservation, opt-in name-clearance waits, readable registration collisions, and roster heartbeat ages are implemented. SDK behavior and workflow files are unchanged.

Full CLI suite: 2,021 passed, 17 skipped with inherited RELAY_BASE_URL unset. Typechecking and the latest 72 MCP regression tests passed. Cargo is unavailable, so the Rust formatter regression was not run. No live workspace credentials were available; removal waits remain opt-in under reviewed-plan section 3.7.
Loading
Loading