Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
91e28ce
Cut Mission 4: redesign runbook and workpiece
lunelson Aug 31, 2026
7347f6f
Advance upcoming missions after Mission 4 cut
lunelson Aug 31, 2026
3a87a60
Keep closed Mission 3 outside future numbering
lunelson Aug 31, 2026
41a1214
Bind Mission 4 to the completed baseline
lunelson Aug 31, 2026
237a311
Colocate the chat agent with its Flue resources
lunelson Aug 31, 2026
93d81db
Group Brunch shell code by authority
lunelson Aug 31, 2026
d090c2b
Separate runbook instruments from product runtime
lunelson Aug 31, 2026
d2888af
Keep Brunch topology verification current
lunelson Aug 31, 2026
767c326
Inject the in-process Flue transport
lunelson Aug 31, 2026
2d6d0dd
Split Brunch core from SDCPN agent resources
lunelson Aug 31, 2026
3ada120
Inline short Flue prompt fragments
lunelson Aug 31, 2026
42a78c7
Format Flue instructions as template blocks
lunelson Aug 31, 2026
eb58763
Keep Brunch core context independent
lunelson Aug 31, 2026
c8ab012
Audit generic elicitor prompt material
lunelson Aug 31, 2026
70acc0d
Load the Brunch system prompt from Markdown
lunelson Aug 31, 2026
96479d7
Add a core prompt shaping workbench
lunelson Aug 31, 2026
4f5a1e6
Group Brunch core source by authority
lunelson Aug 31, 2026
ecf4484
Record the core prompt topology decision
lunelson Aug 31, 2026
aff92de
WIP
lunelson Aug 31, 2026
22613c0
Keep chat verification aligned with core identity
lunelson Sep 1, 2026
380262d
Test chat behavior instead of prompt wording
lunelson Sep 1, 2026
59d22b0
WIP
lunelson Aug 31, 2026
3301937
pre-consultation
lunelson Sep 1, 2026
61a256f
new full pattern drafts
lunelson Sep 1, 2026
75b7abe
two good draft prompting sets; domain-typology and target-formalism aโ€ฆ
lunelson Sep 1, 2026
4719848
Refine the five-register elicitation draft
lunelson Sep 1, 2026
0862554
Calibrate evidence claims in the runbook draft
lunelson Sep 1, 2026
3d89fee
Define the five-register draft evaluation protocol
lunelson Sep 1, 2026
65085cb
Generalize the Ampcode prompt architecture draft
lunelson Sep 1, 2026
d08d5ad
Add the domain-primary readiness candidate
lunelson Sep 1, 2026
ee8d01a
Record the five-register mechanical audit
lunelson Sep 1, 2026
302e3f5
five-register post-review fixing
lunelson Sep 1, 2026
a255878
Archive Mission 4 at branch transition
lunelson Sep 1, 2026
c10c359
Record Flue skill composition evidence
lunelson Sep 2, 2026
f179ee7
side quest for mission re-lacing
lunelson Sep 2, 2026
ff33ff4
mission re-lacing sidequest after 3 passes
lunelson Sep 2, 2026
d14b461
Restore Brunch planning decisions
lunelson Sep 2, 2026
a72cd6f
Pin Brunch planning split proof
lunelson Sep 2, 2026
819268b
Freeze the Brunch Mission 4 candidate instrument
lunelson Sep 2, 2026
702027b
Narrow Mission 4 scoring to the flat-prompt control
lunelson Sep 2, 2026
79529cb
Close Brunch Mission 4 with accepted evidence
lunelson Sep 2, 2026
2d09a34
ignore playwright cli outputs
lunelson Sep 2, 2026
da9f926
Reopen and repair Brunch Mission 4 evidence
lunelson Sep 2, 2026
ed61aeb
Freeze the repaired Mission 4 campaign protocol
lunelson Sep 2, 2026
df5384b
Authorize the repaired Mission 4 scoring campaign
lunelson Sep 2, 2026
04781b6
manual docs move
lunelson Sep 2, 2026
31def20
Reject the invalid Mission 4 v4 campaign
lunelson Sep 2, 2026
f5b7302
Freeze the Mission 4 v5 routing repair
lunelson Sep 2, 2026
7210b66
Lay the agreed Brunch core/plugin topology and retire the YAML pluginโ€ฆ
lunelson Sep 2, 2026
975cca9
draft material deletions;
lunelson Sep 2, 2026
0877e27
doc salvage addition
lunelson Sep 2, 2026
febb173
Adopt decision-integrity rules and preserve the Mission 4 design record
lunelson Sep 2, 2026
018bb2a
Recut Mission 4 as the accepted core/plugin architecture proof
lunelson Sep 2, 2026
b1f4697
Add "brunch-turn" local pi extension for testing
lunelson Sep 2, 2026
829c477
Improve Brunch persona harness controls
lunelson Sep 2, 2026
a6397e9
Deduplicate Pi TUI lockfile dependency
lunelson Sep 2, 2026
a7d6015
Add client-tool hosting to Brunch persona harness
lunelson Sep 2, 2026
ccaa3d5
Add SDCPN common-language reference
lunelson Sep 2, 2026
5476443
Model persona interaction posture explicitly
lunelson Sep 2, 2026
3576da5
Add prospective persona evaluation cases
lunelson Sep 2, 2026
dc37b36
Move the Brunch persona harness into the application
lunelson Sep 2, 2026
7cd8788
Drop the duplicate SDCPN common-language salvage copy
lunelson Sep 2, 2026
ba31a6c
Propose the Mission 4 activation and restraint ruler
lunelson Sep 2, 2026
3d7cc94
mission 6 addition re petrinaut tool
lunelson Sep 2, 2026
1f7f3f4
Accept the Mission 4 proof-of-life ruler
lunelson Sep 3, 2026
4b403d2
Recut Mission 4 around proof of life
lunelson Sep 3, 2026
b3d0947
Inline universal elicitation guidance
lunelson Sep 3, 2026
e6796f6
Plan the Mission 4 proof-of-life campaign
lunelson Sep 3, 2026
1e940d5
Retain canonical persona proof traces
lunelson Sep 3, 2026
3b41199
Bind persona proof artifacts by hash
lunelson Sep 3, 2026
60ebbf1
Record Mission 4 model and cost preflight
lunelson Sep 3, 2026
a589e55
Review the proof trace substrate boundary
lunelson Sep 3, 2026
f90cf72
Prepare the Mission 4 freeze candidate
lunelson Sep 3, 2026
2c55621
Freeze the Mission 4 instrument manifest
lunelson Sep 3, 2026
7a7ee78
Record the Mission 4 freeze authorization
lunelson Sep 3, 2026
d9646f5
Retain the first Vestera proof probe
lunelson Sep 3, 2026
510b6c7
Retain the replacement Vestera proof probe
lunelson Sep 3, 2026
229b8fa
Cut the Mission 4 proof campaign v2
lunelson Sep 3, 2026
d75930b
Harden the Mission 4 v2 freeze candidate
lunelson Sep 3, 2026
9227420
Prepare the Mission 4 v2 freeze manifest
lunelson Sep 3, 2026
d7a93fb
Suspend the Mission 4 v2 currency gate
lunelson Sep 3, 2026
d3ef6d6
Refresh the Mission 4 v2 freeze manifest
lunelson Sep 3, 2026
f4355f5
Record the Mission 4 v2 freeze acceptance
lunelson Sep 3, 2026
a082457
Retain the Mission 4 v2 Vestera probe
lunelson Sep 3, 2026
bfd984e
Retain the Mission 4 v2 Data Centre probe
lunelson Sep 3, 2026
0a6fa30
Retain the Mission 4 v2 S3 review
lunelson Sep 3, 2026
bad62d1
Retain the Mission 4 v2 S4 failure
lunelson Sep 3, 2026
a1b1371
Record the Mission 4 v2 campaign stop
lunelson Sep 3, 2026
1cb5c77
Refresh the Mission 4 v2 run manifests
lunelson Sep 3, 2026
2215c64
Record the Mission 4 v2 proof failure
lunelson Sep 3, 2026
37a0574
Close Mission 4 and hand off Voice integration
lunelson Sep 3, 2026
95aad25
Simplify Mission 4 restack provenance
lunelson Sep 3, 2026
aa034de
Record the Voice merge collision probe
lunelson Sep 3, 2026
daf1d24
Decouple Mission 4 evidence from restack SHAs
lunelson Sep 3, 2026
f313168
Resolve Brunch stack review failures
lunelson Sep 3, 2026
72d51c9
re-write next missions
lunelson Sep 3, 2026
599328f
Link successor missions to Linear issues
lunelson Sep 3, 2026
733f1d0
Retire raw skill-composition run records
lunelson Sep 3, 2026
69c7d35
pm-oriented mission re-drafts
lunelson Sep 3, 2026
2563680
Retain compressed side-quest run evidence
lunelson Sep 3, 2026
51bec22
Align upper Brunch test task dependencies
lunelson Sep 3, 2026
81156aa
Cut Mission 5 direct Voice transport
lunelson Sep 3, 2026
167cc12
Align future drafts with live Mission 5
lunelson Sep 3, 2026
6e61f9d
Clarify Mission 5 direct transport proof
lunelson Sep 3, 2026
34bcd11
Recut Mission 5 around one Flue conversation route
lunelson Sep 3, 2026
ac57299
Align future planning record with the recut Mission 5 route
lunelson Sep 3, 2026
a58bcbd
Adopt the product-manager litmus in live Mission 5
lunelson Sep 3, 2026
658dbb8
Point the spine litmus at the live Mission 5 surface
lunelson Sep 3, 2026
364fd0b
Admit Voice submission through the panel's Flue transport
lunelson Sep 3, 2026
bb4457c
Expose the Flue browser chat transport
lunelson Sep 3, 2026
daf525e
Wire the Petrinaut panel to the Flue route
lunelson Sep 3, 2026
969808e
Remove the legacy Petrinaut chat route
lunelson Sep 3, 2026
0d5343b
Complete the Voice lifecycle over Flue
lunelson Sep 3, 2026
8ed492c
Document the unified Brunch conversation lifecycle
lunelson Sep 3, 2026
2936a4b
Harden Mission 5 review fixes for hydration, TTS, and Clear
lunelson Sep 3, 2026
05b3636
Fix Mission 5 verification blockers
lunelson Sep 3, 2026
10e7519
Record Mission 5 review verification
lunelson Sep 3, 2026
f118952
Record Voice latency from Flue admission
lunelson Sep 3, 2026
aecd4ca
Refresh Mission 5 evidence after admission timing
lunelson Sep 3, 2026
a4ec9f2
Wait for Flue admission before accepting Voice tool results
lunelson Sep 3, 2026
7c5b653
Refresh Mission 5 evidence for Voice tool admission
lunelson Sep 3, 2026
3cc798d
Align Brunch integration references with the Flue route
lunelson Sep 3, 2026
278fcb3
Format conversation identity sources
lunelson Sep 4, 2026
2a1bb35
Correlate Stop with its Flue submission and align the two conversatioโ€ฆ
lunelson Sep 4, 2026
eecbe99
Correlate Voice replies by every submission that wrote a message
lunelson Sep 4, 2026
f4adfde
Authorize Voice safety on the unified Flue route
kostandinang Sep 3, 2026
988482c
Pin unified Voice safety behavior
kostandinang Sep 3, 2026
4883b21
Harden Voice turns on the unified Flue route
kostandinang Sep 3, 2026
0c61215
Forward Voice actions through the panel
kostandinang Sep 3, 2026
ee7fd81
Reject transcripts completed after output starts
kostandinang Sep 3, 2026
957650a
Preserve Flue admission outcomes in Voice mode
kostandinang Sep 3, 2026
ff1c347
Record the Repeat question marker blocker
kostandinang Sep 3, 2026
0591e46
Keep Repeat question unavailable without a marker
kostandinang Sep 3, 2026
4a98039
Enforce the Voice transcript boundary
kostandinang Sep 3, 2026
dc3f671
Prove dormant ask and Voice provenance on reopen
kostandinang Sep 3, 2026
4342d62
Prove durable Stop through the Flue host seam
kostandinang Sep 3, 2026
f3c2852
Reconcile the Voice safety acceptance record
kostandinang Sep 3, 2026
58053ca
Clarify canonical speech turn ownership
kostandinang Sep 4, 2026
81da046
Invalidate input before canonical speech
kostandinang Sep 4, 2026
128d144
Prove Voice admission outcomes through the panel route
kostandinang Sep 4, 2026
161b789
Complete acknowledged Voice turn handoff
kostandinang Sep 4, 2026
8114136
Record Voice race verification
kostandinang Sep 4, 2026
b176777
Authorize exact Voice question markers
kostandinang Sep 4, 2026
9960494
Add exact Brunch question markers
kostandinang Sep 4, 2026
da30f92
Preserve hidden question markers across Flue
kostandinang Sep 4, 2026
8f76002
Select exact Brunch questions for Voice replay
kostandinang Sep 4, 2026
2d71d3c
Replay exact Brunch questions in Voice
kostandinang Sep 4, 2026
8f0d629
Record exact Voice question replay
kostandinang Sep 4, 2026
54ab6ab
Satisfy Voice replay lint checks
kostandinang Sep 4, 2026
b084546
Refresh Mission 5 acceptance records
kostandinang Sep 4, 2026
f7e0be9
Remove Brunch status from the composer
kostandinang Sep 4, 2026
820cce0
Reconcile Voice safety with the latest Flue parent
kostandinang Sep 4, 2026
5ef5619
Remove obsolete status dependencies
kostandinang Sep 4, 2026
96a4b87
Type Brunch question marker mocks
kostandinang Sep 4, 2026
75fa695
Restore the Voice witness and latency authority
kostandinang Sep 4, 2026
63acc34
Prepare the final Voice acceptance evidence
kostandinang Sep 4, 2026
9938283
Adapt Voice host tests to parent navigation
kostandinang Sep 4, 2026
60d41c5
Record the final Voice restack verification
kostandinang Sep 4, 2026
a04e142
Record Voice launcher remediation side quest
kostandinang Sep 4, 2026
011b8bc
Preserve Voice APIs in Brunch launcher
kostandinang Sep 4, 2026
3f3b106
Document compact Voice consent card
kostandinang Sep 4, 2026
cfa0441
Make Voice launcher test CI-hermetic
kostandinang Sep 4, 2026
7a1f746
Plan compact Voice consent card
kostandinang Sep 4, 2026
c7efd7d
Polish Voice consent setup
kostandinang Sep 4, 2026
fa27f58
Handle unavailable microphone checks
kostandinang Sep 4, 2026
8a904c4
Fix Voice verification errors
kostandinang Sep 4, 2026
46b66bc
Format Voice consent implementation plan
kostandinang Sep 4, 2026
d64f809
Remove compact Voice planning artifacts
kostandinang Sep 4, 2026
9d753b2
Prebuild Brunch dependencies before local development
kostandinang Sep 4, 2026
9a1afcf
Authorize bounded Petrinaut error and transcript UX work
kostandinang Sep 4, 2026
60d4913
Show live Voice transcripts and complete errors
kostandinang Sep 4, 2026
1ebdcf1
Authorize compact initial Voice setup
kostandinang Sep 4, 2026
193e4bd
Open initial Voice setup in compact mode
kostandinang Sep 4, 2026
ac66645
Authorize closing collapsed Voice with the panel
kostandinang Sep 4, 2026
f3f5c4e
Close the panel when collapsed Voice ends
kostandinang Sep 4, 2026
a1fb27c
Authorize committed canonical speech before settlement
kostandinang Sep 4, 2026
756ed4f
Start canonical Voice speech before settlement
kostandinang Sep 4, 2026
ca58dac
Document Voice turn settlement reconciliation
kostandinang Sep 6, 2026
59277c7
Reconcile Voice response settlement with playback
kostandinang Sep 6, 2026
c339998
Use submitting input and unconditional speech-cancelled restore
kostandinang Sep 6, 2026
e646a48
Keep capture closed for queued Voice speech
kostandinang Sep 6, 2026
7aba4f3
Remove generated superpowers docs from Voice settlement PR
kostandinang Sep 6, 2026
67a73be
Preserve queued Voice output ownership
kostandinang Sep 6, 2026
7d1eca5
Format Voice output ownership guard
kostandinang Sep 6, 2026
c8126cc
Preserve Voice ownership through cancellation
kostandinang Sep 6, 2026
b53b100
Avoid waiting for idle Voice output clear
kostandinang Sep 6, 2026
ccd31f8
Authorize interruption by speaking in Petrinaut Voice
kostandinang Sep 6, 2026
435d7dd
Allow Voice interruption by speaking
kostandinang Sep 6, 2026
0666d5b
Reject false Voice interruption transcripts before admission
kostandinang Sep 6, 2026
69cde87
Fix Voice interruption retention and VAD eagerness
kostandinang Sep 7, 2026
f69ac17
Preserve retained answers after transcript failures
kostandinang Sep 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/durable-brunch-stop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hashintel/petrinaut": patch
---

Let hosts make the assistant's Stop action durable before Petrinaut cancels its local response stream, while preserving local-only cancellation for hosts that do not provide the new stop request.
8 changes: 8 additions & 0 deletions .changeset/flue-voice-safety.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"@hashintel/petrinaut": patch
---

Add half-duplex Voice handoff, exact full-response replay, recoverable transcript notices, and multi-origin Voice attribution for client-tool results.
Voice transcripts now appear live with a dock-only collapse mode, while assistant and tool failures retain and display their complete details in persistent, copyable notifications and inline tool cards.
Voice selected from the first-run prompt now opens with its consent and microphone card above a compact setup dock, while Voice started from the composer retains the full panel. Collapse controls retain ghost-button styling in every state.
Ending Voice from the compact dock closes the AI panel instead of reopening its text composer.
5 changes: 5 additions & 0 deletions .changeset/petrinaut-voice-interruption.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hashintel/petrinaut": patch
---

Allow Voice users to interrupt assistant playback by speaking, with a browser-saved preference and optional manual handoff.
5 changes: 5 additions & 0 deletions .changeset/voice-input-withdrawal-and-stop-correlation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@hashintel/petrinaut": patch
---

Let hosts withdraw a retained voice input through an `AbortSignal`, keep a late durable Stop result from cancelling a newer turn, and hydrate host-owned history only once it carries every locally streamed reply.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ bower_components
.lock-wscript

# Tests
**/.playwright-cli/
**/playwright-report/
**/test-results/
tests/**/.auth/
Expand Down
127 changes: 127 additions & 0 deletions apps/brunch-agent/.pi/extensions/brunch-persona-testing.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
/**
* Pi extension entry for the Brunch persona harness.
*
* Load it from `apps/brunch-agent` with
* `--extension .pi/extensions/brunch-persona-testing.ts`; the persona policy
* and operating instructions sit in the same-named folder beside this file.
* This entry owns only Pi registration and flag handling. The tool lives in
* `src/evaluations/persona/brunch-turn.ts` and the client-tool hosts in
* `src/evaluations/persona/client-tool-hosts.ts`, where the application's
* lint, type-check, and unit tests govern them.
*/
import {
type BrunchTurnExtensionApi,
registerBrunchTurn,
requireConversationId,
} from "../../src/evaluations/persona/brunch-turn.ts";
import {
type BrunchClientToolHost,
createMockClientToolHost,
createRealHeadlessClientToolHost,
readMockCalls,
TOOL_HOST_FLAG,
} from "../../src/evaluations/persona/client-tool-hosts.ts";
import { writeProofArtifacts } from "../../src/evaluations/persona/proof-artifacts.ts";

/** The slice of Pi's extension API this entry needs; Pi itself is not a workspace dependency. */
interface BrunchPersonaExtensionApi extends BrunchTurnExtensionApi {
registerFlag(
name: string,
options: {
readonly description?: string;
readonly type: "string";
readonly default?: string;
},
): void;
getFlag(name: string): boolean | string | undefined;
on(
event: "session_start" | "session_shutdown",
handler: () => void | Promise<void>,
): void;
}

const TOOL_MOCKS_FLAG = "brunch-tool-mocks";
const HEADLESS_TITLE_FLAG = "brunch-headless-title";
const EVIDENCE_DIRECTORY_FLAG = "brunch-evidence-dir";

const stringFlag = (
pi: BrunchPersonaExtensionApi,
name: string,
): string | undefined => {
const value = pi.getFlag(name);
return typeof value === "string" && value.trim().length > 0
? value.trim()
: undefined;
};

const createConfiguredClientToolHost = (
pi: BrunchPersonaExtensionApi,
): BrunchClientToolHost | undefined => {
const mode = stringFlag(pi, TOOL_HOST_FLAG) ?? "none";
if (mode === "none") return undefined;

if (mode === "mock") {
const fixturePath = stringFlag(pi, TOOL_MOCKS_FLAG);
if (fixturePath === undefined) {
throw new Error(
`--${TOOL_MOCKS_FLAG} is required when --${TOOL_HOST_FLAG}=mock`,
);
}
return createMockClientToolHost(readMockCalls(fixturePath));
}

if (mode === "real-headless") {
const title =
stringFlag(pi, HEADLESS_TITLE_FLAG) ??
`Brunch persona ${requireConversationId(process.env["PI_SUBAGENT_NAME"])}`;
return createRealHeadlessClientToolHost(title);
}

throw new Error(
`--${TOOL_HOST_FLAG} must be one of none, mock, or real-headless; received ${mode}`,
);
};

// Pi loads an extension through its default export.
export default function brunchPersonaTestingExtension(
pi: BrunchPersonaExtensionApi,
): void {
pi.registerFlag(TOOL_HOST_FLAG, {
type: "string",
default: "none",
description: "Client-tool host: none, mock, or real-headless",
});
pi.registerFlag(TOOL_MOCKS_FLAG, {
type: "string",
description: "Ordered JSON fixture used by the mock client-tool host",
});
pi.registerFlag(HEADLESS_TITLE_FLAG, {
type: "string",
description: "Document title used by the real-headless Petrinaut host",
});
pi.registerFlag(EVIDENCE_DIRECTORY_FLAG, {
type: "string",
description:
"Directory for canonical snapshot, transcript, and trace files",
});

let clientToolHost: BrunchClientToolHost | undefined;
pi.on("session_start", async () => {
await clientToolHost?.dispose?.();
clientToolHost = createConfiguredClientToolHost(pi);
});
pi.on("session_shutdown", async () => {
await clientToolHost?.dispose?.();
clientToolHost = undefined;
});

registerBrunchTurn(pi, {
resolveClientToolHost: () => clientToolHost,
retainSnapshot: async (snapshot) => {
const directory = stringFlag(pi, EVIDENCE_DIRECTORY_FLAG);
if (directory !== undefined) {
await writeProofArtifacts(directory, snapshot);
}
},
});
}
Loading
Loading