Dashboard › opencode › Distillation
28137519-0269-4867-b661-6d4b2afdf118["lore_tm_v1_5svNfs1X8uXEDVpzz3lG78m6jDY9cGpnxFJv7LMJ81g","lore_tm_v1_3cnxiyWG-0TViq7b0AcBwcCMSLF5ct5-ges6CdBFdrY","lore_tm_v1_VdKMCMdM9qz6OK9TbASVKlji0-IaNcqMwNo6_anZM_U","lore_tm_v1_A_J5oargOXNz6IXDjAoY5ybe2ae5t-1x2_8FEx_uftU","lore_tm_v1_FhmNqqj5HrceqA_s1ZYduyrSFq9hm0V8dhgn-lztKuM","lore_tm_v1_2okrbkICV216M6OrpOfYL6gvvGs4h-80AcJTqc_8x2g","lore_tm_v1_ErFQxJXGbOZXy9aYjjppLk1cFfvnKvv9iu0vlIXBKqM","lore_tm_v1_AcxJS3QI1Ov_zQH0BTrMx_CEiU9CtHMsueFqnb7SXeA"]
/home/byk/.local/share/opencode-v2-pilot/CUTOVER.md is: 1. confirm production remains healthy on port 4096; 2. confirm candidate revision with git -C /home/byk/Code/opencode-v2-pilot rev-parse HEAD and smoke-build version with /home/byk/Code/opencode-v2-pilot/packages/cli/dist-v2-pilot-final/cli-node-linux-x64/bin/opencode2-node --version; 3. confirm isolated candidate on port 14102 using curl --fail --user opencode:$OPENCODE_PASSWORD http://127.0.0.1:14102/api/health and curl --fail http://127.0.0.1:14102/ >/dev/null; 4. after POST /api/plugin/await-activation, confirm both local plugins are active; 5. create /home/byk/.local/share/opencode-v2-pilot/server.env as mode 0600 with exactly one line, OPENCODE_PASSWORD=<password>; 6. run the candidate-plugin PTY smoke harness at least 10 times and confirm all five tools, canonical permissions and source identity, Session ownership, interaction, JSON notifications, timeouts, TERM-to-KILL escalation, deletion and in-flight deletion, atomic reservations, byte limits, line paging, fixed environment, pinned cwd, and cleanup; 7. confirm PTY runs in-process as byk with no root helper, supervisor service, readiness marker, or root-owned runtime dependency, and exclude dormant supervisor/ source from activation and cutover; 8. confirm explicit kill, timeout, Session deletion, plugin unload, and candidate shutdown stop the PTY process group; 9. obtain fresh independent correctness and security approval for the exact source revision and candidate binary hash; 10. validate the candidate unit with systemd-analyze verify without starting, stopping, or changing production.setsid() or daemonizes can escape process-group cleanup; this is outside the chosen byk trust model./etc/systemd/system/opencode-v2.service; 2. run sudo systemctl daemon-reload; 3. run sudo systemctl stop opencode.service; 4. run sudo systemctl start opencode-v2.service; 5. wait for socket binding, then verify /api/health, /, /site.webmanifest, /sw.js, and /openapi.json on port 4096; 6. call POST /api/plugin/await-activation, then confirm followup and local-pty are active in GET /api/plugin; 7. observe real browser traffic and run one follow-up plus one PTY smoke session; 8. enable opencode-v2.service only after every check passes, while retaining opencode.service installed and disabled for rollback.sudo systemctl stop opencode-v2.service; 2. run sudo systemctl start opencode.service; 3. verify the legacy health endpoint and browser UI on port 4096; 4. disable opencode-v2.service only after legacy-service health is confirmed./home/byk/.local/share/opencode-v2-pilot/data, and rollback never rewrites or deletes either database.4 Schema.decodeUnknownPromise matches: /home/byk/Code/opencode-v2-pilot/packages/cli/test/service.test.ts:568 decodes Service.Info; /home/byk/Code/opencode-v2-pilot/packages/cli/src/services/standalone.ts:10 defines decodeReady = Schema.decodeUnknownPromise(Schema.fromJsonString(Ready)); /home/byk/Code/opencode-v2-pilot/packages/cli/script/service-smoke.ts:37 decodes Service.Info from the registration JSON; and /home/byk/Code/opencode-v2-pilot/packages/cli/script/service-smoke.ts:133 decodes ServiceStatus.Health from a successful response./home/byk/.local/share/opencode-v2-pilot/config/opencode/test/pty.test.ts.bun test v1.3.14 (0d9b296a) run completed with exactly 6 pass, 0 fail, and 21 expect() calls across 6 tests in 2 files in 7.53s.bun test v1.3.14 (0d9b296a) runs each completed with exactly 5 pass, 0 fail, and 14 expect() calls across 5 tests in 1 file; durations were respectively 6.38s, 6.34s, and 6.39s.https://opencode.ai/config.json; exact undocumented field shapes should be checked there rather than guessed, and every opencode.json should declare "$schema": "https://opencode.ai/config.json".opencode.json, an agent file, skill, plugin, or other config-time file, OpenCode must be quit and restarted for changes to take effect.model always carries a provider prefix, exemplified by "anthropic/claude-sonnet-4-6".skills is an object with paths and/or urls, not an array; references is an object keyed by alias; agent is an object keyed by agent name, not an array; command is an object keyed by command name, not an array; plugin is an array of strings or [name, options] tuples, not an object; and permission is either a string action or an object keyed by tool name.mcp[name].command must be an array of strings, never a single string, and mcp[name].type is required.description are advertised to agents; hidden: true removes a reference only from TUI @ autocomplete while preserving agent and direct-path access; reference directories are automatically allowed through the external-directory boundary, though normal read/edit/tool permissions continue to apply.name is required, lowercase hyphen-separated, at most 64 characters, and must match the folder name; description is effectively required because skills lacking one are filtered out; descriptions should explain what and when, use third person, front-load concrete trigger keywords and filenames, and use βUse ONLY when...β to prevent activation on adjacent topics.build, plan, general, and explore, plus hidden internal agents compaction, title, and summary; a built-in can be overridden by defining the same key in agent: { <name>: { ... } }.*.ts or *.js under .opencode/plugin/ or .opencode/plugins/.$schema and all existing fields not requested for change; agent, command, skill, and plugin definitions should preferably be created as files in their correct locations rather than inlined into opencode.json.