fix: new review rounds#82
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (4)
📒 Files selected for processing (2)
WalkthroughLarge-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
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Comment |
There was a problem hiding this comment.
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 | 🟡 MinorComplete 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 | 🟠 MajorUse 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 (witht.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: Uset.Run('Should ...')subtests witht.Parallelas default (opt-out only witht.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 | 🟠 MajorUse the same filtered history for
HistoricalParticipantCount.
historyis built fromfilterPublicChannelTimelineMessages(messages), butHistoricalParticipantCountis computed from the unfilteredmessages. 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 | 🟠 MajorKeep channel-list participant counts on the visible slice.
recordHistoricalParticipant(...)now runs before the public-visibility gate, soHistoricalParticipantCountincludes peers that only appeared in directed traffic whileMessageCount, 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 fromUpdate()for idiomatic Bubble Tea usage.While the current code works because
installWizardModeluses 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 legacyenvironments.*mutation paths.After the rename to
sandboxes.*, add an explicit assertion thatconfig set environments.dev.backend localfails. 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 newdefaults.sandboxmutation key.Line 97 adds new mutable surface (
defaults.sandbox), but this change should be pinned with a direct CLI regression test (acceptdefaults.sandbox, reject legacydefaults.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 inworkspaceDetailAgents.This helper currently assumes
resolvedis 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.
agentWorkspaceFlagduplicatesskillWorkspaceFlagbehavior 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/:nameresponse body too.This case currently proves only that the handler delegated to
CollectionSandboxes. It would still pass if:nameselection broke and the endpoint returned the wrong item. Please decode the response and assert the returned sandboxname/profilefor 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: Addt.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: Uset.Run('Should ...')subtests witht.Parallelas default (opt-out only witht.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
⛔ Files ignored due to path filters (209)
.agents/skills/agh-qa-bootstrap/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/agh-qa-bootstrap/references/bootstrap-contract.mdis excluded by!**/*.md,!.agents/**.agents/skills/agh-qa-bootstrap/scripts/__pycache__/bootstrap-qa-env.cpython-314.pycis excluded by!**/*.pyc,!.agents/**.agents/skills/agh-qa-bootstrap/scripts/bootstrap-qa-env.pyis excluded by!.agents/**.agents/skills/agh-worktree-isolation/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/assets/issue-template.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/assets/verification-report-template.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/references/checklist.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/references/web-ui-qa.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-execution/scripts/__pycache__/discover-project-contract.cpython-314.pycis excluded by!**/*.pyc,!.agents/**.agents/skills/qa-execution/scripts/discover-project-contract.pyis excluded by!.agents/**.agents/skills/qa-report/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-report/assets/issue-template.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-report/references/bug_report_templates.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-report/references/regression_testing.mdis excluded by!**/*.md,!.agents/**.agents/skills/qa-report/references/test_case_templates.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/assets/final-report-template.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/assets/scenario-issue-template.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/references/evidence-checklist.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/references/scenario-matrix.mdis excluded by!**/*.md,!.agents/**.agents/skills/real-scenario-qa/scripts/init-scenario-workspace.shis excluded by!.agents/**.agents/skills/skill-best-practices/SKILL.mdis excluded by!**/*.md,!.agents/**.agents/skills/skill-best-practices/references/checklist.mdis excluded by!**/*.md,!.agents/**.codex/plans/2026-04-27-codex-loop-global.mdis excluded by!**/*.md.codex/plans/2026-04-27-qa-bootstrap-hardening.mdis excluded by!**/*.md.codex/plans/2026-04-28-real-scenario-qa-behavioral-hardening.mdis excluded by!**/*.md.codex/plans/2026-04-28-sandbox-hard-cut.mdis excluded by!**/*.md.compozy/tasks/_archived/1776788383759-3e7caf89-redesign/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/_archived/1776788383759-3e7caf89-redesign/memory/task_32.mdis excluded by!**/*.md.compozy/tasks/_archived/1776788383759-3e7caf89-redesign/task_32.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-ext-parity/reviews-001/issue_010.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-ext-parity/reviews-001/issue_011.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/_idea.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/_tasks.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/_techspec.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/adrs/adr-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_01.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_02.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_03.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_04.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_05.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_07.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/memory/task_08.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/baseline-make-verify.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-events.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-history.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-list.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-status-after-stop.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-status.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-session-stop.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/cli-workspace-list.jsonis excluded by!**/*.json.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/final-make-test-integration.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/final-make-verify.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/make-test-integration-after-fix.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/make-test-integration-after-race-fix.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-after-fix.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-rerun-count1.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/logs/repo-unit-rerun.logis excluded by!**/*.log.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-007.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/SMOKE-008.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-006.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-007.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-008.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-009.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-010.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-011.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-013.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-014.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-015.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-017.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-020.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-021.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-022.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-023.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-024.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-025.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-026.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-027.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-028.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-029.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-FUNC-030.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-007.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-INT-008.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-PERF-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-PERF-003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-REG-006.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-SEC-001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-cases/TC-SEC-002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-plans/env-abstraction-regression.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/qa/test-plans/env-abstraction-test-plan.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_01.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_02.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_03.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_04.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_05.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_07.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-sandbox/task_08.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-site/analysis/analysis_existing_knowledge.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-site/analysis/analysis_knowledge_base.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-site/memory/task_17.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-021722-site/task_17.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/_techspec.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/adrs/adr-004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/adrs/adr-005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/cc_analysis.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/memory/task_03.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/memory/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/reviews-001/issue_006.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/reviews-003/issue_004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/task_06.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-e2e/task_14.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/_tasks.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/memory/task_11.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/memory/task_25.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/memory/task_28.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/daemon.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/environment.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/extension.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/session.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/store.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reports/workspace.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-001/issue_006.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_001.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_002.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_003.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_004.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_005.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/reviews-002/issue_007.mdis excluded by!**/*.md.compozy/tasks/_archived/20260417-180201-improvs/task_11.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/_techspec.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/analysis/analysis_environments.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/analysis/analysis_general.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/memory/task_12.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/memory/task_13.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-cases/TC-FUNC-009-environments-crud-and-usage.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-cases/TC-UI-015-collection-and-hybrid-visual.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/qa/test-plans/settings-ui-test-plan.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-settings-ui/task_12.mdis excluded by!**/*.md.compozy/tasks/_archived/20260418-161152-tasks-ui/qa/test-plans/tasks-ui-test-plan.mdis excluded by!**/*.md.compozy/tasks/_archived/mem-improvs/qa/verification-report.mdis excluded by!**/*.md.compozy/tasks/autonomous/_techspec.mdis excluded by!**/*.md.compozy/tasks/autonomous/adrs/adr-006.mdis excluded by!**/*.md.compozy/tasks/autonomous/analysis/analysis_auto_spawn_delegation.mdis excluded by!**/*.md.compozy/tasks/autonomous/memory/task_12.mdis excluded by!**/*.md.compozy/tasks/hermes/_techspec.mdis excluded by!**/*.md.compozy/tasks/hermes/adrs/adr-004-shared-process-registry-and-interrupt-runtime.mdis excluded by!**/*.md.compozy/tasks/hermes/memory/MEMORY.mdis excluded by!**/*.md.compozy/tasks/hermes/memory/task_06.mdis excluded by!**/*.md.compozy/tasks/hermes/qa/logs/TC-FUNC-001/go-test-memory-api-cli.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-FUNC-003/go-test-env-extension.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-INT-001/go-test-store-retry.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-INT-002/go-test-observe-health.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-INT-003/go-test-acp-session.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-INT-003/http-session.jsonis excluded by!**/*.json.compozy/tasks/hermes/qa/logs/TC-INT-003/session-status.jsonis excluded by!**/*.json.compozy/tasks/hermes/qa/logs/TC-INT-004/go-test-automation.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-INT-005/go-test-toolruntime-process-registry.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-SEC-002/go-test-symlink-security.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/TC-UI-001/playwright-automation-diagnose.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/baseline/make-verify-baseline.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/failure-repro/cli-session-list-toon-after-fix.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/failure-repro/cli-session-list-toon.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/failure-repro/httpapi-prompt-approve-after-fix.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/failure-repro/httpapi-prompt-approve.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/make-test-integration-after-fixes.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/make-test-integration.logis excluded by!**/*.log.compozy/tasks/hermes/qa/logs/final/make-verify-final.logis excluded by!**/*.log.compozy/tasks/hermes/qa/test-cases/TC-INT-005.mdis excluded by!**/*.md.compozy/tasks/hermes/qa/test-plans/hermes-hardening-regression.mdis excluded by!**/*.md.compozy/tasks/hermes/reviews-001/issue_014.mdis excluded by!**/*.md.compozy/tasks/hermes/task_06.mdis excluded by!**/*.md.compozy/tasks/session-driver-override/memory/task_02.mdis excluded by!**/*.md.compozy/tasks/session-driver-override/qa/test-cases/TC-INT-008.mdis excluded by!**/*.md.compozy/tasks/session-driver-override/qa/test-cases/TC-UI-010.mdis excluded by!**/*.md.compozy/tasks/session-driver-override/qa/test-cases/TC-UI-011.mdis excluded by!**/*.md.compozy/tasks/session-driver-override/qa/test-plans/session-provider-override-regression.mdis excluded by!**/*.mdAGENTS.mdis excluded by!**/*.mdCLAUDE.mdis excluded by!**/*.mdDESIGN.mdis excluded by!**/*.mddocs/_memory/glossary.mdis excluded by!**/*.mddocs/_memory/lessons/L-014-sandbox-vocabulary-drift.mdis excluded by!**/*.mddocs/_memory/lessons/README.mdis excluded by!**/*.mddocs/design/design-system/README.mdis excluded by!docs/design/**/*,!**/*.mddocs/design/design-system/ui_kits/marketing/README.mdis excluded by!docs/design/**/*,!**/*.mddocs/ideas/complex-scenarios/network.mdis excluded by!**/*.mdinternal/AGENTS.mdis excluded by!**/*.mdinternal/CLAUDE.mdis excluded by!**/*.md
📒 Files selected for processing (91)
.compozy/tasks/_archived/20260417-021722-sandbox/_architecture.html.gitignoreMakefileconversa.jsonlinternal/acp/client.gointernal/acp/client_test.gointernal/acp/handlers.gointernal/acp/launcher.gointernal/acp/launcher_tool_host_test.gointernal/acp/tool_host.gointernal/acp/types.gointernal/agentidentity/identity.gointernal/api/contract/agents.gointernal/api/contract/agents_test.gointernal/api/contract/contract.gointernal/api/contract/contract_test.gointernal/api/contract/settings.gointernal/api/core/agent_spawn.gointernal/api/core/conversions.gointernal/api/core/conversions_parsers_test.gointernal/api/core/coverage_helpers_test.gointernal/api/core/handlers.gointernal/api/core/handlers_test.gointernal/api/core/memory_workspace_test.gointernal/api/core/network.gointernal/api/core/network_details.gointernal/api/core/network_test.gointernal/api/core/settings.gointernal/api/core/settings_internal_test.gointernal/api/core/settings_test.gointernal/api/core/tasks_terminal_integration_test.gointernal/api/core/tasks_test.gointernal/api/core/tasks_token_fence_integration_test.gointernal/api/core/workspaces.gointernal/api/httpapi/handlers_test.gointernal/api/httpapi/helpers_test.gointernal/api/httpapi/httpapi_integration_test.gointernal/api/httpapi/routes.gointernal/api/spec/settings_test.gointernal/api/spec/spec.gointernal/api/udsapi/agent_tasks_bindings_test.gointernal/api/udsapi/agent_tasks_test.gointernal/api/udsapi/handlers_test.gointernal/api/udsapi/helpers_test.gointernal/api/udsapi/routes.gointernal/api/udsapi/server.gointernal/api/udsapi/server_test.gointernal/api/udsapi/udsapi_integration_test.gointernal/cli/agent.gointernal/cli/agent_commands_test.gointernal/cli/agent_kernel_test.gointernal/cli/cli_historical_mixed_ownership_integration_test.gointernal/cli/cli_historical_task_run_terminal_integration_test.gointernal/cli/cli_integration_test.gointernal/cli/client.gointernal/cli/client_test.gointernal/cli/command_paths_test.gointernal/cli/config.gointernal/cli/config_test.gointernal/cli/daemon.gointernal/cli/format_test.gointernal/cli/helpers_test.gointernal/cli/install.gointernal/cli/install_test.gointernal/cli/session.gointernal/cli/skill_commands.gointernal/cli/skill_daemon_test.gointernal/cli/skill_workspace.gointernal/cli/spawn.gointernal/cli/whoami_test.gointernal/cli/workspace.gointernal/cli/workspace_test.gointernal/config/config.gointernal/config/config_test.gointernal/config/merge.gointernal/config/merge_test.gointernal/daemon/boot.gointernal/daemon/daemon.gointernal/daemon/daemon_acpmock_faults_integration_test.gointernal/daemon/daemon_automation_task_integration_test.gointernal/daemon/daemon_bridge_extension_integration_test.gointernal/daemon/daemon_integration_test.gointernal/daemon/daemon_network_collaboration_integration_test.gointernal/daemon/daemon_nightly_combined_integration_test.gointernal/daemon/daemon_sandbox_integration_test.gointernal/daemon/daemon_test.gointernal/daemon/extensions.gointernal/daemon/harness_context_integration_test.gointernal/daemon/hooks_bridge.gointernal/daemon/restart.gointernal/daemon/restart_integration_test.go
💤 Files with no reviewable changes (1)
- conversa.jsonl
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
internal/cli/agent.go (1)
39-43: Optional: deduplicate workspace query construction between commands.The same
commandWorkspaceFlag+AgentQueryblock 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 int.Run("Should ...")to match test conventions.The test does not use the required subtest pattern. Per coding guidelines,
**/*_test.gotests must uset.Run("Should ...")subtests witht.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
⛔ Files ignored due to path filters (22)
.compozy/tasks/qa-rounds/reviews-001/_meta.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_001.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_002.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_003.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_004.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_005.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_006.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_007.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_008.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_009.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_010.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_011.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_012.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-001/issue_013.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/_meta.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_001.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_002.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_003.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_004.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_005.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_006.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_007.mdis excluded by!**/*.md
📒 Files selected for processing (14)
internal/api/core/coverage_helpers_test.gointernal/api/core/error_paths_test.gointernal/api/core/handlers.gointernal/api/core/network_details.gointernal/api/core/network_test.gointernal/api/core/session_workspace.gointernal/api/core/session_workspace_internal_test.gointernal/api/core/settings_test.gointernal/api/core/tasks_terminal_integration_test.gointernal/api/core/workspaces.gointernal/cli/agent.gointernal/cli/config_test.gointernal/cli/install_test.gointernal/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
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (5)
.compozy/tasks/qa-rounds/reviews-002/_meta.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_001.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_002.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_003.mdis excluded by!**/*.md.compozy/tasks/qa-rounds/reviews-002/issue_004.mdis excluded by!**/*.md
📒 Files selected for processing (5)
internal/api/core/error_paths_test.gointernal/api/core/network_details.gointernal/api/core/network_test.gointernal/api/core/tasks_terminal_integration_test.gointernal/cli/agent.go
🚧 Files skipped from review as they are similar to previous changes (1)
- internal/api/core/tasks_terminal_integration_test.go
## 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>
## 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>
## 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>
## 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 --> [](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>
## 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 --> [](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>
Summary by CodeRabbit
Release Notes
New Features
Improvements
Documentation