3.9 KiB
3.9 KiB
id, title, status, wave, depends_on, plan, requirements, acceptance_criteria, system_design
| id | title | status | wave | depends_on | plan | requirements | acceptance_criteria | system_design | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01-merge-opencode-credential-providers | Merge OpenCode credential provider maps | done | 1 | plan.md |
|
|
|
Task 01: Merge OpenCode Credential Provider Maps
Summary
Add an agent-owned merge policy to the remote credential pipeline. Use it to preserve existing OpenCode provider logins on remote executors.
In scope
- Add the internal credential-file conflict policy to agent and catalog models.
- Declare the JSON-object merge policy for OpenCode.
- Add target reads to persistent credential file transports.
- Keep isolated credential targets on the validated write path.
- Merge provider maps in the shared credential uploader.
- Preserve an existing target when a read or parse fails.
- Add focused unit and SSH integration tests.
- Update the public SSH executor reference.
Out of scope
- A settings control for conflict behavior.
- Credential backups.
- Provider-specific deep merges below the top-level provider key.
- Remote file locking.
Acceptance
- A copy preserves target-only providers and adds source-only providers.
- A source provider replaces a target provider with the same key.
- An unreadable or malformed existing target remains byte-for-byte unchanged.
- An unreadable source file reports a credential-copy error and does not write a target.
- A malformed source file reports a credential-copy error and does not write a target.
Verification
cd apps/backend && go test ./internal/agent/agents ./internal/agent/remoteauth ./internal/agent/runtime/lifecycle -run 'Test(OpenCodeACPRemoteAuth|BuildCatalog|UploadCredentialFiles|SeedAgentSessionDir_OpenCode|SSHExecutorUploadCredentials|SSHFileUploader)' -count=1
python3 scripts/lint-spec-files.py --all
node --test scripts/validate-public-docs.test.mjs
node scripts/validate-public-docs.mjs
git diff --check
Files likely touched
apps/backend/internal/agent/agents/agent.goapps/backend/internal/agent/agents/opencode_acp.goapps/backend/internal/agent/agents/opencode_acp_test.goapps/backend/internal/agent/remoteauth/catalog.goapps/backend/internal/agent/remoteauth/catalog_test.goapps/backend/internal/agent/runtime/lifecycle/credential_uploader.goapps/backend/internal/agent/runtime/lifecycle/credential_uploader_test.goapps/backend/internal/agent/runtime/lifecycle/agent_session_seeder.goapps/backend/internal/agent/runtime/lifecycle/executor_sprites.goapps/backend/internal/agent/runtime/lifecycle/executor_ssh_credentials.goapps/backend/internal/agent/runtime/lifecycle/executor_ssh_credentials_remote_test.godocs/public/executors.md
Dependencies
None.
Risks
- Each transport reports a missing file differently. The shared reader contract must normalize this condition.
- The source-wins collision rule can replace one existing provider login by design.
Parallelism
sequential
Inputs
REQ-EXECUTORS-SSH-EXECUTOR-001docs/specs/executors/system-design/ssh-executor.mddocs/decisions/2026-09-05-agent-owned-credential-file-conflicts.md- GitHub issue
kdlbs/kandev#3382 - Existing
FileUploaderand passthrough JSON merge patterns.
Results
Implemented the agent-owned JSON-object conflict policy for OpenCode credentials. SSH and Sprites read persistent targets before the merge.
Isolated targets validate and write the source object. Malformed inputs leave an existing target unchanged, and unreadable or malformed sources report a credential-copy error before any write.
Public docs updated: docs/public/executors.md (reference).
Verification results:
- Focused Go tests: 19 passed in three packages.
- Specification linter: passed.
- Public documentation tests: 61 passed.
- Published documentation validator: 45 pages passed.
- Git diff check: passed.