Skip to content
This repository was archived by the owner on Aug 17, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
199 commits
Select commit Hold shift + click to select a range
35105d2
docs(openspec): draft fix-stuck-tool-card-superseded-heal proposal
robertcsakany Jul 11, 2026
072cd52
docs(kb): refresh drifted DOX rows + add root vitest.config.ts row
robertcsakany Jul 11, 2026
454d058
feat(fix-stuck-tool-card-superseded-heal): client supersede terminal …
robertcsakany Jul 11, 2026
89af590
docs(openspec): propose fix-remote-connect-cors-gates
robertcsakany Jul 11, 2026
cc94e5f
chore: bump pi to 0.80.6 across npm, electron, docker targets (#270)
robertcsakany Jul 11, 2026
0df53df
docs(openspec): propose add-custom-roles-ui
robertcsakany Jul 11, 2026
462f338
feat(add-tunnel-providers): provider abstraction + Gateway UI (ngrok/…
robertcsakany Jul 11, 2026
e9a1a4b
test(e2e): reconcile-heal spec + first-launch modal auto-dismiss
robertcsakany Jul 11, 2026
5b8ccf7
docs(openspec): scaffold instrument-event-store-trim
robertcsakany Jul 11, 2026
c918487
test(e2e): add chat-render FX + perf specs (reduce-chat-render-cpu-um…
robertcsakany Jul 11, 2026
aceb4ed
docs(openspec): archive + sync stuck-tool-card dropped-event & supers…
robertcsakany Jul 11, 2026
0b718ab
test(e2e): oversized-event server-liveness spec; archive bound-subage…
robertcsakany Jul 11, 2026
3117cf1
docs(openspec): record measured idle layouts/s=1.0 for reduce-chat-re…
robertcsakany Jul 11, 2026
a2c1359
chore(openspec): archive reduce-chat-render-cpu-umbrella + sync 3 cap…
robertcsakany Jul 12, 2026
f14d0c2
docs(openspec): add design + tasks for fix-table-copy-empty-clipboard
robertcsakany Jul 12, 2026
d87bbd1
docs(openspec): propose fix-virtualized-image-row-measurement (#267)
robertcsakany Jul 12, 2026
b6eaee8
test(e2e): add poisoned-replay-cache heal spec; archive fix-reducer-c…
robertcsakany Jul 12, 2026
48cbbb4
fix(model-proxy): keep claude-3-5-haiku-latest OAuth-denied; prune tr…
robertcsakany Jul 12, 2026
67b82dd
docs(openspec): propose add-kb-code-symbol-index
robertcsakany Jul 12, 2026
557da64
test(e2e): expand chat-virtualization coverage (tasks 4.2, 6.1, 7.2, …
robertcsakany Jul 12, 2026
c57a111
docs(openspec): add preserve-chat-selection-during-churn proposal
robertcsakany Jul 12, 2026
56c508b
docs(openspec): add fix-gemini-subagent-silent-tool-schema-failure ch…
robertcsakany Jul 12, 2026
8ed0714
docs(openspec): propose fix-and-prefer-model-proxy-resolution
robertcsakany Jul 12, 2026
0dbeb39
test(e2e): assert DOM-node perf bound + de-flake streaming-tail test
robertcsakany Jul 12, 2026
69b9b65
chore(openspec): archive virtualize-chat-transcript-tanstack + sync s…
robertcsakany Jul 12, 2026
10ba36c
fix(chat): content-aware row estimate + scroll-to-top affordance (#273)
robertcsakany Jul 12, 2026
7cf02ad
chore(openspec): update change group assignments and order
robertcsakany Jul 12, 2026
78a5bc2
feat(fix-local-electron-dmg-build): local build-installer.sh macOS DM…
robertcsakany Jul 12, 2026
6ae606d
fix(virtualized-image-row-measurement): re-measure image rows on asyn…
robertcsakany Jul 12, 2026
cfa68e0
feat(fix-table-copy-empty-clipboard): resolve copy payloads at click …
robertcsakany Jul 12, 2026
236e9ad
test(add-flow-plugin-e2e-tests): flow/subagent/bridge activation e2e …
robertcsakany Jul 12, 2026
9a100ee
feat(fix-and-prefer-model-proxy-resolution): first-slash model-id par…
robertcsakany Jul 12, 2026
d73a28f
feat(instrument-event-store-trim): count store trim/evict on /api/hea…
robertcsakany Jul 12, 2026
8bdcf28
feat(fix-remote-connect-cors-gates): unblock LAN remote-connect on El…
robertcsakany Jul 12, 2026
efb28e8
feat(gemini-silent-turn): guard empty-actionable (thinking-only) turn…
robertcsakany Jul 12, 2026
872e157
feat(preserve-chat-selection-during-churn): keep transcript selection…
robertcsakany Jul 12, 2026
6fb77e6
feat(gate-session-worktree-button-on-git): hide +Worktree only in con…
robertcsakany Jul 12, 2026
cc4f245
feat(support-non-git-init-hook): read worktree-init hook in non-git d…
robertcsakany Jul 12, 2026
93c9e8e
feat(add-custom-roles-ui): add/remove custom roles from the dashboard…
robertcsakany Jul 12, 2026
a607abd
docs(openspec): add-gateway-qr-network-selector proposal
robertcsakany Jul 12, 2026
ba26911
docs(openspec): propose fix-ctx-running-render
robertcsakany Jul 12, 2026
a39ee8e
docs(openspec): propose camera-scannable pairing QR via https deep link
robertcsakany Jul 12, 2026
ed0485f
feat(collapse-files-panel-by-default): default the editor Files rail …
robertcsakany Jul 12, 2026
6f7840a
feat(chat-copy-fidelity-intercept): faithful transcript copy via cont…
robertcsakany Jul 12, 2026
dfbd5b8
feat(fix-ctx-running-render): args-derived chip + running preview for…
robertcsakany Jul 12, 2026
9905502
feat(make-pairing-qr-camera-scannable): scannable https pairing QR + …
robertcsakany Jul 12, 2026
2e54ea5
feat(preserve-streaming-tail-selection): node-stable streaming tail p…
robertcsakany Jul 12, 2026
83facde
feat(add-gateway-qr-network-selector): single-QR network selector for…
robertcsakany Jul 13, 2026
8d82601
docs(openspec): add copy-file-path change proposal
robertcsakany Jul 13, 2026
0867c59
feat(persist-goal-status-and-progress): project live goal loop into d…
robertcsakany Jul 13, 2026
1a9c6df
feat(simplify-error-retry-single-card): single-card error/retry surfa…
robertcsakany Jul 13, 2026
e5b0c52
feat(copy-file-path): per-row copy-path popup on the editor file tree…
robertcsakany Jul 13, 2026
9754a20
feat(add-modular-doctor-skill): modular self-updating doctor skill (#…
robertcsakany Jul 13, 2026
3eda3a6
fix(fix-flaky-full-suite-tests): de-flake full suite + harden worktre…
robertcsakany Jul 13, 2026
ad41cd8
chore(openspec): archive fix-flaky-full-suite-tests
robertcsakany Jul 13, 2026
e3f94fe
chore(openspec): update change group assignments and ordering
robertcsakany Jul 13, 2026
f3bea63
chore(openspec): archive 4 stale changes + reconcile 6 drifted proposals
robertcsakany Jul 13, 2026
e03a199
docs(openspec): add markdown-substrate design addendum + prototype re…
robertcsakany Jul 13, 2026
2a41682
chore(openspec): remove stale active copy-file-path change dir
robertcsakany Jul 13, 2026
fd1603b
fix(openspec-board): render Ungrouped column first
robertcsakany Jul 13, 2026
67749c8
feat(add-goal-session-supervisor): progress-gated goal driver auto-re…
robertcsakany Jul 13, 2026
e50af78
docs(focus-driven-folder-compaction): make accordion opt-in, Classic …
robertcsakany Jul 13, 2026
eddd166
docs(openspec): propose fix-ticketed-ws-upgrade-routing
robertcsakany Jul 13, 2026
8632e26
fix(fix-ticketed-ws-upgrade-routing): route WS upgrade on scope, not …
robertcsakany Jul 13, 2026
01bf3e4
docs(openspec): add friendlier-worktree-init proposal
robertcsakany Jul 13, 2026
4d0758f
docs(openspec): propose distinguish-initialize-actions
robertcsakany Jul 13, 2026
b010060
docs(openspec): propose kb-index failure atomicity + worktree residua…
robertcsakany Jul 13, 2026
f5df270
feat(distinguish-initialize-actions): split scaffold vs hook-run init…
robertcsakany Jul 13, 2026
81375f3
feat(kb): atomic kb index — no husk on failure (#299)
robertcsakany Jul 13, 2026
d865839
docs(openspec): propose session uncommitted-changes indicator + commit
robertcsakany Jul 13, 2026
b387d4b
docs(openspec): add change proposal add-change-summary-table
robertcsakany Jul 13, 2026
b817e9f
docs(openspec): add-session-tags change proposal + mockups
robertcsakany Jul 13, 2026
795344f
fix(pairing): restart code TTL on redeem + reject expired codes at ap…
robertcsakany Jul 13, 2026
517d1f9
docs(openspec): propose fix-list-models-empty-on-unhydrated-registry
robertcsakany Jul 13, 2026
0384570
docs(spec): reflect pairing TTL restart-on-redeem + approve-time expiry
robertcsakany Jul 13, 2026
fa75cdc
docs(openspec): add-openspec-pipeline-orchestrators proposal
robertcsakany Jul 13, 2026
ce4ff83
fix(fix-builtin-role-names-relay): forward builtinRoleNames to the br…
robertcsakany Jul 13, 2026
d022bdf
fix(subagent-live-detail): reconcilable live timeline + ui:dialog pop…
molnar-botond Jul 13, 2026
fd3ff5b
feat(friendlier-worktree-init): cwd-keyed init feedback + boot rehydr…
robertcsakany Jul 13, 2026
6f0a593
feat(add-openspec-pipeline-orchestrators): plan-proposal + ship-it or…
robertcsakany Jul 13, 2026
c26ca8c
feat(doubt-driven-review): select reviewer via @propose-review-N role…
robertcsakany Jul 13, 2026
414dbbc
docs(openspec): propose add-chat-gateway (inbound Discord chat control)
robertcsakany Jul 13, 2026
be4771e
docs(openspec): propose elevating scenario-design + extracting distil…
robertcsakany Jul 13, 2026
10a8a0f
chore(openspec): update proposal groups ordering and labels
robertcsakany Jul 13, 2026
ce84be4
feat(sweep-worktree-residual-on-remove): stop kb-husk resurrection on…
robertcsakany Jul 13, 2026
4d89918
feat(fix-list-models-empty-on-unhydrated-registry): registryReady dis…
robertcsakany Jul 13, 2026
6daa3d4
feat(elevate-scenario-design-to-eng-disciplines): publish scenario-de…
robertcsakany Jul 13, 2026
5d1a820
feat(add-change-summary-table): deterministic per-turn change table +…
robertcsakany Jul 13, 2026
f2ba3ec
chore(remove-scenario-design-orphan-sidecars): drop orphan DOX sideca…
robertcsakany Jul 13, 2026
797201b
feat(add-session-tags): user-owned session tags with colorized chips …
robertcsakany Jul 14, 2026
bde6c45
feat(extract-distill-session-knowledge-package): publish session-dist…
robertcsakany Jul 14, 2026
780eed5
docs(openspec): add redesign-prompt-input proposal + composer mockups
robertcsakany Jul 14, 2026
eba19bd
feat(session-uncommitted-indicator-and-commit): surface uncommitted f…
robertcsakany Jul 14, 2026
48e10a1
feat(redesign-prompt-input): unify composer into one card with morphi…
robertcsakany Jul 14, 2026
868de90
docs(openspec): add make-all-ui-text-i18n change proposal
robertcsakany Jul 14, 2026
5eb4cf7
docs(openspec): add fix-session-diff-open-nongit-and-preview change
robertcsakany Jul 14, 2026
5ae874e
chore(kb): fix DOX tree drift — exclusions, companions, stale refresh
robertcsakany Jul 14, 2026
1ffcc1a
feat(make-all-ui-text-i18n): full UI i18n coverage + Hungarian locale…
robertcsakany Jul 14, 2026
d3c7887
docs(openspec): add-google-oauth-provider change proposal
robertcsakany Jul 14, 2026
1ee8d76
feat(packages): add nano-banana + video-production skill extensions
robertcsakany Jul 14, 2026
9f063d6
fix(client): container-query composer toolbar to stop split-pane over…
robertcsakany Jul 14, 2026
c37b076
docs(openspec): archive fix-split-composer-overflow + sync chat-view …
robertcsakany Jul 14, 2026
970f27f
fix(subagents): resync running subagent on inline expand
robertcsakany Jul 14, 2026
8f9475f
docs(openspec): scaffold markdown-table-styling change
robertcsakany Jul 14, 2026
94aa7d3
docs(openspec): scaffold stable-process-line change
robertcsakany Jul 14, 2026
b04b888
docs(research): add oh-my-pi feature adaptation report
robertcsakany Jul 14, 2026
5079d6c
docs(openspec): remove redesign-prompt-input proposal + composer mockups
robertcsakany Jul 14, 2026
a376490
docs(video-transcription): document .mov support in src/AGENTS.md
robertcsakany Jul 14, 2026
0a54f58
chore(openspec): sync group state; drop deleted redesign-prompt-input
robertcsakany Jul 14, 2026
9f7fcf4
docs(openspec): add fix-empty-flows-subcard change proposal
robertcsakany Jul 14, 2026
d7f96fe
docs(openspec): add-auto-session-naming proposal
robertcsakany Jul 14, 2026
4b3c40e
feat(markdown-table-styling): zebra-striped, framed GFM tables (#320)
robertcsakany Jul 14, 2026
c3ca243
docs(openspec): add reset-override-to-npm change proposal
robertcsakany Jul 14, 2026
56149e7
docs(openspec): add fix-ask-user-card-duplication change
robertcsakany Jul 14, 2026
d0ab7de
docs(openspec): add tasks.md for reset-override-to-npm
robertcsakany Jul 14, 2026
42bddb6
fix(worktree-init): gate install on install-completion marker, not ba…
robertcsakany Jul 14, 2026
3ff9330
fix(fix-empty-flows-subcard): hide empty FLOWS subcard (#321)
robertcsakany Jul 14, 2026
9785745
feat(session-card): stable PROCESS subcard via one unified summary li…
robertcsakany Jul 14, 2026
8e590ce
feat(fix-ask-user-card-duplication): suppress duplicate ask_user card…
robertcsakany Jul 14, 2026
4b1cbcc
feat(packages): reset source-override back to published npm/git varia…
robertcsakany Jul 14, 2026
550cdd7
docs(openspec): capture integrate-develop-before-ship-gate change
robertcsakany Jul 14, 2026
be14fe4
plan(add-seek-to-session-card): proposal, design, spec, tasks, test-p…
robertcsakany Jul 14, 2026
a0fc210
feat(integrate-develop-before-ship-gate): merge develop before the st…
robertcsakany Jul 14, 2026
ca43e4a
chore(openspec): sync board grouping (groups.json)
robertcsakany Jul 14, 2026
80c523b
chore(openspec): plan add-session-scoped-init-trust
robertcsakany Jul 14, 2026
fd2a76d
plan(add-eml-preview): scaffold EML preview change
robertcsakany Jul 14, 2026
74a7caf
plan(detect-tool-created-files): proposal, design, specs, tasks, test…
robertcsakany Jul 15, 2026
618f1f6
mockup(detect-tool-created-files): Files-panel origin badge + attribu…
robertcsakany Jul 15, 2026
dfbacc2
docs(openspec): plan auto-canvas — model-driven preview surface
robertcsakany Jul 15, 2026
f5ab880
plan(detect-tool-created-files): add session-ownership gating
robertcsakany Jul 15, 2026
7280773
plan(add-directory-home-page): proposal + design + specs + tasks + mo…
robertcsakany Jul 15, 2026
b448214
plan(detect-tool-created-files): pin absolute-under-cwd → relative ke…
robertcsakany Jul 15, 2026
5400ab4
plan(fix-popover-horizontal-flip): add horizontal axis to usePopoverFlip
robertcsakany Jul 15, 2026
9e16e45
docs(openspec): cross-reference detect-tool-created-files <-> auto-ca…
robertcsakany Jul 15, 2026
26f5536
docs(openspec): draft render-office-previews + render-pptx-preview pr…
robertcsakany Jul 15, 2026
6c9d3ff
chore(openspec): archive integrate-develop-before-ship-gate
robertcsakany Jul 15, 2026
810e795
feat(add-seek-to-session-card): reveal a session's card from the head…
robertcsakany Jul 15, 2026
8fb9e38
fix(client): horizontal flip for ChatViewMenu popover in slim panels …
robertcsakany Jul 15, 2026
b1556c9
feat(detect-tool-created-files): surface tool-created files in the ch…
robertcsakany Jul 15, 2026
f058b2c
feat(add-directory-home-page): pinned-directory home page at /folder/…
robertcsakany Jul 15, 2026
190d1e4
feat(add-session-scoped-init-trust): session-scoped worktree-init tru…
robertcsakany Jul 15, 2026
c649aad
docs(openspec): propose fix-kb-worktree-cwd-guard
robertcsakany Jul 11, 2026
11fbfbe
fix: canonicalize KB cwd guard + admit worktrees of known repos
robertcsakany Jul 11, 2026
ae86622
chore(openspec): archive fix-kb-worktree-cwd-guard
robertcsakany Jul 11, 2026
820a758
feat(add-auto-session-naming): automatic session topic naming (#323)
robertcsakany Jul 15, 2026
5025147
feat(render-office-previews): inline docx / xlsx / csv previews (#332)
robertcsakany Jul 15, 2026
ddab4c0
feat(add-eml-preview): EML (email) preview in the file content area (…
robertcsakany Jul 15, 2026
a5c3978
fix(server): lazy-load EML sanitizer so a broken jsdom can't block boot
robertcsakany Jul 15, 2026
6cf3904
plan(fix-session-diff): fold sibling openInSplit-sink scope into change
robertcsakany Jul 15, 2026
56d3326
docs(openspec): propose collapse-diff-file-tree (Changes section coll…
robertcsakany Jul 15, 2026
b0c2a9f
chore(openspec): regroup preview/canvas changes under ui board group
robertcsakany Jul 15, 2026
268d47e
fix(session-diff): open diffs on absolute paths, non-git fallback, fi…
robertcsakany Jul 15, 2026
de72714
feat(project-init): interactive DOX toggle + optional openspec init
robertcsakany Jul 15, 2026
9aaf775
feat(auto-canvas): model-driven canvas preview surface (#335)
robertcsakany Jul 15, 2026
5060aa2
fix(client): restore pointer cursor on buttons app-wide (Tailwind v4)
robertcsakany Jul 15, 2026
8a272a0
docs(openspec): add unify-message-severity-colors proposal
robertcsakany Jul 15, 2026
9e4ece6
docs(openspec): add remove-external-editor-integration + terminals-in…
robertcsakany Jul 15, 2026
8717c3d
docs(openspec): add server-side-file-mention-resolution change
robertcsakany Jul 15, 2026
9f48fc6
docs(openspec): propose improve-change-summary-block (mime icons + au…
robertcsakany Jul 15, 2026
00344e2
docs(specs): reflect interactive DOX opt-in + coding-only openspec init
robertcsakany Jul 15, 2026
03baa22
plan(editor-layout-modes): tri-state editor layout — proposal + desig…
robertcsakany Jul 15, 2026
d1fd278
docs(openspec): add interactive-cursor-affordance spec
robertcsakany Jul 15, 2026
4351ca9
feat(improve-change-summary-block): mime icons + auto-fold on file-co…
robertcsakany Jul 15, 2026
c2dc0a9
plan(openspec): server-side-file-mention-resolution — doubt-reviewed …
robertcsakany Jul 15, 2026
51cfe71
plan(openspec): doubt-review + scenario-fold unify-message-severity-c…
robertcsakany Jul 15, 2026
afa8df0
docs(openspec): scaffold add-kb-index-optimistic-pending change
robertcsakany Jul 15, 2026
eb0f06c
feat(render-pptx-preview): on-demand pptx slide-deck previews (#339)
robertcsakany Jul 15, 2026
eafbbd7
feat(collapse-diff-file-tree): merge changed-files into workspace tre…
robertcsakany Jul 15, 2026
8cd15fd
feat(editor-layout-modes): tri-state Chat/Split/Editor layout switch …
robertcsakany Jul 16, 2026
3792cda
feat(bus-client): typed WebSocket bus client + LLM scripting layer (#…
robertcsakany Jul 16, 2026
9317e0f
feat(remove-external-editor-integration): route file-open to the inte…
robertcsakany Jul 16, 2026
feac7c5
plan(bus-client): capture bus-client scripting proposal + plugin_acti…
robertcsakany Jul 15, 2026
98a8db7
plan(opt-in-out-of-cwd-session-diffs): proposal + design + specs + ta…
robertcsakany Jul 16, 2026
a27fd5c
docs(openspec): propose steer-agents-to-kb-tools
robertcsakany Jul 16, 2026
493cadd
docs(kb): steer agents to kb tools via substitution table
robertcsakany Jul 16, 2026
e897eb3
test(project-init): assert seeded READ discipline carries kb substitu…
robertcsakany Jul 16, 2026
5065172
chore(openspec): archive steer-agents-to-kb-tools; sync kb-read-disci…
robertcsakany Jul 16, 2026
10cf33f
docs(openspec): sync kb-read-discipline into main specs
robertcsakany Jul 16, 2026
ee10d9d
docs(openspec): propose fix-kb-neighbors-get-cold-start
robertcsakany Jul 16, 2026
67c4d20
fix(kb): self-populate cold index on kb_neighbors / kb_get
robertcsakany Jul 16, 2026
faf6747
chore(openspec): archive fix-kb-neighbors-get-cold-start; sync spec
robertcsakany Jul 16, 2026
5b42022
docs(openspec): t3code research + 3 adaptation proposals; consolidate…
robertcsakany Jul 16, 2026
6063955
docs(security): add security boundary audit + remediation change plan
robertcsakany Jul 16, 2026
91f140b
feat(fix-plugin-action-fanout-and-handlers): pluginId fan-out + real …
robertcsakany Jul 16, 2026
e0a312e
feat(server-side-file-mention-resolution): lazy server-side file-ment…
robertcsakany Jul 16, 2026
e9dedf8
feat(terminals-in-tabbed-panes): host terminals as editor-pane tabs (…
robertcsakany Jul 16, 2026
3955d65
chore(openspec): remove stray active copy of archived add-dashboard-b…
robertcsakany Jul 16, 2026
ddcbedb
fix(live-server-proxy): self-register @fastify/reply-from
robertcsakany Jul 16, 2026
f180027
plan(non-disruptive-file-open): proposal + design + specs + tasks + t…
robertcsakany Jul 16, 2026
fafcb31
plan(redesign-split-layout-controls): proposal, design, specs, tasks,…
robertcsakany Jul 16, 2026
e75445f
feat(opt-in-out-of-cwd-session-diffs): render out-of-cwd session diff…
robertcsakany Jul 16, 2026
f620b27
chore(sync): merge upstream/develop@e75445fc
Jul 16, 2026
9402845
chore(sync): preserve upstream features in shared conflict hubs
Jul 16, 2026
1563df0
chore(sync): add upstream merge tooling, ZGE CI, track main
Jul 16, 2026
59e6a47
fix(sync): resolve vitest from repo root and skip missing tests
Jul 16, 2026
60415ac
fix(sync): keep only one open upstream-sync PR
Jul 16, 2026
44d36a8
fix(sync): only supersede sync/upstream* PR heads, not labels
Jul 16, 2026
d9db192
fix(sync): ephemeral HOME for focused vitest in verify
Jul 16, 2026
0ea9cee
chore(sync): repair merged composer toolbar
Jul 16, 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
  •  
  •  
  •  
41 changes: 41 additions & 0 deletions .github/workflows/ci-zge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# ZGEnergy fork gates — required for main protection once registered as a check.
name: ci-zge

on:
pull_request:
branches: [main, develop]
push:
branches: [main, develop]
workflow_dispatch:

concurrency:
group: ci-zge-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
zge-gates:
name: zge-gates
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22.22"
cache: npm

- name: Install
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: "1"
run: |
npm ci || npm install --force

- name: Structural + focused tests + build
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: "1"
run: |
chmod +x scripts/upstream-sync.sh
scripts/upstream-sync.sh verify
5 changes: 5 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ jobs:
# which enforces every non-private workspace appears here.
PACKAGES=(
"@blackbelt-technology/pi-dashboard-shared"
"@blackbelt-technology/pi-dashboard-bus-client"
"@blackbelt-technology/pi-dashboard-extension"
"@blackbelt-technology/pi-dashboard-server"
"@blackbelt-technology/pi-dashboard-web"
Expand All @@ -302,6 +303,8 @@ jobs:
"@blackbelt-technology/pi-dashboard-goal-plugin"
"@blackbelt-technology/pi-dashboard-automation-plugin"
"@blackbelt-technology/pi-image-fit-extension"
"@blackbelt-technology/pi-dashboard-nano-banana"
"@blackbelt-technology/pi-dashboard-video-production"
"@blackbelt-technology/frontend-mockup-loop"
"@blackbelt-technology/pi-dashboard-kb"
"@blackbelt-technology/pi-dashboard-kb-extension"
Expand All @@ -311,6 +314,8 @@ jobs:
"@blackbelt-technology/pi-dashboard-eng-disciplines"
"@blackbelt-technology/pi-dashboard-authoring-toolkit"
"@blackbelt-technology/pi-dashboard-video-transcription"
"@blackbelt-technology/pi-dashboard-session-distiller"
"@blackbelt-technology/pi-dashboard-distill-session-knowledge"
"@blackbelt-technology/pi-agent-dashboard"
)
VERSION="${{ needs.resolve.outputs.version }}"
Expand Down
150 changes: 150 additions & 0 deletions .github/workflows/upstream-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# Keep exactly one open upstream-sync PR: stable branch force-updated each run.
name: upstream-sync

on:
schedule:
# Mondays 15:00 UTC
- cron: "0 15 * * 1"
workflow_dispatch:
inputs:
upstream_ref:
description: Upstream branch to merge
required: false
default: develop
dry_run:
description: If true, only print status
required: false
default: "false"

permissions:
contents: write
pull-requests: write

concurrency:
group: upstream-sync
cancel-in-progress: false

jobs:
sync:
runs-on: ubuntu-latest
timeout-minutes: 45
env:
UPSTREAM_REF: ${{ github.event.inputs.upstream_ref || 'develop' }}
GH_REPO: ${{ github.repository }}
# Stable branch — each run force-with-lease updates the same PR head
SYNC_BRANCH: sync/upstream-${{ github.event.inputs.upstream_ref || 'develop' }}
steps:
- name: Checkout main
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}

- name: Configure git identity
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"

- name: Add upstream remote
run: |
git remote add upstream https://github.com/BlackBeltTechnology/pi-agent-dashboard.git \
|| git remote set-url upstream https://github.com/BlackBeltTechnology/pi-agent-dashboard.git
git fetch upstream "$UPSTREAM_REF" --prune
git fetch origin main --prune

- name: Status
id: status
run: |
chmod +x scripts/upstream-sync.sh
scripts/upstream-sync.sh status | tee /tmp/upstream-status.txt
BEHIND=$(git rev-list --count "origin/main..upstream/${UPSTREAM_REF}")
echo "behind=$BEHIND" >> "$GITHUB_OUTPUT"
SHA=$(git rev-parse --short "upstream/${UPSTREAM_REF}")
echo "usha=$SHA" >> "$GITHUB_OUTPUT"

- name: Skip if up to date
if: steps.status.outputs.behind == '0'
run: echo "Already up to date with upstream."

- name: Dry run only
if: github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run == 'true'
run: echo "dry_run=true; stopping before merge"

- name: Merge + upsert single PR
if: steps.status.outputs.behind != '0' && !(github.event_name == 'workflow_dispatch' && github.event.inputs.dry_run == 'true')
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set +e
scripts/upstream-sync.sh merge
rc=$?
set -e
echo "merge_rc=$rc"
if [[ $rc -eq 0 ]]; then
scripts/upstream-sync.sh pr
exit 0
fi
if [[ $rc -ne 2 ]]; then
exit $rc
fi

# Conflicts remain: publish help on the same stable branch (still one PR),
# close any other sync PRs, leave draft for human/agent resolution.
REPORT=$(ls docs/upstream-sync-conflicts-*.md 2>/dev/null | head -1 || true)
git merge --abort || true
git checkout -B "$SYNC_BRANCH" origin/main
mkdir -p docs
{
echo "# Upstream sync needs human/agent merge"
echo
echo "Upstream \\\`${UPSTREAM_REF}\\` @ \\\`${{ steps.status.outputs.usha }}\\` is **${{ steps.status.outputs.behind }}** commits ahead of main."
echo
echo "Automation keeps **one** open PR on \\\`${SYNC_BRANCH}\\` (this branch is force-updated)."
echo
echo "Resolve with:"
echo
echo '```bash'
echo "git fetch upstream && scripts/upstream-sync.sh merge"
echo "# resolve remaining paths, then:"
echo "scripts/upstream-sync.sh verify && scripts/upstream-sync.sh pr"
echo '```'
echo
if [[ -n "$REPORT" && -f "$REPORT" ]]; then
echo "## Conflict inventory"
echo
cat "$REPORT"
fi
} > docs/upstream-sync-help.md
git add docs/upstream-sync-help.md
if [[ -n "$REPORT" && -f "$REPORT" ]]; then git add "$REPORT" || true; fi
git commit -m "chore(sync): conflict help for ${UPSTREAM_REF}@${{ steps.status.outputs.usha }}"
git push --force-with-lease -u origin "$SYNC_BRANCH"

# Close other sync PRs; upsert this one as draft
KEEP_HEAD="$SYNC_BRANCH" GH_REPO_VAL="$GH_REPO" python3 - <<'PY'
import json, os, subprocess
repo = os.environ["GH_REPO_VAL"]
keep = os.environ["KEEP_HEAD"]
raw = subprocess.check_output(["gh","pr","list","-R",repo,"--state","open","--limit","100","--json","number,headRefName,labels"], text=True)
for pr in json.loads(raw):
head = pr.get("headRefName") or ""
labels = {(l.get("name") if isinstance(l, dict) else l) for l in (pr.get("labels") or [])}
if head == keep:
continue
if not head.startswith("sync/upstream"):
continue
n = str(pr["number"])
body = f"Superseded by latest automated sync on `{keep}`."
subprocess.run(["gh","pr","close",n,"-R",repo,"--comment",body], check=False)
PY

existing=$(gh pr list -R "$GH_REPO" --state open --head "$SYNC_BRANCH" --json number --jq '.[0].number // empty' || true)
TITLE="chore(sync): CONFLICTS upstream ${UPSTREAM_REF} @ ${{ steps.status.outputs.usha }}"
if [[ -n "$existing" ]]; then
gh pr edit "$existing" -R "$GH_REPO" --title "$TITLE" --body-file docs/upstream-sync-help.md || true
gh pr ready "$existing" -R "$GH_REPO" --undo 2>/dev/null || true
else
gh pr create -R "$GH_REPO" --base main --head "$SYNC_BRANCH" --draft \
--title "$TITLE" --label upstream-sync --body-file docs/upstream-sync-help.md
fi
4 changes: 2 additions & 2 deletions .pi/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
}
],
"worktreeInit": {
"gate": "test ! -d node_modules || test ! -d .pi/skills/openspec-explore || test ! -f .pi/dashboard/kb/index.db",
"gate": "test ! -e node_modules/.package-lock.json || test ! -d .pi/skills/openspec-explore || test ! -f .pi/dashboard/kb/index.db",
"run": {
"type": "script",
"command": "npm ci && npx openspec init --tools pi --force && npm run build --workspace=@blackbelt-technology/pi-dashboard-kb && NODE_OPTIONS=--experimental-sqlite npx kb index"
"command": "(npm ci || npm install) && npx @fission-ai/openspec init --tools pi --force && npm run build --workspace=@blackbelt-technology/pi-dashboard-kb && NODE_OPTIONS=--experimental-sqlite npx kb index"
}
}
}
16 changes: 11 additions & 5 deletions .pi/skills/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ Files in this directory. One row per file. Non-source area (migrated from `docs/
| `code-review/references/` | Language guides + architecture/performance/security review references |
| `code-review/SKILL.md` | Skill: comprehensive code review with severity labels |
| `component-architecture/SKILL.md` | Reusable component patterns: folder structure (`ui/layout/sections/cards/forms/shared/seo`),… → see `component-architecture/SKILL.md.AGENTS.md` |
| `debug-dashboard/references/known-issues.md` | Known-issue catalogue distilled from `docs/faq.md`: server won't start (Electron Node bin fallback… → see `debug-dashboard/references/known-issues.md.AGENTS.md` |
| `debug-dashboard/references/isolated-verification.md` | Isolated UI/worktree verification. Live :8000 runs MAIN-repo code; `npm run build` leaks to `packages/client/dist`. Temp HOME + non-8000 ports + `PI_DASHBOARD_NO_MDNS=1`. Mockup-serve + worktree-harness recipe. |
| `debug-dashboard/references/known-issues.md` | Known-issue catalogue distilled from `docs/faq.md`: server won't start (Electron Node bin fallback… + new-session spawn_register_timeout (pi-crash vs overload split) → see `debug-dashboard/references/known-issues.md.AGENTS.md` |
| `debug-dashboard/references/log-locations.md` | Persistent file map. `~/.pi/dashboard/`: `server.log` (append, timestamped banners, grep recipes),… → see `debug-dashboard/references/log-locations.md.AGENTS.md` |
| `debug-dashboard/references/test-failure-triage.md` | Vitest failure triage. Golden rule tee→grep (`npm test 2>&1 | tee /tmp/pi-test.log`), standard greps,… → see `debug-dashboard/references/test-failure-triage.md.AGENTS.md` |
| `debug-dashboard/references/ui-debug.md` | Pointer to `browser` skill for UI/visual debugging. Symptom routing table:… → see `debug-dashboard/references/ui-debug.md.AGENTS.md` |
Expand All @@ -31,6 +32,8 @@ Files in this directory. One row per file. Non-source area (migrated from `docs/
| `document-converter/SKILL.md` | NL-triggered document conversion. Ingest PDF/DOCX/PPTX/XLSX→md for kb; produce md→DOCX/PDF templated. Routes to packages/document-converter facade. See change: document-converter. |
| `edit-flow/SKILL.md` | Skill: create/edit pi-flows flows + agents via `flow_agents` + `flow_write`. → see `edit-flow/SKILL.md.AGENTS.md` |
| `faq-mine/SKILL.md` | Skill: mine `docs/faq.md` from README.md + evergreen `docs/*.md`. → see `faq-mine/SKILL.md.AGENTS.md` |
| `fix-worktree-opsx-skills-not-created/SKILL.md` | Skill. Fix worktree missing generated openspec-* (opsx) skills. `worktreeInit` must call `npx @fission-ai/openspec init`; bare `openspec` = squatted 0.0.0 npm stub that inits nothing. |
| `frontend-mockup-loop-dashboard/SKILL.md` | Skill. Dashboard adapter over frontend-mockup-loop. Binds 7-step loop to `packages/client` sources, theme-system tokens (4 themes), isolated-verification, `openspec/changes/<name>/mockups/`. |
| `implement/references/code-discipline.md` | Reference: expands AGENTS.md "Code Instructions" 5 rules with worked examples. → see `implement/references/code-discipline.md.AGENTS.md` |
| `implement/references/rebuild-matrix.md` | Reference: full 3-component rebuild matrix. Per-component recipes — extension `npm run… → see `implement/references/rebuild-matrix.md.AGENTS.md` |
| `implement/scripts/check-mode.ts` | Print dashboard mode ("dev"/"production") via `GET /api/health`. → see `implement/scripts/check-mode.ts.AGENTS.md` |
Expand Down Expand Up @@ -88,13 +91,16 @@ Files in this directory. One row per file. Non-source area (migrated from `docs/
| `pi-dashboard/references/slash-commands.md` | Reference catalog of every `/dashboard:*` slash command with args and LLM-free vs LLM-bound classification. Naming grammar `/dashboard:<resource>-<verb>[-<modifier>]`. |
| `pi-dashboard/scripts/dashboard-api.sh` | Helper script with port auto-detection + auth |
| `pi-dashboard/SKILL.md` | Bundled skill: monitor + control dashboard from any pi session. → see `pi-dashboard/SKILL.md.AGENTS.md` |
| `plan-proposal/SKILL.md` | Develop-side planning orchestrator. Chains artifact-gen (openspec-new/-ff/-continue) → doubt-driven-review on proposal.md/design.md (ARTIFACT+CONTRACT only, cross-model offer) → scenario-design → category-routed fold of `automated` manifest scenarios into vanilla `tasks.md` checkboxes (harness-exemplar pointer + Triple; no custom token). Main-session-only (refuses subagent: nested reviewer + ask_user gate). Stops at worktree boundary; hands to ship-it. See change: add-openspec-pipeline-orchestrators. |
| `pre-scaffold-openspec-coherence-check/SKILL.md` | Skill. Pre-scaffold checks before new openspec change: archive sweep, active sweep, current-code verify, slot-props contract, registry check. Avoid re-proposing archived work. |
| `release-cut/SKILL.md` | Cuts new release: promotes `## [Unreleased]` in CHANGELOG → dated section, bumps every workspace… → see `release-cut/SKILL.md.AGENTS.md` |
| `release-revoke/SKILL.md` | `release-revoke` skill. Reverts a release: deletes GitHub Release, removes git tag (local + origin), `npm… → see `release-revoke/SKILL.md.AGENTS.md` |
| `responsive-mobile-first/SKILL.md` | Mobile-first responsive patterns: sticky headers, mobile drawer, floating CTA, responsive grids, touch… → see `responsive-mobile-first/SKILL.md.AGENTS.md` |
| `scenario-design/references/technique-cheatsheet.md` | How-to per design/resilience technique with repo examples. EP: split input classes (invalid too). → see `scenario-design/references/technique-cheatsheet.md.AGENTS.md` |
| `scenario-design/references/test-plan-schema.md` | Exact `test-plan.md` layout. Header: stage + generated date. Soft-gate clarification banner. → see `scenario-design/references/test-plan-schema.md.AGENTS.md` |
| `scenario-design/SKILL.md` | Drafts adversarial real-life test scenarios from OpenSpec change spec. → see `scenario-design/SKILL.md.AGENTS.md` |
| `ship-change/SKILL.md` | End-to-end "land it" pipeline after openspec-apply. Base branch `develop`, worktree `.worktrees/os-<change>`… → see `ship-change/SKILL.md.AGENTS.md` |
| `run-dashboard-e2e-local-changes/SKILL.md` | Skill. Run Playwright E2E vs `docker/` harness reflecting LOCAL changes. `docker compose -f docker/compose.yml build` FIRST (test-up.sh omits `--build`). Seed env `PI_E2E_SEED=1`. |
| `ship-change/SKILL.md` | End-to-end "land it" pipeline after openspec-apply. Base branch `develop`, worktree `.worktrees/os-<change>`… Step 1 defer rule now manifest-aware: `test-plan.md` present → defer only `manual-only` rows (via `deferDecision` in ship-it/scripts/manifest.ts); absent → legacy keyword defer verbatim. Step 10 teardown-before-worktree-removal ordering contract with ship-it. → see `ship-change/SKILL.md.AGENTS.md`. See change: add-openspec-pipeline-orchestrators |
| `ship-it/scripts/manifest.ts` | Pure ship-it/ship-change manifest helpers (unit-tested). `parseManifest(text)` → `{id,level,disposition}[]` from test-plan.md tables (tolerant of malformed/no-disposition). `classifyTaskDisposition(task,map)`. `deferDecision(tasks,manifestText\|null)` → defer/stop (manifest: only manual-only defers; no manifest: legacy keyword). `filesystemRealityCheck(scenarios,exists)` → automated satisfied only if test file exists. See change: add-openspec-pipeline-orchestrators. |
| `ship-it/scripts/no-weakening.ts` | Pure `assertNoWeakening(diff)` → `{ok,reasons}`. Parses unified test-file diff; rejects added `.only`/skip, net assertion deletion (expect() removed>added), strong→permissive matcher swap; allows genuine value-change fix. Enforced each ship-it red-test fix cycle. See change: add-openspec-pipeline-orchestrators. |
| `ship-it/SKILL.md` | Worktree-side implementation orchestrator (headless-capable). Idempotent: gates `automated` scenarios on filesystem-reality (test file exists + harness-green), not the tasks.md checkbox. Owns red-test fix loop (never re-invokes apply on checked task; progress-bound; no-weakening guardrail via scripts/no-weakening.ts). Harness via docker/test-up.sh, port from `.pi-test-harness.json` `dashboardPort` (never `:18000`), trap always-teardown. Drives ship-change inline, manifest-aware defer, teardown before worktree removal. Escape hatch → SHIP_IT_BLOCKED.md, exit non-zero. See change: add-openspec-pipeline-orchestrators. |
| `spec-coherence-check/references/proposal-queue-schema.md` | JSON schema for `.pi/proposal-queue.json` |
| `spec-coherence-check/SKILL.md` | Skill: sweep proposals for staleness, conflicts, obsolescence against codebase |
| `switch-extension-source/scripts/switch-source.ts` | Toggle script. Commands: status \| local <pkg> [--overlay] \| npm <pkg>. <pkg> = monorepo dir or npm name. → see `switch-extension-source/scripts/switch-source.ts.AGENTS.md` |
Expand Down
5 changes: 5 additions & 0 deletions .pi/skills/debug-dashboard/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ If `health-probe` says "not-running" → server isn't up. Check `server.log` for
| `EADDRINUSE` on start | Concurrent spawn from multiple pi sessions | Harmless — losing process exits silently. Check log. |
| Bridge connects then disconnects | `server_restarting` broadcast active, or version skew | grep `server_restarting` in server.log; check `/api/health` for version |
| Blank page in browser | Vite not running in dev mode (silent fallback to prod build); or auth blocking | Check `/api/health.mode`; check `auth` settings |
| New session won't start / yellow `spawn_register_timeout`, no card | `pi` crashed at startup (bad extension) OR host overload | See `references/known-issues.md` → "New session won't start" — manual `pi --mode rpc` run splits crash vs overload |
| `Cannot connect to dashboard server` on Electron boot | `launchDashboardServer` fell back to `process.execPath` (Electron GUI binary) | See `references/known-issues.md` → "Electron Node bin selection" |
| Fastify crashes immediately | Bad Node version (22.0–22.17.x or 24.1–24.2.x per nodejs/node#58515) | `node --version` — must be ≥ 22.18.0 |

Expand Down Expand Up @@ -75,6 +76,10 @@ Patterns + per-package vitest configs + watch mode are documented in [`reference

This skill stops at "the server says X but the UI shows Y". For visual debugging — verifying layouts, screenshotting, hunting console errors, testing responsive breakpoints — switch to the **`browser`** skill (shipped by the dashboard bridge extension to every session). Quick pointer: see [`references/ui-debug.md`](references/ui-debug.md).

## When you must verify a change without touching the live server

The live `:8000` server runs MAIN-repo code — `/api/restart` never loads worktree edits, and a careless `npm run build` **leaks** into `packages/client/dist` (what live serves). To verify a UI/worktree change or serve a review mockup in full isolation (temp `HOME`, non-8000 ports, `PI_DASHBOARD_NO_MDNS=1`), see [`references/isolated-verification.md`](references/isolated-verification.md).

## Log file locations

All log + config files. Worth bookmarking. See [`references/log-locations.md`](references/log-locations.md) for the full map.
Expand Down
Loading
Loading