Skip to content

fix: new review rounds#82

Merged
pedronauck merged 12 commits into
mainfrom
fixes
Apr 28, 2026
Merged

fix: new review rounds#82
pedronauck merged 12 commits into
mainfrom
fixes

Conversation

@pedronauck
Copy link
Copy Markdown
Member

@pedronauck pedronauck commented Apr 28, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added workspace-scoped agent and skill queries and APIs for filtered resolution.
    • Added skill management endpoints with list, get, and content retrieval.
    • Added terminal task operations (complete, fail, cancel) with proper ownership and token management for historical channels.
    • Added Unix socket path length validation to prevent configuration errors.
  • Improvements

    • Network peers and channels now display in deterministic order with improved sorting by recency and metadata.
    • Message visibility filtering now correctly isolates direct traffic from public channel timelines while preserving peer room history.
    • Workspace details now merge agents from both resolved workspace and agent catalog sources.
  • Documentation

    • Standardized terminology across system documentation from "environment" to "sandbox" for consistent configuration and API references.

@pedronauck pedronauck self-assigned this Apr 28, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 28, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 218e918c-3b0d-47ee-8bca-70a8c7408a72

📥 Commits

Reviewing files that changed from the base of the PR and between 4ec51e8 and 7b55733.

⛔ Files ignored due to path filters (4)
  • .compozy/tasks/qa-rounds/reviews-003/_meta.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-003/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-003/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-003/issue_003.md is excluded by !**/*.md
📒 Files selected for processing (2)
  • internal/api/core/network_details.go
  • internal/api/core/network_test.go

Walkthrough

Large-scale refactoring renaming "environment" to "sandbox" terminology across API contracts, handlers, settings, and ACP layer. Includes workspace-scoped agent resolution, historical channel task-run handling with token-fencing, deterministic network peer/channel sorting, and corresponding CLI/integration test updates.

Changes

Cohort / File(s) Summary
Architecture & Build
.compozy/tasks/.../_architecture.html, .gitignore, Makefile, conversa.jsonl
Architecture diagram and diagram text updated to "sandbox" terminology; gitignore expanded for hooks/ and loops/ directories; Makefile adds bun-lint, bun-typecheck, bun-test phony targets.
ACP Layer
internal/acp/client.go, internal/acp/client_test.go, internal/acp/handlers.go, internal/acp/launcher.go, internal/acp/launcher_tool_host_test.go, internal/acp/tool_host.go, internal/acp/types.go
Rewires launcher, tool-host, and process types to use internal/sandbox abstractions instead of internal/environment; type aliases and method signatures updated; test naming and assertions aligned with sandbox terminology.
API Contract Definitions
internal/api/contract/agents.go, internal/api/contract/agents_test.go, internal/api/contract/contract.go, internal/api/contract/contract_test.go, internal/api/contract/settings.go
Permission payloads swap environment_profiles for sandbox_profiles; session/workspace DTOs replace Environment/EnvironmentRef fields with Sandbox/SandboxRef; settings types renamed throughout (SettingsEnvironmentPayloadSettingsSandboxPayload, etc.); new SettingsCollectionSandboxes constant.
API Core Handlers & Conversions
internal/api/core/agent_spawn.go, internal/api/core/conversions.go, internal/api/core/conversions_parsers_test.go, internal/api/core/handlers.go, internal/api/core/handlers_test.go, internal/api/core/workspaces.go
Permission and session payloads converted to sandbox types; workspace-scoped agent resolution added via query parameter and helper merging workspace/catalog agents; agent list/detail endpoints support optional workspace query; workspace detail derives agents from catalog merge.
Network & Peer/Timeline Handling
internal/api/core/network.go, internal/api/core/network_details.go, internal/api/core/network_test.go
Peer and channel payloads now deterministically sorted by effective recency, local-peer precedence, display name, and peer ID; timeline messages filtered by visibility (public-channel vs visible-peer); cursor pagination refactored to use in-memory view pagination; channel aggregation and historical participant counting updated for filtered messages; new deterministic sort comparators and visibility-filtering loaders.
Settings & Coverage Helpers
internal/api/core/coverage_helpers_test.go, internal/api/core/settings.go, internal/api/core/settings_internal_test.go, internal/api/core/settings_test.go
Settings endpoints and handlers rename from environments to sandboxes; collection lookup and request parsing updated; new test coverage for network channel and peer sorting determinism with recency selection rules; helper functions renamed (settingsEnvironmentItemPayloadsettingsSandboxItemPayload, etc.).
HTTP & UDS API Routing
internal/api/httpapi/handlers_test.go, internal/api/httpapi/helpers_test.go, internal/api/httpapi/httpapi_integration_test.go, internal/api/httpapi/routes.go, internal/api/spec/settings_test.go, internal/api/spec/spec.go, internal/api/udsapi/routes.go, internal/api/udsapi/handlers_test.go, internal/api/udsapi/helpers_test.go, internal/api/udsapi/server.go, internal/api/udsapi/server_test.go, internal/api/udsapi/udsapi_integration_test.go
Routes /api/settings/environments replaced with /api/settings/sandboxes; OpenAPI spec updated with sandbox endpoints; UDS server adds ErrSocketPathTooLong validation (103-byte max); integration runtimes switched from environmentlocal to sandboxlocal registry; test helpers updated to reference sandbox settings collections.
Task Run Integration & Token-Fencing
internal/api/core/tasks_terminal_integration_test.go, internal/api/core/tasks_token_fence_integration_test.go, internal/api/core/tasks_test.go, internal/api/udsapi/agent_tasks_bindings_test.go, internal/api/udsapi/agent_tasks_test.go
New integration tests for terminal task-run handlers (complete, fail, cancel) validating run state and channel preservation; token-fencing tests verify historical run ownership, claim token redaction, and mixed-ownership override semantics; task lease responses now echo SessionID and CoordinationChannelID.
CLI Agent & Config
internal/cli/agent.go, internal/cli/agent_commands_test.go, internal/cli/agent_kernel_test.go, internal/cli/command_paths_test.go, internal/cli/config.go, internal/cli/config_test.go, internal/cli/daemon.go, internal/cli/format_test.go, internal/cli/helpers_test.go, internal/cli/client.go, internal/cli/client_test.go
agent list and agent info add --workspace flag support via new AgentQuery and agentQueryFromCommand helper; new skill query/client APIs (ListSkills, GetSkill, GetSkillContent) with workspace filtering; config mutation paths switch from defaults.environment to defaults.sandbox; test stubs updated for query-based client signatures; daemon relaunch passes environment via Sandbox field.
Agent Identity & Workspace Resolution
internal/agentidentity/identity.go, internal/api/core/error_paths_test.go, internal/api/core/session_workspace.go, internal/api/core/session_workspace_internal_test.go, internal/api/core/memory_workspace_test.go
Agent identity error comment updated to "sandbox" terminology; new error code path for ErrWorkspaceResolverUnavailable returning HTTP 503; workspace test adds coverage for agent catalog merging into workspace agent list and "not available in workspace" errors.
CLI Historical Channel Integration Tests
internal/cli/cli_historical_mixed_ownership_integration_test.go, internal/cli/cli_historical_task_run_terminal_integration_test.go, internal/cli/cli_integration_test.go
New integration tests validating historical-channel task runs across daemon restarts: mixed-ownership bindings preservation, human override cancellation, token-fencing validation, session/coordination-channel binding persistence, and event emit verification; daemon setup updated to use sandbox registry; task claim/complete/fail operations on historical channels tested with token redaction and "not leaked" assertions.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • refactor: project structure #7 — Refactoring PR that modified the same internal/api/contract and core files being updated for sandbox terminology alignment; contracts and handler plumbing changes overlap.
  • feat: add workspace entity #5 — Workspace/session/HTTP API surface modifications; workspace resolution and agent-catalog integration closely align with workspace-scoped agent feature additions in this PR.
  • feat: production grade adjustments #66 — Internal/acp files modified for sandbox type rewiring; overlaps with ACP client/types/launcher changes for launcher and tool-host abstraction updates.
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.86% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title 'fix: new review rounds' is vague and does not clearly describe the substantive changes in this changeset, which involve a comprehensive environment-to-sandbox terminology migration across dozens of files. Replace with a specific title that captures the main refactoring, such as 'refactor: migrate environment terminology to sandbox across API and CLI' or 'feat: rename environment to sandbox throughout codebase'.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
.compozy/tasks/_archived/20260417-021722-sandbox/_architecture.html (1)

242-243: ⚠️ Potential issue | 🟡 Minor

Complete the terminology migration in the two remaining boundary labels.

The diagram still says “Environment package” in two places while the package path is already internal/sandbox/. Please rename those labels to “Sandbox package” to avoid mixed terminology in the same architecture view.

Based on learnings: Renames must update code, storage, APIs, CLI, extensions, specs, RFCs, and .compozy/tasks/* artifacts all in a single change.

Also applies to: 555-556, 569-570

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.compozy/tasks/_archived/20260417-021722-sandbox/_architecture.html around
lines 242 - 243, Replace the remaining visible boundary labels that read
"Environment package" with "Sandbox package" in the architecture artifact where
the package path is already internal/sandbox/ (the shown label plus the two
other occurrences called out in the review); ensure this is part of the single
rename change that also updates any matching terminology across code, storage,
APIs, CLI, extensions, specs, RFCs and all .compozy/tasks/* artifacts so there
is no mixed terminology in the repo.
internal/cli/config_test.go (1)

193-283: ⚠️ Potential issue | 🟠 Major

Use required t.Run("Should ...") subtests in modified tests.

Lines 193 and 238 keep scenario logic in top-level test bodies. Please move scenarios into t.Run("Should ...") subtests (with t.Parallel() per subtest) to match the repo’s Go test policy.

Suggested pattern
 func TestConfigSetRedactsSensitiveMutationOutputAndManagedModeBlocksMutation(t *testing.T) {
 	t.Parallel()
+	t.Run("Should redact sandbox env mutation output", func(t *testing.T) {
+		t.Parallel()
+		// existing redaction assertions...
+	})
+	t.Run("Should block mutation in managed mode", func(t *testing.T) {
+		t.Parallel()
+		// existing managed-mode assertions...
+	})
-	// existing inline scenarios...
 }

As per coding guidelines, "**/*_test.go: Use t.Run('Should ...') subtests with t.Parallel as default (opt-out only with t.Setenv) in Go test files".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/config_test.go` around lines 193 - 283, Both tests currently run
multiple scenarios in their top-level bodies; split each scenario into
t.Run("Should ...") subtests and call t.Parallel() inside each subtest. For
TestConfigOutputRedactsMCPAndSandboxSecrets, create subtests (e.g., "Should
redact secrets in config list" and "Should return redacted value for config
get") and move the list/get scenario code into those t.Run blocks, leaving
helper calls like executeRootCommand, writeFile, and json.Unmarshal unchanged.
For TestConfigSetRedactsSensitiveMutationOutputAndManagedModeBlocksMutation,
create separate t.Run subtests (e.g., "Should redact set output for sensitive
value" and "Should block mutations in managed mode") and move the corresponding
set/assert logic into them, ensuring each subtest calls t.Parallel().
internal/api/core/network_details.go (2)

758-800: ⚠️ Potential issue | 🟠 Major

Use the same filtered history for HistoricalParticipantCount.

history is built from filterPublicChannelTimelineMessages(messages), but HistoricalParticipantCount is computed from the unfiltered messages. A channel can now report participants that never appear in the visible timeline or kind counts.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/network_details.go` around lines 758 - 800, The
HistoricalParticipantCount is computed from the unfiltered messages but the rest
of the channel summary uses the filtered history built by
summarizeNetworkMessageHistory(filterPublicChannelTimelineMessages(messages));
update the call to summarizeHistoricalParticipantCount to use the same filtered
history (e.g. pass history.conversation or the result of
filterPublicChannelTimelineMessages(messages)) instead of the raw messages so
participants reflect the visible timeline; adjust where
summarizeHistoricalParticipantCount is invoked in this function to reference
history rather than messages.

583-593: ⚠️ Potential issue | 🟠 Major

Keep channel-list participant counts on the visible slice.

recordHistoricalParticipant(...) now runs before the public-visibility gate, so HistoricalParticipantCount includes peers that only appeared in directed traffic while MessageCount, previews, and the channel timeline hide those messages. That makes the aggregate internally inconsistent and exposes hidden activity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/network_details.go` around lines 583 - 593, The
applyNetworkChannelMessages function is recording historical participants for
every message before checking visibility, causing HistoricalParticipantCount to
include peers from non-public (hidden) messages; update
applyNetworkChannelMessages so that
recordHistoricalParticipant(message.PeerFrom) and
recordHistoricalParticipant(message.PeerTo) are only called for messages that
pass isPublicChannelTimelineMessage(message) (i.e., move those calls to after
the visibility gate), and consider deferring
ensureNetworkChannelAggregate(aggregates, message.Channel) until after the
visibility check so aggregates aren’t created or mutated for non-public
messages.
🧹 Nitpick comments (7)
internal/cli/install_test.go (1)

249-256: Consider using the returned model from Update() for idiomatic Bubble Tea usage.

While the current code works because installWizardModel uses pointer receivers and mutates in place, idiomatic Bubble Tea code typically uses the returned model value. This makes the test more resilient to future refactoring.

♻️ Suggested refactor for idiomatic Bubble Tea patterns
 		model.modelInput.SetValue("")
-		model.Update(tea.KeyMsg{Type: tea.KeyEnter})
+		updated, _ := model.Update(tea.KeyMsg{Type: tea.KeyEnter})
+		model = updated.(*installWizardModel)
 		if model.errText != "model is required" {
 			t.Fatalf("errText = %q, want model is required", model.errText)
 		}

 		model.modelInput.SetValue("gpt-5.4")
-		model.Update(tea.KeyMsg{Type: tea.KeyEnter})
+		updated, _ = model.Update(tea.KeyMsg{Type: tea.KeyEnter})
+		model = updated.(*installWizardModel)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/install_test.go` around lines 249 - 256, The test mutates
installWizardModel via pointer-receivers but doesn't use the value returned by
Update; change the test to capture and use the returned tea.Model from
model.Update(...) to follow idiomatic Bubble Tea usage (e.g., assign back to
model = model.Update(tea.KeyMsg{Type: tea.KeyEnter}).(installWizardModel)) so
subsequent assertions (checking model.errText and continuing with
model.modelInput.SetValue("gpt-5.4") and the next Update) operate on the
returned model value; update references to model.modelInput and model.errText
accordingly after casting the returned tea.Model to installWizardModel.
internal/cli/config_test.go (1)

242-251: Add a negative regression for legacy environments.* mutation paths.

After the rename to sandboxes.*, add an explicit assertion that config set environments.dev.backend local fails. This prevents accidental alias/fallback reintroduction.

Based on learnings, "Renames must update code, storage, APIs, CLI, extensions, specs, RFCs, and .compozy/tasks/* artifacts all in a single change. Do not create aliases, dual fields, or schema fallback paths."

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/config_test.go` around lines 242 - 251, Add a negative
regression test in the existing config tests to assert that the legacy mutation
path "environments.dev.backend" is rejected after the rename to "sandboxes.*":
call executeRootCommand(t, deps, "config", "set", "environments.dev.backend",
"local") and assert that it returns a non-nil err (use t.Fatalf or t.Error with
the error when nil) to ensure no alias/fallback is accepted; place this
assertion near the other config set calls in internal/cli/config_test.go where
executeRootCommand is used so it runs in the same setup and uses the same
deps/test helper.
internal/cli/config.go (1)

97-97: Add coverage for the new defaults.sandbox mutation key.

Line 97 adds new mutable surface (defaults.sandbox), but this change should be pinned with a direct CLI regression test (accept defaults.sandbox, reject legacy defaults.environment) to avoid rename drift.

As per coding guidelines, "**/*.go: Maintain 80% code coverage per Go package".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/config.go` at line 97, Add a focused CLI unit test that
exercises the new mutation key mapping so the command accepts "defaults.sandbox"
and rejects the legacy "defaults.environment": create a test (e.g.,
TestConfigMutations_DefaultsSandbox) in the same package that invokes the config
set command parsing/handler used by configSetString (the mutable-key
registration point), assert success when passing "defaults.sandbox" and assert
failure or validation error when passing "defaults.environment"; ensure the test
uses the same function/command entry used by the CLI (the code path that
registers configSetString) so it covers the new mutable surface and prevents
rename drift.
internal/api/core/workspaces.go (1)

105-108: Consider a defensive nil guard in workspaceDetailAgents.

This helper currently assumes resolved is always non-nil; adding a guard would make future reuse safer.

Suggested hardening
 func (h *BaseHandlers) workspaceDetailAgents(
 	ctx context.Context,
 	resolved *workspacepkg.ResolvedWorkspace,
 ) ([]aghconfig.AgentDef, error) {
+	if resolved == nil {
+		return nil, nil
+	}
 	merged := make(map[string]aghconfig.AgentDef, len(resolved.Agents))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/workspaces.go` around lines 105 - 108, Add a defensive nil
check at the start of BaseHandlers.workspaceDetailAgents to handle a nil
resolved workspace: if resolved is nil, immediately return an empty
[]aghconfig.AgentDef and nil error (or a clear error if you prefer explicit
failure), ensuring callers don't panic; update any early references to resolved
within workspaceDetailAgents to assume non-nil after the guard.
internal/cli/agent.go (1)

89-99: Consolidate duplicated workspace-flag parsing helper.

agentWorkspaceFlag duplicates skillWorkspaceFlag behavior in the same package. Reusing one helper avoids divergence in future validation/error-message changes.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/agent.go` around lines 89 - 99, agentWorkspaceFlag duplicates
skillWorkspaceFlag’s logic; replace the duplication by reusing the existing
helper: remove agentWorkspaceFlag and call skillWorkspaceFlag from the same
package (or extract a single shared helper named workspaceFlag and update both
agentWorkspaceFlag and skillWorkspaceFlag callers to use it). Ensure the
replacement preserves the same error behavior and messages (use
skillWorkspaceFlag’s signature and return types) and update any references to
agentWorkspaceFlag to point to the consolidated helper (function names to look
for: agentWorkspaceFlag, skillWorkspaceFlag, workspaceFlag).
internal/api/core/settings_test.go (1)

1009-1017: Assert the /sandboxes/:name response body too.

This case currently proves only that the handler delegated to CollectionSandboxes. It would still pass if :name selection broke and the endpoint returned the wrong item. Please decode the response and assert the returned sandbox name/profile for this renamed route.

As per coding guidelines, "**/*_test.go: Always assert both HTTP status code AND response body (never status-code-only) in Go tests".

Also applies to: 1097-1208

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/settings_test.go` around lines 1009 - 1017, The test
currently only checks that the handler requested
settingspkg.CollectionSandboxes; extend the assert func for the "get sandbox"
case to also verify the HTTP response status and decoded response body: read and
assert the response status is http.StatusOK, decode the JSON response into the
sandbox struct (or a minimal struct with Name and Profile), and assert the
returned sandbox's Name == "local" and Profile matches the expected profile;
update the assert closure that references
service.LastListCollectionRequest.Collection and the path
"/api/settings/sandboxes/local" so both status code and response body fields are
validated.
internal/api/core/coverage_helpers_test.go (1)

194-288: Add t.Parallel() to the new top-level sort tests.

Both new top-level tests are independent and read-only, but unlike the rest of this file they run serially. That drifts from the package’s normal test shape for no clear benefit.

As per coding guidelines, "**/*_test.go: Use t.Run('Should ...') subtests with t.Parallel as default (opt-out only with t.Setenv) in Go test files".

Also applies to: 290-354

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/coverage_helpers_test.go` around lines 194 - 288, The
TestSortedNetworkChannelPayloads top-level test is missing t.Parallel(), causing
its subtests to run serially; add t.Parallel() as the first statement inside the
TestSortedNetworkChannelPayloads function to mark the whole test as parallel,
and do the same for the sibling top-level sort test that contains the remaining
subtests (the other top-level test referenced in the review). Ensure you place
the call before any t.Run blocks so the subtests keep their existing
t.Parallel() calls and run concurrently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/api/core/handlers.go`:
- Around line 538-550: The nil-check in BaseHandlers.workspaceAgentDefs
currently returns a generic fmt.Errorf when h.Workspaces is nil; instead
introduce and return a dedicated sentinel error (e.g.,
workspace.ErrWorkspaceResolverUnavailable) from this function (or a well-named
package-level sentinel in the workspace package) so callers can detect a missing
injected dependency, and update statusForWorkspaceError to map that sentinel to
a 503 (or other capability-unavailable status) so GET /api/agents... yields a
deterministic dependency-unavailable response; locate the check in
workspaceAgentDefs (h.Workspaces) and the error-mapping in
statusForWorkspaceError to implement the sentinel and mapping.

In `@internal/api/core/network_details.go`:
- Around line 1233-1242: The helper listTimelineRawMessages currently wipes out
pagination by resetting query.BeforeMessageID, query.AfterMessageID, and
query.Limit before calling networkStore.ListNetworkMessages, causing
full-history reads; restore and pass through the original cursor fields instead
of clearing them (i.e., stop modifying the incoming query in
listTimelineRawMessages) or introduce an explicit parameter or a new store
method (e.g., ListNetworkMessagesFullHistory) if a true full-scan is required;
ensure calls that expect paginated results continue to use the unmodified query
and only perform full reads when explicitly requested.

In `@internal/api/core/tasks_terminal_integration_test.go`:
- Around line 111-112: The test is comparing JSON payloads as raw strings which
is brittle; instead, parse capture.failure.Metadata into a generic JSON
structure (e.g., map[string]interface{} or a struct) and compare it semantically
to the expected JSON (e.g., expected :=
map[string]interface{}{"step":"claim","mode":"historical-http"}) using deep
equality (reflect.DeepEqual or cmp.Equal) and only call t.Fatalf with the
marshaled/pretty-printed values when they differ; apply the same change for the
other raw-string comparisons mentioned around the capture variables at the other
locations (lines referenced: the blocks containing capture.failure.Metadata
checks and the similar comparisons at 157-158 and 210-215).

In `@internal/cli/skill_commands.go`:
- Around line 121-130: Trim/normalize the incoming skill name before deciding
daemon vs local handling so both paths see the same value: in
runSkillViewCommand call the same normalization used by findSkillByName (e.g.,
strings.TrimSpace(name) or the project’s canonical normalize function) and then
pass the normalized name into runDaemonSkillViewCommand and
runLocalSkillViewCommand; update references to the local variable (name) in
runSkillViewCommand so both branches use the normalized skill name.

In `@internal/cli/skill_workspace.go`:
- Around line 263-269: The Source field is returned raw in
skillInfoItemFromRecord causing inconsistent output versus
skillListItemsFromRecords which trims record.Source; update
skillInfoItemFromRecord to normalize Source the same way (e.g., use
strings.TrimSpace on record.Source) before assigning to skillInfoItem.Source so
both skillInfoItemFromRecord and skillListItemsFromRecords produce consistent
Source values.

---

Outside diff comments:
In @.compozy/tasks/_archived/20260417-021722-sandbox/_architecture.html:
- Around line 242-243: Replace the remaining visible boundary labels that read
"Environment package" with "Sandbox package" in the architecture artifact where
the package path is already internal/sandbox/ (the shown label plus the two
other occurrences called out in the review); ensure this is part of the single
rename change that also updates any matching terminology across code, storage,
APIs, CLI, extensions, specs, RFCs and all .compozy/tasks/* artifacts so there
is no mixed terminology in the repo.

In `@internal/api/core/network_details.go`:
- Around line 758-800: The HistoricalParticipantCount is computed from the
unfiltered messages but the rest of the channel summary uses the filtered
history built by
summarizeNetworkMessageHistory(filterPublicChannelTimelineMessages(messages));
update the call to summarizeHistoricalParticipantCount to use the same filtered
history (e.g. pass history.conversation or the result of
filterPublicChannelTimelineMessages(messages)) instead of the raw messages so
participants reflect the visible timeline; adjust where
summarizeHistoricalParticipantCount is invoked in this function to reference
history rather than messages.
- Around line 583-593: The applyNetworkChannelMessages function is recording
historical participants for every message before checking visibility, causing
HistoricalParticipantCount to include peers from non-public (hidden) messages;
update applyNetworkChannelMessages so that
recordHistoricalParticipant(message.PeerFrom) and
recordHistoricalParticipant(message.PeerTo) are only called for messages that
pass isPublicChannelTimelineMessage(message) (i.e., move those calls to after
the visibility gate), and consider deferring
ensureNetworkChannelAggregate(aggregates, message.Channel) until after the
visibility check so aggregates aren’t created or mutated for non-public
messages.

In `@internal/cli/config_test.go`:
- Around line 193-283: Both tests currently run multiple scenarios in their
top-level bodies; split each scenario into t.Run("Should ...") subtests and call
t.Parallel() inside each subtest. For
TestConfigOutputRedactsMCPAndSandboxSecrets, create subtests (e.g., "Should
redact secrets in config list" and "Should return redacted value for config
get") and move the list/get scenario code into those t.Run blocks, leaving
helper calls like executeRootCommand, writeFile, and json.Unmarshal unchanged.
For TestConfigSetRedactsSensitiveMutationOutputAndManagedModeBlocksMutation,
create separate t.Run subtests (e.g., "Should redact set output for sensitive
value" and "Should block mutations in managed mode") and move the corresponding
set/assert logic into them, ensuring each subtest calls t.Parallel().

---

Nitpick comments:
In `@internal/api/core/coverage_helpers_test.go`:
- Around line 194-288: The TestSortedNetworkChannelPayloads top-level test is
missing t.Parallel(), causing its subtests to run serially; add t.Parallel() as
the first statement inside the TestSortedNetworkChannelPayloads function to mark
the whole test as parallel, and do the same for the sibling top-level sort test
that contains the remaining subtests (the other top-level test referenced in the
review). Ensure you place the call before any t.Run blocks so the subtests keep
their existing t.Parallel() calls and run concurrently.

In `@internal/api/core/settings_test.go`:
- Around line 1009-1017: The test currently only checks that the handler
requested settingspkg.CollectionSandboxes; extend the assert func for the "get
sandbox" case to also verify the HTTP response status and decoded response body:
read and assert the response status is http.StatusOK, decode the JSON response
into the sandbox struct (or a minimal struct with Name and Profile), and assert
the returned sandbox's Name == "local" and Profile matches the expected profile;
update the assert closure that references
service.LastListCollectionRequest.Collection and the path
"/api/settings/sandboxes/local" so both status code and response body fields are
validated.

In `@internal/api/core/workspaces.go`:
- Around line 105-108: Add a defensive nil check at the start of
BaseHandlers.workspaceDetailAgents to handle a nil resolved workspace: if
resolved is nil, immediately return an empty []aghconfig.AgentDef and nil error
(or a clear error if you prefer explicit failure), ensuring callers don't panic;
update any early references to resolved within workspaceDetailAgents to assume
non-nil after the guard.

In `@internal/cli/agent.go`:
- Around line 89-99: agentWorkspaceFlag duplicates skillWorkspaceFlag’s logic;
replace the duplication by reusing the existing helper: remove
agentWorkspaceFlag and call skillWorkspaceFlag from the same package (or extract
a single shared helper named workspaceFlag and update both agentWorkspaceFlag
and skillWorkspaceFlag callers to use it). Ensure the replacement preserves the
same error behavior and messages (use skillWorkspaceFlag’s signature and return
types) and update any references to agentWorkspaceFlag to point to the
consolidated helper (function names to look for: agentWorkspaceFlag,
skillWorkspaceFlag, workspaceFlag).

In `@internal/cli/config_test.go`:
- Around line 242-251: Add a negative regression test in the existing config
tests to assert that the legacy mutation path "environments.dev.backend" is
rejected after the rename to "sandboxes.*": call executeRootCommand(t, deps,
"config", "set", "environments.dev.backend", "local") and assert that it returns
a non-nil err (use t.Fatalf or t.Error with the error when nil) to ensure no
alias/fallback is accepted; place this assertion near the other config set calls
in internal/cli/config_test.go where executeRootCommand is used so it runs in
the same setup and uses the same deps/test helper.

In `@internal/cli/config.go`:
- Line 97: Add a focused CLI unit test that exercises the new mutation key
mapping so the command accepts "defaults.sandbox" and rejects the legacy
"defaults.environment": create a test (e.g.,
TestConfigMutations_DefaultsSandbox) in the same package that invokes the config
set command parsing/handler used by configSetString (the mutable-key
registration point), assert success when passing "defaults.sandbox" and assert
failure or validation error when passing "defaults.environment"; ensure the test
uses the same function/command entry used by the CLI (the code path that
registers configSetString) so it covers the new mutable surface and prevents
rename drift.

In `@internal/cli/install_test.go`:
- Around line 249-256: The test mutates installWizardModel via pointer-receivers
but doesn't use the value returned by Update; change the test to capture and use
the returned tea.Model from model.Update(...) to follow idiomatic Bubble Tea
usage (e.g., assign back to model = model.Update(tea.KeyMsg{Type:
tea.KeyEnter}).(installWizardModel)) so subsequent assertions (checking
model.errText and continuing with model.modelInput.SetValue("gpt-5.4") and the
next Update) operate on the returned model value; update references to
model.modelInput and model.errText accordingly after casting the returned
tea.Model to installWizardModel.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c01a8e1f-da15-4aed-a820-e09906db9e61

📥 Commits

Reviewing files that changed from the base of the PR and between ffc7923 and f02d5f7.

⛔ Files ignored due to path filters (209)
  • .agents/skills/agh-qa-bootstrap/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/agh-qa-bootstrap/references/bootstrap-contract.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/agh-qa-bootstrap/scripts/__pycache__/bootstrap-qa-env.cpython-314.pyc is excluded by !**/*.pyc, !.agents/**
  • .agents/skills/agh-qa-bootstrap/scripts/bootstrap-qa-env.py is excluded by !.agents/**
  • .agents/skills/agh-worktree-isolation/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/assets/issue-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/assets/verification-report-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/checklist.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/references/web-ui-qa.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-execution/scripts/__pycache__/discover-project-contract.cpython-314.pyc is excluded by !**/*.pyc, !.agents/**
  • .agents/skills/qa-execution/scripts/discover-project-contract.py is excluded by !.agents/**
  • .agents/skills/qa-report/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/assets/issue-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/bug_report_templates.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/regression_testing.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/qa-report/references/test_case_templates.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/assets/final-report-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/assets/scenario-issue-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/references/evidence-checklist.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/references/scenario-matrix.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/real-scenario-qa/scripts/init-scenario-workspace.sh is excluded by !.agents/**
  • .agents/skills/skill-best-practices/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/skill-best-practices/references/checklist.md is excluded by !**/*.md, !.agents/**
  • .codex/plans/2026-04-27-codex-loop-global.md is excluded by !**/*.md
  • .codex/plans/2026-04-27-qa-bootstrap-hardening.md is excluded by !**/*.md
  • .codex/plans/2026-04-28-real-scenario-qa-behavioral-hardening.md is excluded by !**/*.md
  • .codex/plans/2026-04-28-sandbox-hard-cut.md is excluded by !**/*.md
  • .compozy/tasks/_archived/1776788383759-3e7caf89-redesign/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/_archived/1776788383759-3e7caf89-redesign/memory/task_32.md is excluded by !**/*.md
  • .compozy/tasks/_archived/1776788383759-3e7caf89-redesign/task_32.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-ext-parity/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-ext-parity/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/_idea.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/_tasks.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_01.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_02.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_03.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_04.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_05.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_07.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/memory/task_08.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/baseline-make-verify.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-events.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-history.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-list.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-status-after-stop.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-status.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-stop.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-workspace-list.json is excluded by !**/*.json
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/final-make-test-integration.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/final-make-verify.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/make-test-integration-after-fix.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/make-test-integration-after-race-fix.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-after-fix.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-rerun-count1.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-rerun.log is excluded by !**/*.log
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-005.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-007.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-008.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-005.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-006.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-007.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-008.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-009.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-010.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-011.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-013.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-014.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-015.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-017.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-020.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-021.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-022.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-023.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-024.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-025.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-026.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-027.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-028.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-029.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-030.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-005.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-007.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-008.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-PERF-002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-PERF-003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-REG-006.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-SEC-001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-SEC-002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-plans/env-abstraction-regression.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/qa/test-plans/env-abstraction-test-plan.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_01.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_02.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_03.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_04.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_05.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_06.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_07.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-sandbox/task_08.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-site/analysis/analysis_existing_knowledge.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-site/analysis/analysis_knowledge_base.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-site/memory/task_17.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-021722-site/task_17.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/adrs/adr-004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/adrs/adr-005.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/cc_analysis.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/memory/task_03.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/reviews-003/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/task_06.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-e2e/task_14.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/_tasks.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/memory/task_11.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/memory/task_25.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/memory/task_28.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/daemon.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/environment.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/extension.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/session.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/store.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reports/workspace.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260417-180201-improvs/task_11.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/analysis/analysis_environments.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/analysis/analysis_general.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/memory/task_12.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/memory/task_13.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-cases/TC-FUNC-009-environments-crud-and-usage.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-cases/TC-UI-015-collection-and-hybrid-visual.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-plans/settings-ui-test-plan.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-settings-ui/task_12.md is excluded by !**/*.md
  • .compozy/tasks/_archived/20260418-161152-tasks-ui/qa/test-plans/tasks-ui-test-plan.md is excluded by !**/*.md
  • .compozy/tasks/_archived/mem-improvs/qa/verification-report.md is excluded by !**/*.md
  • .compozy/tasks/autonomous/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/autonomous/adrs/adr-006.md is excluded by !**/*.md
  • .compozy/tasks/autonomous/analysis/analysis_auto_spawn_delegation.md is excluded by !**/*.md
  • .compozy/tasks/autonomous/memory/task_12.md is excluded by !**/*.md
  • .compozy/tasks/hermes/_techspec.md is excluded by !**/*.md
  • .compozy/tasks/hermes/adrs/adr-004-shared-process-registry-and-interrupt-runtime.md is excluded by !**/*.md
  • .compozy/tasks/hermes/memory/MEMORY.md is excluded by !**/*.md
  • .compozy/tasks/hermes/memory/task_06.md is excluded by !**/*.md
  • .compozy/tasks/hermes/qa/logs/TC-FUNC-001/go-test-memory-api-cli.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-FUNC-003/go-test-env-extension.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-INT-001/go-test-store-retry.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-INT-002/go-test-observe-health.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-INT-003/go-test-acp-session.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-INT-003/http-session.json is excluded by !**/*.json
  • .compozy/tasks/hermes/qa/logs/TC-INT-003/session-status.json is excluded by !**/*.json
  • .compozy/tasks/hermes/qa/logs/TC-INT-004/go-test-automation.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-INT-005/go-test-toolruntime-process-registry.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-SEC-002/go-test-symlink-security.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/TC-UI-001/playwright-automation-diagnose.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/baseline/make-verify-baseline.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/failure-repro/cli-session-list-toon-after-fix.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/failure-repro/cli-session-list-toon.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/failure-repro/httpapi-prompt-approve-after-fix.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/failure-repro/httpapi-prompt-approve.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/make-test-integration-after-fixes.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/make-test-integration.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/logs/final/make-verify-final.log is excluded by !**/*.log
  • .compozy/tasks/hermes/qa/test-cases/TC-INT-005.md is excluded by !**/*.md
  • .compozy/tasks/hermes/qa/test-plans/hermes-hardening-regression.md is excluded by !**/*.md
  • .compozy/tasks/hermes/reviews-001/issue_014.md is excluded by !**/*.md
  • .compozy/tasks/hermes/task_06.md is excluded by !**/*.md
  • .compozy/tasks/session-driver-override/memory/task_02.md is excluded by !**/*.md
  • .compozy/tasks/session-driver-override/qa/test-cases/TC-INT-008.md is excluded by !**/*.md
  • .compozy/tasks/session-driver-override/qa/test-cases/TC-UI-010.md is excluded by !**/*.md
  • .compozy/tasks/session-driver-override/qa/test-cases/TC-UI-011.md is excluded by !**/*.md
  • .compozy/tasks/session-driver-override/qa/test-plans/session-provider-override-regression.md is excluded by !**/*.md
  • AGENTS.md is excluded by !**/*.md
  • CLAUDE.md is excluded by !**/*.md
  • DESIGN.md is excluded by !**/*.md
  • docs/_memory/glossary.md is excluded by !**/*.md
  • docs/_memory/lessons/L-014-sandbox-vocabulary-drift.md is excluded by !**/*.md
  • docs/_memory/lessons/README.md is excluded by !**/*.md
  • docs/design/design-system/README.md is excluded by !docs/design/**/*, !**/*.md
  • docs/design/design-system/ui_kits/marketing/README.md is excluded by !docs/design/**/*, !**/*.md
  • docs/ideas/complex-scenarios/network.md is excluded by !**/*.md
  • internal/AGENTS.md is excluded by !**/*.md
  • internal/CLAUDE.md is excluded by !**/*.md
📒 Files selected for processing (91)
  • .compozy/tasks/_archived/20260417-021722-sandbox/_architecture.html
  • .gitignore
  • Makefile
  • conversa.jsonl
  • internal/acp/client.go
  • internal/acp/client_test.go
  • internal/acp/handlers.go
  • internal/acp/launcher.go
  • internal/acp/launcher_tool_host_test.go
  • internal/acp/tool_host.go
  • internal/acp/types.go
  • internal/agentidentity/identity.go
  • internal/api/contract/agents.go
  • internal/api/contract/agents_test.go
  • internal/api/contract/contract.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/settings.go
  • internal/api/core/agent_spawn.go
  • internal/api/core/conversions.go
  • internal/api/core/conversions_parsers_test.go
  • internal/api/core/coverage_helpers_test.go
  • internal/api/core/handlers.go
  • internal/api/core/handlers_test.go
  • internal/api/core/memory_workspace_test.go
  • internal/api/core/network.go
  • internal/api/core/network_details.go
  • internal/api/core/network_test.go
  • internal/api/core/settings.go
  • internal/api/core/settings_internal_test.go
  • internal/api/core/settings_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/api/core/tasks_test.go
  • internal/api/core/tasks_token_fence_integration_test.go
  • internal/api/core/workspaces.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/helpers_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/routes.go
  • internal/api/spec/settings_test.go
  • internal/api/spec/spec.go
  • internal/api/udsapi/agent_tasks_bindings_test.go
  • internal/api/udsapi/agent_tasks_test.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/helpers_test.go
  • internal/api/udsapi/routes.go
  • internal/api/udsapi/server.go
  • internal/api/udsapi/server_test.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/cli/agent.go
  • internal/cli/agent_commands_test.go
  • internal/cli/agent_kernel_test.go
  • internal/cli/cli_historical_mixed_ownership_integration_test.go
  • internal/cli/cli_historical_task_run_terminal_integration_test.go
  • internal/cli/cli_integration_test.go
  • internal/cli/client.go
  • internal/cli/client_test.go
  • internal/cli/command_paths_test.go
  • internal/cli/config.go
  • internal/cli/config_test.go
  • internal/cli/daemon.go
  • internal/cli/format_test.go
  • internal/cli/helpers_test.go
  • internal/cli/install.go
  • internal/cli/install_test.go
  • internal/cli/session.go
  • internal/cli/skill_commands.go
  • internal/cli/skill_daemon_test.go
  • internal/cli/skill_workspace.go
  • internal/cli/spawn.go
  • internal/cli/whoami_test.go
  • internal/cli/workspace.go
  • internal/cli/workspace_test.go
  • internal/config/config.go
  • internal/config/config_test.go
  • internal/config/merge.go
  • internal/config/merge_test.go
  • internal/daemon/boot.go
  • internal/daemon/daemon.go
  • internal/daemon/daemon_acpmock_faults_integration_test.go
  • internal/daemon/daemon_automation_task_integration_test.go
  • internal/daemon/daemon_bridge_extension_integration_test.go
  • internal/daemon/daemon_integration_test.go
  • internal/daemon/daemon_network_collaboration_integration_test.go
  • internal/daemon/daemon_nightly_combined_integration_test.go
  • internal/daemon/daemon_sandbox_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/extensions.go
  • internal/daemon/harness_context_integration_test.go
  • internal/daemon/hooks_bridge.go
  • internal/daemon/restart.go
  • internal/daemon/restart_integration_test.go
💤 Files with no reviewable changes (1)
  • conversa.jsonl

Comment thread internal/api/core/handlers.go
Comment thread internal/api/core/tasks_terminal_integration_test.go Outdated
Comment thread internal/cli/skill_commands.go
Comment thread internal/cli/skill_workspace.go
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
internal/cli/agent.go (1)

39-43: Optional: deduplicate workspace query construction between commands.

The same commandWorkspaceFlag + AgentQuery block appears twice. A tiny helper would keep command handlers slimmer and reduce drift later.

♻️ Suggested refactor
+func commandAgentQuery(cmd *cobra.Command) (AgentQuery, error) {
+	workspace, err := commandWorkspaceFlag(cmd)
+	if err != nil {
+		return AgentQuery{}, err
+	}
+	return AgentQuery{Workspace: workspace}, nil
+}
+
 func newAgentListCommand(deps commandDeps) *cobra.Command {
@@
-			workspace, err := commandWorkspaceFlag(cmd)
+			query, err := commandAgentQuery(cmd)
 			if err != nil {
 				return err
 			}
-			agents, err := client.ListAgents(cmd.Context(), AgentQuery{Workspace: workspace})
+			agents, err := client.ListAgents(cmd.Context(), query)
@@
 func newAgentInfoCommand(deps commandDeps) *cobra.Command {
@@
-			workspace, err := commandWorkspaceFlag(cmd)
+			query, err := commandAgentQuery(cmd)
 			if err != nil {
 				return err
 			}
-			agent, err := client.GetAgent(cmd.Context(), args[0], AgentQuery{Workspace: workspace})
+			agent, err := client.GetAgent(cmd.Context(), args[0], query)

Also applies to: 73-77

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/cli/agent.go` around lines 39 - 43, The workspace query construction
(calling commandWorkspaceFlag and creating an AgentQuery) is duplicated in
multiple command handlers; create a small helper function (e.g.,
buildAgentQueryFromCmd or agentQueryForCmd) that accepts *cobra.Command or
context and returns (AgentQuery, error), which internally calls
commandWorkspaceFlag(cmd) and constructs AgentQuery{Workspace: workspace};
replace the duplicated blocks in the handlers that call commandWorkspaceFlag and
then client.ListAgents / other agent calls so they use the new helper and
propagate any error.
internal/api/core/error_paths_test.go (1)

236-263: Wrap this case in t.Run("Should ...") to match test conventions.

The test does not use the required subtest pattern. Per coding guidelines, **/*_test.go tests must use t.Run("Should ...") subtests with t.Parallel() by default.

♻️ Proposed refactor
 func TestListAgentsWorkspaceResolverUnavailable(t *testing.T) {
 	t.Parallel()
 
-	fixture := newHandlerFixture(
-		t,
-		testutil.StubSessionManager{},
-		testutil.StubObserver{},
-		testutil.StubWorkspaceService{},
-		nil,
-		nil,
-	)
-	fixture.Handlers.Workspaces = nil
-
-	resp := performRequest(t, fixture.Engine, http.MethodGet, "/agents?workspace=alpha", nil)
-	if resp.Code != http.StatusServiceUnavailable {
-		t.Fatalf(
-			"workspace agents status = %d, want %d; body=%s",
-			resp.Code,
-			http.StatusServiceUnavailable,
-			resp.Body.String(),
-		)
-	}
-	var payload contract.ErrorPayload
-	testutil.DecodeJSONResponse(t, resp, &payload)
-	if !strings.Contains(payload.Error, "workspace resolver unavailable") {
-		t.Fatalf("workspace agents error = %#v, want resolver unavailable detail", payload)
-	}
+	t.Run("Should return 503 when workspace resolver is unavailable", func(t *testing.T) {
+		t.Parallel()
+
+		fixture := newHandlerFixture(
+			t,
+			testutil.StubSessionManager{},
+			testutil.StubObserver{},
+			testutil.StubWorkspaceService{},
+			nil,
+			nil,
+		)
+		fixture.Handlers.Workspaces = nil
+
+		resp := performRequest(t, fixture.Engine, http.MethodGet, "/agents?workspace=alpha", nil)
+		if resp.Code != http.StatusServiceUnavailable {
+			t.Fatalf(
+				"workspace agents status = %d, want %d; body=%s",
+				resp.Code,
+				http.StatusServiceUnavailable,
+				resp.Body.String(),
+			)
+		}
+		var payload contract.ErrorPayload
+		testutil.DecodeJSONResponse(t, resp, &payload)
+		if !strings.Contains(payload.Error, "workspace resolver unavailable") {
+			t.Fatalf("workspace agents error = %#v, want resolver unavailable detail", payload)
+		}
+	})
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/api/core/error_paths_test.go` around lines 236 - 263, Wrap the
existing TestListAgentsWorkspaceResolverUnavailable body in a t.Run subtest
(e.g. t.Run("Should return ServiceUnavailable when workspace resolver is
unavailable", func(t *testing.T) { ... })) and move the t.Parallel() call into
that subtest; keep the current setup (newHandlerFixture, setting
fixture.Handlers.Workspaces = nil, performRequest, and assertions) unchanged but
nested inside the subtest so the test follows the required subtest pattern.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/api/core/network_details.go`:
- Around line 213-217: The current check treats an empty rawMessages slice as
"not found" and calls h.respondError, which incorrectly 404s history-only
channels when paging (using before/after); instead, first call
networkChannelExists(sessions, peers, metadata, channel) and only return the 404
via h.respondError if the channel truly does not exist; if the channel exists
but rawMessages is empty (especially when before/after is set), return a 200
empty page response (use the same success response path that would return an
empty list) so paging past the end yields a 200 with no messages rather than a
404.

In `@internal/api/core/tasks_terminal_integration_test.go`:
- Around line 217-219: The test currently only asserts payload.Run.Result when
tc.wantResultJSON != "", which lets stale results slip through on fail/cancel
paths; modify the block around tc.wantResultJSON to add an explicit assertion
for the empty-case so that when tc.wantResultJSON == "" the test asserts
payload.Run.Result is empty (e.g., assert.Empty or assert.Equal(t, "",
payload.Run.Result) / assert.Nil as appropriate) instead of skipping; keep using
the same variables (tc.wantResultJSON, payload.Run.Result) and the existing
assert helpers (assertRawJSONEqual) for the non-empty branch.

---

Nitpick comments:
In `@internal/api/core/error_paths_test.go`:
- Around line 236-263: Wrap the existing
TestListAgentsWorkspaceResolverUnavailable body in a t.Run subtest (e.g.
t.Run("Should return ServiceUnavailable when workspace resolver is unavailable",
func(t *testing.T) { ... })) and move the t.Parallel() call into that subtest;
keep the current setup (newHandlerFixture, setting fixture.Handlers.Workspaces =
nil, performRequest, and assertions) unchanged but nested inside the subtest so
the test follows the required subtest pattern.

In `@internal/cli/agent.go`:
- Around line 39-43: The workspace query construction (calling
commandWorkspaceFlag and creating an AgentQuery) is duplicated in multiple
command handlers; create a small helper function (e.g., buildAgentQueryFromCmd
or agentQueryForCmd) that accepts *cobra.Command or context and returns
(AgentQuery, error), which internally calls commandWorkspaceFlag(cmd) and
constructs AgentQuery{Workspace: workspace}; replace the duplicated blocks in
the handlers that call commandWorkspaceFlag and then client.ListAgents / other
agent calls so they use the new helper and propagate any error.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 83ab42a0-e7cd-4d38-afcd-9bdd6441227d

📥 Commits

Reviewing files that changed from the base of the PR and between f02d5f7 and cfeecc0.

⛔ Files ignored due to path filters (22)
  • .compozy/tasks/qa-rounds/reviews-001/_meta.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_007.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_008.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_009.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_010.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_011.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_012.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-001/issue_013.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/_meta.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_004.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_005.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_006.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_007.md is excluded by !**/*.md
📒 Files selected for processing (14)
  • internal/api/core/coverage_helpers_test.go
  • internal/api/core/error_paths_test.go
  • internal/api/core/handlers.go
  • internal/api/core/network_details.go
  • internal/api/core/network_test.go
  • internal/api/core/session_workspace.go
  • internal/api/core/session_workspace_internal_test.go
  • internal/api/core/settings_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/api/core/workspaces.go
  • internal/cli/agent.go
  • internal/cli/config_test.go
  • internal/cli/install_test.go
  • internal/cli/skill_commands.go
✅ Files skipped from review due to trivial changes (1)
  • internal/api/core/handlers.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • internal/api/core/workspaces.go
  • internal/api/core/settings_test.go

Comment thread internal/api/core/network_details.go
Comment thread internal/api/core/tasks_terminal_integration_test.go Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/api/core/network_details.go`:
- Around line 1435-1445: The pagination code currently silences missing cursors
by treating indexNetworkTimelineViewByMessageID(...)= -1 as "not found" and
continues; instead, when indexNetworkTimelineViewByMessageID returns -1 for
either query.BeforeMessageID or query.AfterMessageID you should return a
validation error from networkTimelinePayloads and propagate it so
respondNetworkMessageError can map it to a 400. Concretely, in the blocks that
handle BeforeMessageID and AfterMessageID, check the index result and if index
== -1 return a descriptive error (e.g., "message cursor not found") from
networkTimelinePayloads rather than trimming/ slicing paginated; ensure the
caller uses respondNetworkMessageError to convert that error to the existing 400
response.
- Around line 213-216: The current conditional lets requests with before/after
cursors fall through and mask unknown channels; ensure unknown channels yield a
404 regardless of pagination cursors by checking channel existence first: call
networkChannelExists(sessions, peers, metadata, channel) and if it returns false
and len(rawMessages) == 0 then return the 404 error immediately (i.e., move or
add the existence check out of the combined if that includes
query.BeforeMessageID/query.AfterMessageID so that channel non-existence is
handled separately from “past end of history” pagination).
- Around line 1228-1235: The function listTimelineRawMessages sets
rawQuery.Limit = 0 but leaves cursor fields set, which lets the store apply
BeforeMessageID/AfterMessageID filtering prematurely; modify
listTimelineRawMessages to also clear rawQuery.BeforeMessageID and
rawQuery.AfterMessageID (set them to empty strings) before calling
networkStore.ListNetworkMessages so the store returns the full unfiltered
dataset for handler-side visibility coalescing and pagination.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4ea76311-8ee8-4307-91e4-5555941160c4

📥 Commits

Reviewing files that changed from the base of the PR and between cfeecc0 and 4ec51e8.

⛔ Files ignored due to path filters (5)
  • .compozy/tasks/qa-rounds/reviews-002/_meta.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_001.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_002.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_003.md is excluded by !**/*.md
  • .compozy/tasks/qa-rounds/reviews-002/issue_004.md is excluded by !**/*.md
📒 Files selected for processing (5)
  • internal/api/core/error_paths_test.go
  • internal/api/core/network_details.go
  • internal/api/core/network_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/cli/agent.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • internal/api/core/tasks_terminal_integration_test.go

Comment thread internal/api/core/network_details.go Outdated
Comment thread internal/api/core/network_details.go
Comment thread internal/api/core/network_details.go
@pedronauck pedronauck merged commit b0763cd into main Apr 28, 2026
4 of 6 checks passed
@pedronauck pedronauck deleted the fixes branch April 28, 2026 14:55
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This was referenced May 26, 2026
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.1

This PR prepares the release of version v0.0.1.

### Changelog

## 0.0.1 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 26, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-26



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated web assets dependency to a newer version for improved
stability and performance.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/211?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
pedronauck added a commit that referenced this pull request May 27, 2026
## Release v0.0.2

This PR prepares the release of version v0.0.2.

### Changelog

## 0.0.2 - 2026-05-27



### Other Changes

- Lessons learned



### ♻️ Refactoring

- Project structure (#7)
- Kb improvements (#12)
- Rename spaces to channels (#17)
- Add extensions gaps (#21)
- Improve tool calls ui (#22)
- Remove web app header
- Module improvements (#29)
- Memory improvements (#35)
- Storybook for web and ui (#38)
- Enable AGH network by default for new installs (#57)
- Hermes adjustments (#69)
- Badges design (#84)
- Storybook scenario and logos gallery
- Migrate typescript tests (#114)
- Internal go packages (#120)
- Ui patterns (#127)
- Improve e2e tests (#130)
- Ui redesign
- Workspace isolation across runtime surfaces (#145)
- Prod ready applies (#162)
- Tool card ui (#164)
- Alpha on logo
- Prod ready features (#167)
- Thread sheet (#202)



### 🎉 Features

- Implement config foundation packages
- Implement sqlite store package
- Add ACP client package
- Add session lifecycle manager
- Implement observe package
- Add daemon composition root
- Add uds api server
- Implement cli package
- Add http api server
- Add system design
- Add foundation types, schemas, and layout shell for web client
- Add daemon health polling and agent sidebar systems for web client
- Add session system CRUD, streaming core, and session store for web
client
- Add chat view, messages, and composer tests for web client
- Add tool cards and renderers for web client
- Add file-backed memory store core
- Scaffold memory session seams
- Add memory dream consolidation service
- Wire memory assembler into daemon
- Add memory api and cli
- New skills system (#1)
- Add workspace entity (#5)
- Add new skill capabilities (#8)
- Web ui v2 (#9)
- Improve hooks system (#10)
- Session resilience (#11)
- Add extensability (#13)
- Add automation (#16)
- Add channels (#14)
- Add network implementation (#15)
- Add network, bridges and automations web pages (#18)
- Ext registry (#20)
- Add core tasks (#19)
- Bridge adapters (#23)
- Add site (#26)
- Add ext refac and sandbox (#25)
- Settings ui (#37)
- Tasks ui (#36)
- Harness improvements (#44)
- Agent capabilities (#49)
- Redesign ui (#48)
- Unify capability (#53)
- Redesign network workspace (#59)
- Add task deletion and split session delete from stop (#58)
- Session provider selection (#60)
- Production grade adjustments (#66)
- Autonomous system (#75)
- Add agent session route (#80)
- Tools registry (#85)
- Agents soul (#88)
- Add network threads (#105)
- Orchestration improvements (#106)
- Memory v2 (#108)
- Agent categories (#113)
- Providers model (#118)
- Add canonical AGH bundled skill (#143)
- Onboarding and improvements (#198)
- Onboarding and improvements (#201)



### 🐛 Bug Fixes

- Review round
- Review rounds
- Resolve memory extensibility review batch
- Embed web into daemon
- Defaults agents
- Acp integration (#4)
- Lint errors
- Prd folder
- Remove orphan web actions and dead surfaces (#55)
- Qa testing and fixes (#73)
- New review rounds (#82)
- Security audit (#90)
- Release qa round (#95)
- Add missing tools (#141)
- New qa round (#147)
- Advanced qa round (#149)
- Homebrew tap
- Final review round (#151)
- Daemon healthy
- Reasoning models (#158)
- Lint errors (#160)
- Review round (#168)
- Release adjustments (#171)
- Stabilize release ci fixtures
- Stabilize release integration gate
- Stabilize release verify gates
- Stabilize release integration flows
- Stabilize release verify gates
- Stabilize main verify shutdown
- Ignore stale acpmock cancel
- Marketplace search focus and filtering (#193)
- Website video
- Workspace command select



### 📚 Documentation

- Update agents.md
- Update prd
- Update skills
- Update compozy tasks
- Update compozy
- Update compozy
- Add new skills
- Archive prd
- Update prds
- Update rfc
- Update prds
- Update prds
- Add automation prd
- Channels prd
- Update prd
- Update prd
- New prds
- Archive prds
- Bridges adapters prd
- Sandbox prd
- Update
- Archive prd
- Update
- Add new prd
- New design
- Update prd
- Archive prds
- Update prds
- Tasks-ui prd tasks
- Update prd
- Update design docs
- Agent capabilities prd
- Improve site docs
- Remove old design references
- Udpate
- Autonomous prd
- Update skills
- Blog design
- Agent sould prd
- Final qa plan
- Update
- Remove codex ledgers from gitignore
- Remove not needed files
- Udpate ledger
- Update cy-codex-loop skill
- Orchestration improves prd
- Update prds
- Orch improvs prd
- Memv2 prd
- Providers model prd
- Update refacs prd
- New design proposal
- Update rules
- Update skills
- New blog posts (#173)
- Format docs
- Remove old design files
- Remove old
- Skeeper update



### 📦 Build System

- Initial structure
- Commitlint
- Frontend base structure
- Update vscode settings
- Add subagents
- Coderabbit
- Prd and tooling
- Bun lock
- Lint tooling
- Copy.md and tooling adjusts
- Add repoclone rc
- Upgrade skeeper to v0.2.0
- Update go.mod
- Adopt task artifacts into skeeper
- Sync codex plans with skeeper
- Skeeper lock
- Skeeper lock
- New skills
- Skeeper lock
- Skeeper lock
- Skeeper lock
- Update deps and go
- Regenerate daytona sidecar assets for go 1.26.3
- Fix cliff
- Ignore docs on fmt
- Build web assets before goreleaser
- Extend release dry-run timeout
- Fix release dry-run token contract



### 🔧 CI/CD

- Lint errors
- Fint release pr
- Fix goreleaser
- Fix release
- Fix release process
- Fix release sync
- Decouple release dry-run npm auth
- Persist web assets git auth
- Require npm auth before release merge



### 🧪 Testing

- Add e2e tests (#27)
- Qa rounds (#78)
- Improve test suite (#138)
- Harden daemon-served restart reloads
- Harden daemon-served readiness waits
- Stabilize dashboard focus assertion
- Stabilize release integration gates
- Stabilize release e2e markers
- Stabilize release e2e flows
- Improve suite speed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
  * Updated dependencies to latest versions.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/compozy/agh/pull/214?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant