Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
0e4002a
feat(pstack): add host-neutral generic variant
praxstack Aug 19, 2026
222535d
chore: add agent skill routing and per-repo engineering skill config
praxstack Aug 21, 2026
77bcf32
fix: make validate-plugins.mjs runnable with pinned ajv devDependencies
praxstack Aug 21, 2026
cb8f935
feat: add pstack skill-reference resolution gate (PORTABILITY gate 3)
praxstack Aug 21, 2026
badf6ac
fix(pstack): bounded fallback when subagents are unavailable
praxstack Aug 21, 2026
50888a5
docs: spec and verification evidence for pstack-generic acceptance gates
praxstack Aug 21, 2026
527733a
docs: add markdown ticket mirror for pstack-generic gates (GitHub #2-#7)
praxstack Aug 21, 2026
1ad5f3f
fix: wire all three validation gates into CI and harden reference che…
praxstack Aug 21, 2026
b355261
docs: session feedback ritual record
praxstack Aug 21, 2026
a7320ed
Merge pull request #8 from praxstack/chore/skill-setup-and-pstack-gates
praxstack Aug 21, 2026
a4eaaf1
fix(pstack): gate-5 degradation fixes and spec carve-out
praxstack Aug 21, 2026
d6b4292
fix(scripts): floor guard and CRLF tolerance in reference checker
praxstack Aug 21, 2026
12935ba
docs(evidence): reconcile gate-5 audit; fix dead evidence citations
praxstack Aug 21, 2026
215edb0
Merge upstream tip (4612556) into fix/post-merge-review-findings
praxstack Aug 21, 2026
6ade915
chore: consolidate WIP changes [auto-sync]
praxstack Aug 21, 2026
ddff40d
Merge branch 'fix/post-merge-review-findings'
praxstack Aug 21, 2026
8a329eb
fix(test): wire orchestrate scripts as a workspace so bare bun test i…
praxstack Aug 21, 2026
27d5195
Merge branch 'fix/orchestrate-test-deps'
praxstack Aug 21, 2026
e7a6ddb
feat(pstack): port upstream 0.14.2 guidance into host-neutral phrasin…
praxstack Aug 21, 2026
023a874
Merge pull request #15 from praxstack/fix/port-upstream-pstack-0142
praxstack Aug 21, 2026
e022dbb
docs(session): record ticket #10-#13 takeover outcomes
praxstack Aug 21, 2026
0b7031b
Merge pull request #16 from praxstack/chore/session-log-t10-t15
praxstack Aug 21, 2026
8b8c391
docs(evidence): retract the clock-skew claim after direct measurement
praxstack Aug 22, 2026
e67726a
Merge pull request #17 from praxstack/docs/retract-clock-skew-claim
praxstack Aug 22, 2026
8394e2d
chore(agents): skill setup — tracker, triage labels, domain docs, dis…
praxstack Aug 22, 2026
a1c327f
Merge remote-tracking branch 'origin/main'
praxstack Aug 22, 2026
232dded
merge(upstream): sync cursor/plugins while keeping pstack-generic cus…
praxstack Sep 3, 2026
8c5ed41
Merge branch 'cursor:main' into main
praxstack Sep 5, 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
31 changes: 31 additions & 0 deletions .agent/evidence/code-review-findings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Code review record — cumulative diff `main...chore/skill-setup-and-pstack-gates`

Two independent fresh-context reviewers: Standards/Correctness axis + Spec/Validator axis.
Spec validator independently re-ran AC1–AC6 commands; all reproduced green
(44-skill portability exit 0 · validate-plugins exit 0 · references exit 0 ·
bun test 52/52 · audit spot-check matched · evidence file real).

## Findings and dispositions

| # | Sev | Finding | Disposition |
|---|-----|---------|-------------|
| 1 | MAJOR | Four triage labels missing from tracker vs docs claims | **Resolved by verification** — `gh label list` confirms needs-triage/needs-info/ready-for-agent/ready-for-human/wontfix all exist; earlier "missing" was a truncated listing on both sides |
| 2 | MINOR | CI installed ajv unpinned via `npm install --no-save`, ignoring lockfile | **Fixed** — workflow now `bun install --frozen-lockfile` |
| 3 | MINOR | New references gate unwired (no alias, no CI, absent from CLAUDE.md gates) | **Fixed** — alias added; CI runs all three gates; path filter includes `pstack/**`; CLAUDE.md updated |
| 4 | MINOR | `decodeURIComponent` throws on malformed escapes, crashing whole run | **Fixed** — try/catch, reported as unresolved reference |
| 5 | NIT | Commit message says "pinning"; ranges are caret | **Accepted as-is** — bun.lock is the pin; not rewriting pushed-stack history for prose |
| 6 | NIT | Checker edge cases (Windows seps, reference-style links, fences, hyphen placeholders) | **Partially fixed** — hyphenated placeholders exempted; rest documented as known limits in header comment |
| 7 | NIT | `skillRootOf` bogus probe when md sits directly at skills root | **Won't fix** — second probe covers it; no such file exists (44 skill dirs) |
| 8 | NIT | `.scratch` ticket location; two doc commits could be one | **Won't fix** — `.scratch/<feature>/` is the setup-matt-pocock canonical convention; history preserved |
| D1 | Drift | Gate-5 audit's re-audit grep read like a failing gate | **Fixed** — reworded to classify expected absences |

## Unrelated-changes check

CLAUDE.md + docs/agents/* (~160 lines) sit outside the SPEC Objective text but are
covered by recorded Assumption 1 (user-mandated skill-setup scope, branch name).
Retained with this note as reviewer sign-off context.

## Parked

PORTABILITY gate 4 remainder (Cursor GUI + second non-Cursor host clean-session smoke):
requires human-launched sessions. Unblock recorded in SPEC Assumption 2 and issue #6.
64 changes: 64 additions & 0 deletions .agent/evidence/gate5-fallback-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Gate 5 audit — bounded fallback for unavailable capabilities

Scope: all 44 skills under `pstack/skills/` (SKILL.md plus references/playbooks).
Contract: `pstack/PORTABILITY.md` portable core — "degrade explicitly when a
capability is unavailable"; acceptance gate 5.

> **Revision 2 (2026-08-22, post-merge review of PR #8).** Revision 1 claimed
> "15/44 direct hits" and "44/44 audited after fix; zero open gaps." Both claims
> were wrong or unreproducible: the stated grep yields **13** direct hits on
> SKILL.md files; three skills (`bro`, `tdd`, `unslop`) were absent from the
> verdict table; one non-hitting `principle-*` skill was miscounted (19 claimed,
> 20 actual); and `create-verification-skill` was labeled COVERED despite having
> no capability-degradation clause for its core drive dependency. This revision
> replaces those claims with reproducible counts and fixes both gaps found.

## Method (reproducible)

1. Direct-hit grep over SKILL.md files only:

```sh
grep -rilE 'unavailable|fallback|degrade|not available' pstack/skills/*/SKILL.md
```

→ **13 skills**: arena, automate-me, figure-it-out, how, interrogate,
no-comments, principle-guard-the-context-window, recall, reflect,
setup-pstack, show-me-your-work, swarm, why.

(An all-markdown variant returns 34 files; per-skill classification below is
authoritative because coverage lives in whichever file binds the capability.)

2. For the remaining **31** skills: sweep capability terms
(`subagent|delegate|spawn|host|tracker|browser|playwright|network`) per skill
directory, then read the cited lines to separate real bindings from prose.

## Verdicts — 44/44 classified (13 direct + 31 swept)

| Skill / group | n | Verdict | Evidence |
|---|---|---|---|
| Direct hits (listed above) | 13 | COVERED | explicit degradation language in SKILL.md |
| architect | 1 | COVERED | SKILL.md L16 "If no tracker is available, keep the same short checklist"; L36 "Otherwise run independent candidates on the parent model … Never invent a model identifier" |
| blast-radius | 1 | COVERED | SKILL.md step 6: "Use distinct confirmed models when available; otherwise inherit the parent model and do not claim cross-model evidence." |
| poteto-mode | 1 | COVERED | references/plan.md L5 tracker fallback; L26–27 role/model fallbacks ("Otherwise launch a general delegate …", "Otherwise inherit the parent model and never invent an identifier") |
| maintain-verification-skill | 1 | GAP → FIXED (`badf6ac`) | serial self-execution fallback added; bounded with batching discipline in revision 2 |
| create-verification-skill | 1 | GAP → FIXED (this branch) | revision 1 missed it entirely: no degradation existed for an undriveable app; added explicit stop-and-report clause in §1 Drive |
| teach | 1 | COMPLIANT (vacuous) | zero capability-term hits |
| technical-writing | 1 | COMPLIANT (benign) | L93 "the client and the host" is prose-style guidance, not a capability binding |
| typescript-best-practices | 1 | COMPLIANT (benign) | "model variants" = TypeScript union modeling |
| tdd | 1 | COMPLIANT (benign) | L28 lists browser automation etc. as optional regression-check examples ("Examples include"), no hard binding |
| bro | 1 | COMPLIANT (vacuous) | restatement task; zero capability-term hits (absent from revision 1's table) |
| unslop | 1 | COMPLIANT (vacuous) | prose-style edits; zero capability-term hits (absent from revision 1's table) |
| principle-* without direct hits | 20 | COMPLIANT (vacuous) | only conditional mentions remain: build-the-lever L3/L20 ("When you fan work out to subagents…" — optional), make-operations-idempotent L20 ("respawns cleanly" metaphor); guard-the-context-window is among the 13 direct hits |

Count check: 13 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 20 = 44 ✓

## Residual

After both fixes, every skill carries an explicit verdict above and the counts
reconcile to 44. Two gaps were found and fixed in total across revisions:
`maintain-verification-skill` (badf6ac, bounded here) and
`create-verification-skill` (this branch). No skill remains unclassified.
Revision 1's "15/44 · zero open gaps" statement was false as written — it was
not reproducible from the stated method, omitted three skills, miscounted the
principle group by one, and mislabeled create-verification-skill COVERED. It is
superseded by this document, not amended in place.
30 changes: 30 additions & 0 deletions .agent/evidence/pr9-merge-2026-08-22/qa-summary.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
36 changes: 36 additions & 0 deletions .agent/evidence/pr9-rerun-post-merge-2026-08-22/pr-body.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
## Summary

Re-raise of the post-merge review remediation that was closed unmerged as #245 (opened against the wrong default base — upstream instead of this fork; branch content was correct). Supersedes #245. Closes #11 (T7), closes #12 (T8); refs #13.

The branch carries three remediation commits plus a clean merge of current main:

- `a4eaaf1` fix(pstack): gate-5 degradation fixes and spec carve-out
- `d6b4292` fix(scripts): floor guard and CRLF tolerance in reference checker
- `12935ba` docs(evidence): reconcile gate-5 audit; fix dead evidence citations
- `215edb0` Merge upstream tip (4612556) — absorbs docs(pstack) workflow/boundary port (#238); `git merge-tree` dry-run showed zero conflicts

## What changed, honestly

1. **Reference gate hardening** (`scripts/check-pstack-references.mjs`): floor guard and CRLF tolerance so the gate degrades predictably instead of mis-reporting on Windows-style line endings or empty match sets.
2. **Gate-5 degradation fixes** under `pstack/`: bounded fallback behavior when subagents are unavailable, with spec carve-out documented rather than silently absorbed.
3. **Evidence truthfulness**: dead evidence citations repaired; gate-5 audit wording now matches what the code actually does.
4. **Reconciliation**: main absorbed; all gates proven against current upstream content, not a stale base.

## QA evidence (fresh, at HEAD `215edb0`, 2026-08-22)

| Gate | Command | Result |
|---|---|---|
| Portability (gate 1) | `npm run check-pstack-portability` | exit 0 |
| References (gate 3) | `npm run check-pstack-references` | exit 0 |
| Marketplace validation | `npm run validate-plugins` | exit 0 |
| Runtime tests | `bun test pstack` | 52 pass / 0 fail, exit 0 |

Raw logs: `.agent/evidence/pr9-rerun-post-merge-2026-08-22/` (`.log` files are gitignored by repo policy; substance mirrored above and in `.scratch/pstack-generic-gates/T7`/`T8`).

**Known unrelated failure (not introduced here):** bare `bun test` at repo root discovers 139 tests across 32 files including `orchestrate/*`, which errors on missing optional deps (`@slack/web-api`, `zod/v3`). `orchestrate/` is byte-identical to `origin/main` (verified via diff), so this is pre-existing upstream state — filed separately as #13 with repro and suggested directions.

## Process notes

- Tickets: T7 → #11, T8 → #12 (markdown mirrors in `.scratch/pstack-generic-gates/`).
- Fresh-context code review ran over `origin/main..HEAD` before this PR was raised; findings and verdict recorded in `.agent/evidence/code-review-findings.md`.
- Review-only PR: raised by the authoring agent, intentionally **not merged** — merge approval stays human.
50 changes: 50 additions & 0 deletions .agent/evidence/t10-port-ledger.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# T10 port ledger — upstream pstack 0.14.2 → pstack-generic

Source: upstream/main 4612556 · Target: fix/port-upstream-pstack-0142
Rule: every semantic upstream addition is either ported in host-neutral phrasing
or omitted with a recorded reason. Identity files stay ours (SPEC non-goals).

## autopilot-full.md

| Upstream addition | Decision |
|---|---|
| `/goal` arming on operator go, persists across turns | PORTED — "persistent program goal … host's native goal or plan mechanism when it has one, otherwise a recorded objective every audit tick re-reads" |
| Terminal `/loop` audit cadence + monitored-shell sleep | PARTIAL PORT — cadence stays on the existing host-neutral sentence ("event, wait, or recurring-work feature … bounded polling"); Cursor's terminal-/loop and cloud-sleeper mechanics are host-specific and omitted |
| Output-notification sentinel per tick | PORTED verbatim-in-meaning |
| Never leave cadence to memory / lossy completion notifications | PORTED |
| Re-read playbook from trunk via `git show origin/main:<path>` + re-read armed goal | PORTED (path adjusted to this file) |
| Fix drift during tick, treat as urgent | PORTED |
| Liveness/status probe per owner | PORTED (replaces vaguer "probes delegated-work status") |
| Count only side effects as progress (commits/pushes/PR-check deltas/store reports) | PORTED |
| Stuck-lane stand-down + immediate replacement, "do not wait for a polite return" | PORTED |
| Bugbot pass counters / `cursor-team-kit` deslop / control-cli-control-ui names | OMITTED — already generalized in ours ("skeptical automated-review triage", "installed deslop equivalent", "installed CLI or UI control skill"); naming the Cursor plugin would re-couple the generic variant |
| Cloud-sleeper wake chain | OMITTED — Cursor cloud concept; ours' bounded-polling fallback covers it |

## autopilot-stack.md

| Upstream addition | Decision |
|---|---|
| `/goal` arming on explicit go | PORTED (same neutral phrasing as full) |
| Audit-tick hardening block (sentinel, trunk re-read, side-effects progress, stuck stand-down) | PORTED (path adjusted) |
| `gt` restack/submit mechanics, Graphite UI delivery | OMITTED — ours keeps source-control-host adapter phrasing ("whatever stacking tool the team uses", "active source-control adapter"); semantics preserved, tool coupling dropped |
| Cloud-agent division-of-labor framing | OMITTED — host-specific |

## opening-a-pr.md

| Upstream addition | Decision |
|---|---|
| Per-invocation worktree isolation for sequential writers (`fetch && reset --hard origin/<branch>`) | PORTED |
| `/technical-writing` layers except Diátaxis + one-word-per-action / keep articles / avoid `-ing` | PORTED (skill referenced generically) |
| Conventional Commits title spec (types, scope examples, imperative subject, real symbol, no trailing period) | PORTED |
| Sectioned description template Why/Scope/Tradeoffs/Blast Radius/Verification + drop-when-empty + media after sections | PORTED |
| Boilerplate ban extended from "small PRs" to all PRs | PORTED (stronger form adopted; duplicate clause removed) |
| Open ready never draft + ready-command fallback + verify via PR viewer | PORTED (host-neutral wording; absorbs ours' viewer sentence) |
| Babysit reversal: opening ≠ babysit; separate pass only on request post-stack; stalls-build rationale | PORTED — replaces ours' auto-babysit line (upstream semantics win; recorded here) |
| `gt` stacking specifics | OMITTED — team-tool neutrality retained |

## plugin.json

| Upstream change | Decision |
|---|---|
| name/displayName/description/publisher/homepage/repository/keywords/tags | OMITTED — identity is human-owned and intentionally generic (`pstack-generic`, praxstack) |
| version 0.14.2 | PORTED AS `0.14.2-generic.1` — signals upstream-content parity of carried guidance while keeping the generic identity scheme |
Loading