Skip to content

Commit b297c62

Browse files
committed
Merge origin/main into cl-7023-overhaul-implement-skill
2 parents 8798e9f + 72658d7 commit b297c62

52 files changed

Lines changed: 1648 additions & 1032 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ matching `## [X.Y.Z]` section (plus install instructions). Do not maintain
1111
parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
1212
`## [Unreleased]` to `## [X.Y.Z] - YYYY-MM-DD`, then run the release script.
1313

14+
## [Unreleased]
15+
16+
### Fixed
17+
18+
- One-shot confirmation flashes (copy, mouse toggle, attach results, reasoning effort, stall recovery) now clear themselves after a short TTL. Rate-limit waits no longer park on the bottom notice row; the durable error stays in the transcript. Live stall notice and landing hold still omit a TTL so they stay until replaced.
19+
- A TTL flash no longer paints chrome after the TUI renderer is destroyed, which crashed parallel TUI tests with `TextBuffer is destroyed`.
20+
1421
## [0.3.1] - 2026-08-24
1522

1623
### Fixed

docs/TUI.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@ Color is a small, deliberate palette, not decoration
161161
(`src/tui/theme.ts`). Dimmed text is a dimmed cream, never a neutral
162162
gray, so every emphasis level keeps the same warm hue. Orange
163163
(`UI.action`) is spent once per screen: it marks the session identity,
164-
a leading `/command` or `@mention` in the prompt, and whatever is currently
165-
awaiting a human decision (an approval subject, an active choice) — nothing
166-
else competes with it. Standing caution (`mcp !`, `plugin !`, the context
167-
meter's 61–80 band) uses `UI.warning`; the meter turns `UI.error` at 81–100.
164+
a leading `/command` or `@mention` in the prompt, and the dithered subject
165+
of a decision surface (permission or operator ask) — nothing else competes
166+
with it. Standing caution (`mcp !`, `plugin !`, the context
167+
meter's 61–80 band, consequence impact under a list) uses `UI.warning`; the meter turns `UI.error` at 81–100.
168168
Ongoing, non-decision status uses the bronze/sand/ember chrome ramp and green
169169
(`UI.done`) for completion.
170170
The one deliberate exception is diff removals, where orange is content (the
@@ -292,9 +292,12 @@ approval.
292292
The decision surfaces (permission approval, operator question) are the one
293293
framed content in the shell, and they are shaped rather than merely listed
294294
(`src/tui/overlay-body.ts`): a dithered header (`░▒▓`) carries the
295-
subject in the action color, a blank row separates it from context, and each
296-
choice gets one row with the active choice marked by a solid block (``)
297-
rather than a background fill.
295+
subject in the action color — the only Breakthrough Orange on the card.
296+
The overlay host border and title use calm dim chrome (`UI.textDim`);
297+
consequence impact in the description zone paints `UI.warning` (sand), not
298+
orange. A blank row separates the subject from context, and each choice gets
299+
one row with the active choice marked by a solid block (``) rather than a
300+
background fill (cream text, not orange).
298301

299302
## How selectors should work
300303

@@ -546,7 +549,9 @@ running its own selection. Two chords cover remaining copy needs:
546549
(`CliRenderEvents.SELECTION``copyFinishedSelection` in
547550
`selection-copy.ts`). On mouse-up, non-empty selected text is written
548551
through the system clipboard port and the highlight clears with a status
549-
flash. Empty clicks do not copy.
552+
flash. Empty clicks do not copy. Confirmation flashes pass
553+
`ttlMs: RUNTIME_FLASH_MS` so they clear themselves; omit TTL only for
554+
live conditions that stay true until replaced (stall notice, landing hold).
550555
- **Alt+M** toggles DEC mouse reporting off and back on
551556
(`toggleMouseCapture`, `shell.ts`). Off, the terminal's own drag-select
552557
and copy work exactly as in any other terminal program; the status flash

plugins/corbits-skills/skills/create-issue/SKILL.md

Lines changed: 53 additions & 417 deletions
Large diffs are not rendered by default.

plugins/corbits-skills/skills/interview/SKILL.md

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ description: Conduct an iterative multiple-choice interview using ask_operator.
66

77
# Interview
88

9-
Use this skill to gather user input on a topic by asking multiple-choice questions in batches via `ask_operator`. Return the questions and answers in the conversation. The caller decides what to do with them.
9+
Gather structured user input on a topic via multiple-choice `ask_operator` questions. Emit the Q&A inline; the caller decides what to do with it.
1010

11-
This is a utility, not a planner. It does not decide what to build, write any files, or invoke other skills.
11+
This is a utility, not a planner. It does not decide what to build, write any files, spawn agents, or invoke other skills.
1212

1313
## Argument
1414

@@ -23,15 +23,17 @@ If no topic is given, ask for one with `ask_operator` before proceeding.
2323

2424
### Identify dimensions to probe
2525

26-
Enumerate the open questions worth asking, drawn from the topic and context. Skip dimensions the context already settles. Add domain-specific ones where relevant. There is no fixed dimension list — the topic determines it.
26+
Enumerate the open questions worth asking from the topic and context. Skip dimensions the context already settles. Add domain-specific ones where relevant. There is no fixed dimension list — the topic determines it.
2727

2828
Probe objective and priorities before details. They shape every later question, so anchoring them early prevents reshuffling halfway through.
2929

30-
### Ask in batches
30+
### Ask with ask_operator
3131

32-
Each question is one `ask_operator` call: `question` (string) plus `options` (array of strings). Batch a round by firing 2–4 independent `ask_operator` calls together (parallel tool calls). Refer to the tool's own documentation for parameter limits.
32+
Each question is one `ask_operator` call: `question` (string) plus `options` (array of strings). Fire independent questions together as parallel tool calls in the same turn.
3333

34-
`ask_operator` is single-select per call. The operator can also type a custom answer. There is no multi-select flag — if a dimension genuinely permits several answers, encode the realistic combinations as options, or follow up with a second question once the first answer lands.
34+
`ask_operator` is single-select per call. The operator can also type a custom answer. There is no multi-select flag — if a dimension genuinely permits several answers, encode the realistic combinations as options, or follow up once the first answer lands.
35+
36+
**No false caps.** `ask_operator` has no skill-invented ceiling on option count, parallel questions per round, or total rounds. Batch every independent dimension you can author now. Drop to one question only when the next question's text or options cannot be written without this answer. Stop when marginal value is low (see below) — never because a made-up quota was hit. If the caller passed an explicit cap, honour it.
3537

3638
**Quality bar for options:**
3739

@@ -42,11 +44,7 @@ Each question is one `ask_operator` call: `question` (string) plus `options` (ar
4244
- Combination options only when the dimension genuinely permits more than one answer
4345
- If you have a recommendation, put it first and label it
4446

45-
**Batching:**
46-
47-
- Default 2–4 `ask_operator` calls per round, bundling dimensions that do not depend on each other
48-
- Drop to 1 question only when the next question's text or options cannot be authored without this answer
49-
- Referencing a prior answer inside a later question's text is fine
47+
Referencing a prior answer inside a later question's text is fine.
5048

5149
### Decide when to stop
5250

@@ -57,7 +55,7 @@ Stop when:
5755
- The user has signalled fatigue (declines to choose, short non-substantive custom answers, asks to wrap up)
5856
- The topic has shifted into territory outside this interview's scope
5957

60-
There is no fixed round cap. Stop when the marginal value of another round is low. If the caller passed an explicit cap, honour it.
58+
There is no fixed round cap. Stop when the marginal value of another round is low.
6159

6260
### Handle trouble
6361

@@ -92,7 +90,7 @@ After emitting the findings, stop. Do not load other skills, invoke other agents
9290

9391
**Invocation:** `use_skill(name="interview")` with the topic in the conversation, or `/interview notification system; backend is Node/Postgres, internal users only, must integrate with existing auth`
9492

95-
**Round 1** (3 parallel `ask_operator` calls, bundled because none depends on the others):
93+
**Round 1** (three parallel `ask_operator` calls — independent dimensions, so ask together):
9694

9795
```
9896
ask_operator({
@@ -138,7 +136,8 @@ ask_operator({
138136
## Anti-patterns
139137

140138
- **Interviewing yourself.** Filling in answers because they "seem obvious" — stop and ask, or note as assumption.
141-
- **One question per round, ten rounds deep.** Batch related questions as parallel `ask_operator` calls.
139+
- **Serializing independent questions.** If dimensions do not depend on each other, ask them in parallel.
140+
- **Inventing quotas.** Do not stop or thin options because of a made-up question or option count.
142141
- **Asking about everything.** Prune dimensions that do not apply.
143142
- **Treating a custom answer as failure.** Custom answers are signal.
144143
- **Forgetting context.** Read it. Do not re-ask things the context already settled.

plugins/corbits-skills/skills/review/SKILL.md

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,20 @@ argument-hint: "[paths | PR | diff | hygiene | architecture]"
88

99
You are Skywalker. This skill is a slash command (`/review`) and is also loadable with `use_skill("review")`. Do not implement fixes. Do not write product patches to "just quickly" address findings. Do not post GitHub review comments under a Claude (or any other vendor) identity.
1010

11-
Spawn a director. Pass the operator's scope — paths, PR, branch, or diff — as the brief. Report that director's Summary / Findings / Blockers / Paths.
11+
Classify the lens, spawn the matching director(s), wait for reports, synthesize. Findings only — never land fixes in this recipe.
1212

1313
## Routing
1414

15-
- **Default** (correctness, completeness, brief adherence, defects with evidence): `task(agent="critique")`
16-
- **Hygiene-only** (nits, naming, lint, pedantry with receipts): `task(agent="neckbeard")`
17-
- **Architecture-only** (structure, boundaries, approach): `task(agent="greybeard")`
15+
- **Default** (correctness, completeness, brief adherence, defects with evidence): `critique`
16+
- **Hygiene-only** (nits, naming, lint, pedantry with receipts): `neckbeard`
17+
- **Architecture-only** (structure, boundaries, approach): `greybeard`
1818

19-
If the operator did not say hygiene-only or architecture-only, spawn critique. Do not spawn all three unless they asked for a wider review.
19+
If the operator did not say hygiene-only or architecture-only, spawn critique alone. Do not spawn all three unless they asked for a wider review.
20+
21+
## Fleet
22+
23+
- **One lens:** `task(agent="<director>")` — blocking single spawn; prefer this when only one worker is needed.
24+
- **Wider review** (operator asked for more than one lens): `spawn_agent(agent="<director>", …)` once per lens in the same turn; record each returned `agent_id`, then `wait_agents` on those ids.
2025

2126
Prefer a typed brief: `intent="review"`, `success_criteria`, `do_not`, `report_focus`, and `agent`.
2227

@@ -27,9 +32,9 @@ Include whatever the operator gave you, plus enough for a scoped review:
2732
- Paths, PR number/URL, or branch to review
2833
- Base for comparison when known (`git diff <base>...HEAD`); if the base is unclear, ask rather than guessing `main`
2934
- That only the operator's scope is in scope — pre-existing issues outside the diff are out of lane
30-
- Do not implement fixes; findings only, with evidence
35+
- Do not implement fixes; findings only, with evidence (`path:line`)
3136
- Signal over noise: skip hypotheticals and style nits that do not affect correctness, readability, or maintainability (neckbeard is the exception when hygiene was requested)
3237

3338
## After the report
3439

35-
Synthesize. Do not land fixes. If the operator then wants repairs, that is a later `/implement` or `use_skill("dispatch")` — not this skill.
40+
Synthesize Summary / Findings / Blockers / Paths for the operator. Do not land fixes. If the operator then wants repairs, that is a later `/implement` or `use_skill("dispatch")` — not this skill.

0 commit comments

Comments
 (0)