feat(extension): bug-session orchestration + lifecycle (harmoniqs/amicode#249) - #251
Merged
Conversation
…ifecycle kinds (amicode#250)
…ent join (amicode#250)
…sink wiring (amicode#250)
… path (amicode#250)
…-param gate at every session prep (amicode#250)
…bounded lifecycle logging (amicode#250)
…app boot (amicode#249 QA) The app pokes once per frame boot with the flag on; the manager answers with a fresh open-bug-report when a bug session is live (joining an in-flight create, never double-creating), silence otherwise. Also: [bug] lifecycle log lines for the open/poke paths — the preview debugging had to spelunk the db for what one log line would have said.
jeonghun-jj-lee
marked this pull request as ready for review
August 4, 2026 02:14
…micode#249 QA) The sync watch can surface a bug session orphaned by a dead extension host. Closing that dock posted bug-report-closed for an id the new manager never knew; dropping it left an immortal session the watch resurrected forever. Unknown-id closes now read the session: bug_report metadata + not archived → abort + hard delete; archived (filed) sessions and genuinely foreign ids are never touched.
…election (amicode#249 QA)
The report-a-bug bridge command may now carry the composer's current
{providerID, modelID, variant}; the manager pins it on the arming command
(model: '<provider>/<model>') so the bug session runs the model the user
was actually using — subscription provider included (Zen never silently
becomes Go). Shape-validated at the bridge, bounded, stripped when
malformed; absent falls back to the server default.
…9 QA) Two robustness gaps hit in the live preview dogfood: - postToApp's retry timer threw 'Webview is disposed' when the chat panel closed between the two posts (window closing mid-flow). The down-lane now wraps both posts in try/catch — a lost open heals via the app's boot poke + sync watch. - A session closed while the bridge was down (disposed webview, dead window) left manager.current pinned to a ghost: every later button click would reveal nothing and never create. The reveal path now probes session liveness (GET, 404-tolerant) before posting — a dead memory clears itself and falls through to a fresh create.
… (amicode#249) Cheap, fast, no OpenAI/Claude — the report-a-bug command now always pins the arm to deepseek-v4-pro, bypassing the server default.
…ode#249) The 'Edit with notes' option requires the user to select it AND type modifications in the 'Type your own answer' free-text field — the question tool always appends this field as the last radio option. Previous wording implied a separate textbox that doesn't exist.
…te (amicode#249) The confirm step now asks via a plain free-form text question with no pre-defined options, so the 'Type your own answer' field IS the only input — always visible. Reply with 'file it', 'edit: <changes>', or 'veto' — the skill parses the answer.
…exactly (amicode#249) The confirm step now uses the same 'Ask **one** question, via the `question` tool' pattern as step 5, which the model follows reliably. Explicit 'Never ask follow-ups' header prevents the model from inventing repo/comment questions before the gate.
…ing pathway (amicode#249) - Red/blue debug borders around the answer wrapper + question content — proves the area renders; textarea is inside. - The confirm gate gains a fourth option: 'comment: <repo>#<issue> <text>' posts a clarifying comment to an existing issue via gh issue comment, prints the sentinel, ends the session.
- createSession passes permission: [{question, deny, *}] — the question
tool is invisible to the model (hard guardrail, same as CLI non-interactive).
- Skill step 2 (capture) and step 6 (confirm gate): 'via the question tool'
replaced with 'output as plain text, wait for the user's reply.'
- Explicit 'Do not use the question tool' directive in both steps.
- Option A: at least one content question, accepts user follow-ups.
…omment path - Sentinel is a lifecycle signal, not a semantic bug-classification judgment. Prints after issue created, comment posted, OR chore filed. - Comment path: explicit AMICODE_BUG_FILED format with full issue URL (construct from repo + number). - Removed 'actual filing' language that made the model skip the sentinel for comments. - Invariants updated: 'any successful GitHub action' replaces 'actual filing'.
jeonghun-jj-lee
force-pushed
the
amico/issue-249-bug-report
branch
from
August 7, 2026 00:38
2729ab9 to
b2033ae
Compare
- armSession omits the model field entirely — the server uses whatever model the user has configured globally (their defaultModel or the server's built-in default). - Removed findOriginModel (session.model isn't set by the model picker, only at session create — so it's always empty for picker-users). - No amicode.bugReportModel setting (unnecessary complexity).
jeonghun-jj-lee
force-pushed
the
amico/issue-249-bug-report
branch
from
August 7, 2026 00:46
b2033ae to
bf11d7f
Compare
…eport # Conflicts: # packages/extension/skills/report-a-bug/SKILL.md # packages/extension/src/chat_panel.ts # packages/extension/test/chat_bridge.test.ts
gennadiryan
pushed a commit
that referenced
this pull request
Aug 7, 2026
…opencode.lock): pin to v1.18.10-amicode.4 (#245)
jeonghun-jj-lee
pushed a commit
that referenced
this pull request
Aug 8, 2026
) * feat(extension): bug-session orchestration + lifecycle (#251), chore(opencode.lock): pin to v1.18.10-amicode.4 (#245) * Adding provenance stamping to catch bad build configurations * fix(extension): attribute detached builds in the provenance stamp --------- Co-authored-by: Gennadi Ryan <gennadi@harmoniqs.co>
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #249 — the extension slice of the machine-managed bug-session feature. Lifecycle spec:
docs/adr/0004-bug-session-lifecycle.md(on main).Carries:
amicode.reportBugcommand, context envelope (bug_reportsession metadata), bridge allowlist additions, machine-managed lifecycle (filed → archive +close-bug-report; abandoned → abort + hard delete; failure → no orphans), single-open invariant, boot param re-pinned from the staged skill set.bug-report-pokeup-kind: relay Lane-1 admission, bridge route, andBugReportManager.poke()— re-postsopen-bug-reportwhen a bug session is live (joins an in-flight create, never double-creates), silence otherwise. Plus[bug]lifecycle log lines for the open/poke paths. 5 new vitest cases (4 manager + 1 bridge).Bridge contract (matches the fork side, harmoniqs/opencode PR #118): DOWN
open-bug-report {sessionID}/close-bug-report {sessionID}; UPbug-filed {sessionID, url}/bug-report-closed {sessionID}/bug-report-poke.Preview-verified end-to-end: create → arm → open → dock renders; the poke heals the cold-boot lost-open race the dogfood hit.
Inert until the
amicode_bug_report=1boot param and the skills-bundle release (harmoniqs/amico-plugin#57 — deferred to post-merge by owner decision) align.Opened by the develop DAG walk; marked ready for review with the release slice explicitly deferred.