Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
227d682
refactor(pi): keep agent state in one map and run one kill ladder (#202)
michael-denyer Oct 5, 2026
4b92579
Describe each fork's full diff in its forks.json why (#204)
michael-denyer Oct 5, 2026
dd02fa5
Restore setup-pstack's offer of a verification skill (#205)
michael-denyer Oct 5, 2026
9eb8987
fix(worktree-audit): read padded du sizes on macOS (#206)
michael-denyer Oct 5, 2026
0389988
fix(poteto-mode): match shell boundaries and symlink spellings in tra…
michael-denyer Oct 5, 2026
b9b868c
Pin the at-pin SHA check, paths: parsing, and bun's flat Pi layout wi…
michael-denyer Oct 5, 2026
e2ca0f9
Fix recent worktree-audit and Pi runtime regressions (#208)
michael-denyer Oct 5, 2026
72270b7
Describe the review fixes in the 0.9.70 changelog (#209)
michael-denyer Oct 5, 2026
4d70fff
Keep same-label choices selectable in multi-select questions (#211)
michael-denyer Oct 5, 2026
9b717f8
Run the worktree audit tests on windows-latest (#210)
michael-denyer Oct 5, 2026
bd7a655
Scope a bare bun test to tests/ (#212)
michael-denyer Oct 5, 2026
58f0846
Compose ancestor symlinks in worktree-audit's path spellings (#213)
michael-denyer Oct 5, 2026
11e9b9a
Look for a bun-installed Pi under BUN_INSTALL and BUN_INSTALL_GLOBAL_…
michael-denyer Oct 5, 2026
8500f36
Release 0.9.71 (#216)
michael-denyer Oct 5, 2026
ed515d7
feat(pstack): sync to upstream 2cbf585 (v0.15.13) (#214)
PorterHoskins Oct 5, 2026
8d3aa57
feat(copilot): run pstack on GitHub Copilot (#164)
psiservices-jstratton Oct 5, 2026
af0d4d0
Add Buy Me a Coffee funding link (#217)
michael-denyer Oct 5, 2026
4d4e159
Add Buy Me a Coffee badge to the README (#218)
michael-denyer Oct 6, 2026
ca18d36
fix(scripts): fail closed in the fork check, log.sh, check-playbooks,…
michael-denyer Oct 6, 2026
96f8945
fix(worktree-audit): hold untracked and locked worktrees, resolve lin…
michael-denyer Oct 6, 2026
eef8f7c
fix(orch): serialize stale-lock takeovers and round-trip formula-lead…
michael-denyer Oct 6, 2026
8697592
fix(watch-pr): fail closed while mergeability, PR facts, or checks ar…
michael-denyer Oct 6, 2026
381b8d2
fix(pi): repair /loop stop, print-mode /loop, and agent restore (#222)
michael-denyer Oct 6, 2026
dd29ce9
fix(generate): tighten the release gate and seven validator checks (#…
michael-denyer Oct 6, 2026
58fda91
fix(sync): reject stray arguments, pin the conflict style, and fail o…
michael-denyer Oct 6, 2026
faa451c
Bound Autopilot's verify rounds and state the program size first (#226)
michael-denyer Oct 6, 2026
552b1c8
Release 0.9.74 (#227)
michael-denyer Oct 6, 2026
aba1d67
Merge remote-tracking branch 'upstream/main' into upstream-sync/552b1c8
chhoumann Oct 7, 2026
d9ebc3b
t3-pstack 1.0.3: adapt the pstack-claude 0.9.74 merge
chhoumann Oct 7, 2026
32067bc
t3-pstack 1.0.3: address review findings
chhoumann Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"name": "t3-pstack",
"source": "./plugins/pstack",
"description": "pstack for T3 Code: rigorous agent workflows whose panels and fan-outs run across model families through T3. Original pstack by Lauren Tan (poteto); Claude Code port by Michael Denyer.",
"version": "1.0.2"
"version": "1.0.3"
}
]
}
54 changes: 48 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,21 @@ jobs:
env:
PSTACK_REQUIRE_WINDOWS_HOOK: "1"

windows-worktree-audit:
name: Windows worktree audit
runs-on: windows-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: "1.3.14"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Test the worktree audit
run: bun test --timeout 30000 tests/worktree-audit.test.mjs

forks:
name: Fork registry
runs-on: ubuntu-latest
Expand All @@ -61,14 +76,21 @@ jobs:
run: bun install --frozen-lockfile
# A dry-run sync to the SHA already pinned compares the port with
# upstream as it stands, and fails on a fork tools/forks.json lacks or
# an entry whose path is not forked.
# an entry whose path is not forked. bash ignores the exit status of a
# process substitution, so jq fills a variable first. Fed straight to
# the loop, a jq error runs it zero times and the step passes.
- name: Check every fork from upstream is declared
run: |
set -o pipefail
set -eo pipefail
components=$(jq -r '.components | to_entries[] | "\(.key) \(.value.sha)"' tools/upstream.json)
if [ -z "$components" ]; then
echo "tools/upstream.json lists no components"
exit 1
fi
failed=0
while read -r component sha; do
bun tools/sync.mjs "$component" "$sha" --dry-run | tee "$RUNNER_TEMP/sync-$component.txt" || failed=1
done < <(jq -r '.components | to_entries[] | "\(.key) \(.value.sha)"' tools/upstream.json)
done <<< "$components"
exit "$failed"
# Annotates rather than fails: generated edits and declared forks are
# legitimate, but a reviewer should see every upstream skill file a PR
Expand Down Expand Up @@ -131,11 +153,14 @@ jobs:
run: npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.0.0 # zizmor: ignore[adhoc-packages]
- name: Typecheck the extension against Pi
run: bun tools/typecheck-pi.mjs
# Skipped in every job without Pi; here a catalog that is not found fails.
- name: Check the shipped model tables against Pi's catalog
run: bun test tests/pi/catalog.test.mjs
- name: Install test dependencies
run: bun install --frozen-lockfile
# These checks make no model calls. Missing Pi fails instead of skipping.
- name: Check the model catalog and child startup against Pi
run: bun test tests/pi/catalog.test.mjs tests/pi/runtime.test.mjs
env:
PSTACK_PI_REQUIRE_CATALOG: "1"
PSTACK_PI_REQUIRE_RUNTIME: "1"

scripts:
name: Vendored bun tooling
Expand Down Expand Up @@ -225,3 +250,20 @@ jobs:
lycheeverse/lychee:0.24.2@sha256:e2d19e57cf6ab037026f20b8e449a1f30d9d7f81eef4194763aab2eab20bd28d \
--offline --no-progress --include-fragments \
--exclude-path node_modules --exclude-path .git '**/*.md'

# macOS differs from ubuntu where the audit looks: BSD du pads its sizes and
# the temp directory sits behind the /var link.
macos-worktree-audit:
name: macOS worktree audit
runs-on: macos-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: "1.3.14"
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Test the worktree audit
run: bun test --timeout 30000 tests/worktree-audit.test.mjs
17 changes: 4 additions & 13 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,17 @@ jobs:
# Pinned to the image rather than google/osv-scanner-action, whose own
# README warns its behavior can change in a patch release.
#
# --include-git-root is required: the scanner skips the git root by
# default, and the only lockfile lives inside this repo. Without it the
# scan finds nothing and passes, which reads exactly like a clean result.
#
# shell: bash adds pipefail. The default `bash -e` returns tee's status,
# so a scanner exit 1 on a vulnerability would pass the step.
# Do not add --include-git-root. With it the checkout's .git counts as a
# package, so a scan that finds no lockfile exits 0. Without it that scan
# exits 128 and fails the step, and both bun.lock files are still scanned.
#
# The v2.5.1 tag is mutable, so the digest is what actually pins this.
# Resolved with: docker buildx imagetools inspect ghcr.io/google/osv-scanner:v2.5.1
- name: Scan lockfiles
shell: bash
run: |
docker run --rm -v "$GITHUB_WORKSPACE:/src" \
ghcr.io/google/osv-scanner:v2.5.1@sha256:8108ae94eadea5a02c9bec6e646909d5b790b44bd62d7f5b7f0b1d6d0ffc7734 \
scan source --recursive --include-git-root /src \
| tee osv-output.txt
if grep -q 'No package sources found' osv-output.txt; then
echo "FAIL: osv-scanner found no lockfiles to scan; a silent pass is not a clean scan"
exit 1
fi
scan source --recursive /src

zizmor:
name: Workflow static analysis
Expand Down
Loading
Loading