@vamsiivarmaa/proofloop 1.0.0-rc.2 → 1.0.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -1
- package/README.md +8 -1
- package/SECURITY.md +1 -1
- package/dist/cli.js +1608 -424
- package/hooks/hooks.json +20 -2
- package/package.json +2 -2
- package/protocols/test.yaml +23 -0
- package/skills/approve/SKILL.md +1 -1
- package/skills/audit/SKILL.md +20 -0
- package/skills/bug/SKILL.md +1 -1
- package/skills/feature/SKILL.md +1 -1
- package/skills/ledger/SKILL.md +9 -0
- package/skills/test/SKILL.md +23 -0
package/hooks/hooks.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "ProofLoop guard: agents cannot change approvals or state; protected paths and critical shell commands are policy-checked.",
|
|
2
|
+
"description": "ProofLoop guard: agents cannot change approvals or state; protected paths and critical shell commands are policy-checked. A bare \"test\" prompt starts the ProofLoop testing protocol.",
|
|
3
3
|
"hooks": {
|
|
4
4
|
"PreToolUse": [
|
|
5
5
|
{
|
|
@@ -8,12 +8,30 @@
|
|
|
8
8
|
{
|
|
9
9
|
"type": "command",
|
|
10
10
|
"command": "${CLAUDE_PLUGIN_ROOT}/bin/proofloop",
|
|
11
|
-
"args": [
|
|
11
|
+
"args": [
|
|
12
|
+
"hook",
|
|
13
|
+
"pre-tool-use"
|
|
14
|
+
],
|
|
12
15
|
"timeout": 15,
|
|
13
16
|
"onFailure": "block"
|
|
14
17
|
}
|
|
15
18
|
]
|
|
16
19
|
}
|
|
20
|
+
],
|
|
21
|
+
"UserPromptSubmit": [
|
|
22
|
+
{
|
|
23
|
+
"hooks": [
|
|
24
|
+
{
|
|
25
|
+
"type": "command",
|
|
26
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/bin/proofloop",
|
|
27
|
+
"args": [
|
|
28
|
+
"hook",
|
|
29
|
+
"user-prompt"
|
|
30
|
+
],
|
|
31
|
+
"timeout": 10
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
17
35
|
]
|
|
18
36
|
}
|
|
19
37
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vamsiivarmaa/proofloop",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.6",
|
|
4
4
|
"description": "Protocol-driven, evidence-based engineering harness and Claude Code plugin",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"esbuild": "^0.28.2",
|
|
28
28
|
"eslint": "^10.13.0",
|
|
29
29
|
"tsx": "^4.23.15",
|
|
30
|
-
"typescript": "
|
|
30
|
+
"typescript": "6.0.3",
|
|
31
31
|
"typescript-eslint": "^8.72.0",
|
|
32
32
|
"vitest": "^5.0.5"
|
|
33
33
|
},
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
schemaVersion: 1
|
|
2
|
+
id: test
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
title: Test protocol
|
|
5
|
+
description: "Full project test on the current commit: static checks, unit and regression suite, integration, browser journeys with personas, security scan, migration, compared with the base branch."
|
|
6
|
+
engine: ">=1.0.0"
|
|
7
|
+
mode: existing-repo
|
|
8
|
+
defaultRisk: medium
|
|
9
|
+
retry: { maxRepairAttempts: 0, stopOnIdenticalFailure: true }
|
|
10
|
+
personas: [ordinary-user, impatient-user, unauthorized-user, accessibility]
|
|
11
|
+
gates:
|
|
12
|
+
- { id: format, kind: format, required: false }
|
|
13
|
+
- { id: lint, kind: lint, required: true }
|
|
14
|
+
- { id: typecheck, kind: typecheck, required: true }
|
|
15
|
+
- { id: unit, kind: unit, required: true }
|
|
16
|
+
- { id: build, kind: build, required: true }
|
|
17
|
+
- { id: integration, kind: integration, required: false }
|
|
18
|
+
- { id: browser, kind: browser, required: true }
|
|
19
|
+
- { id: security-scan, kind: security-scan, required: false }
|
|
20
|
+
- { id: migration, kind: migration, required: false }
|
|
21
|
+
phases:
|
|
22
|
+
- { id: verification, title: "Run every applicable check on the current commit and on the base branch", gates: [format, lint, typecheck, unit, build, integration, browser, security-scan, migration] }
|
|
23
|
+
- { id: delivery, title: "Report results, regressions and bugs" }
|
package/skills/approve/SKILL.md
CHANGED
|
@@ -5,4 +5,4 @@ argument-hint: "<run-id>"
|
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Run `proofloop approve $ARGUMENTS` (no hash) to display the plan and its hash, and show the user the plan in full. If the user already told you to approve this run, run `proofloop approve $ARGUMENTS --plan-hash <hash> --yes` right away; the tool-permission prompt is the one human confirmation, so do not ask again in chat. Otherwise stop after showing the plan and let them decide. Then tell the user to run `proofloop run <run-id>` (in the background) to start execution.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit
|
|
3
|
+
description: When the user says "audit" (optionally with a user count and p95/p99 targets, e.g. "audit for 5000 users, p99 under 500ms"), audit the project for scale and system design - measured latency percentiles under load, static scalability findings, and a checklist-driven design review.
|
|
4
|
+
argument-hint: "[--users 2000] [--p95 300] [--p99 800] [--error-rate 0.01] [--path /api/x]"
|
|
5
|
+
allowed-tools: Bash(proofloop *)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Do not ask first; run the audit. Defaults if the user gave no numbers: 2000 users, p95 300 ms, p99 800 ms, errors 1% - say you used defaults.
|
|
9
|
+
|
|
10
|
+
1. Run in the foreground with the Bash timeout at 600000 ms:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
proofloop audit $ARGUMENTS
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
It sizes the load (users -> concurrent users, rps, in-flight requests, with printed assumptions), scans for scalability smells (unbounded queries, N+1, no timeouts, sync I/O, process-local state, retries without backoff), runs the repository's load test if there is one, and starts the app (`app.start` / `app.url` in `.proofloop/config.json`) to probe each `--path` for p50/p95/p99 and error rate.
|
|
17
|
+
|
|
18
|
+
2. Report the status exactly: `measured-ok`, `violations`, `needs-review` or `not-measured`. **Never say the app "can handle N users".** The probe is one machine; say what it measured against which targets. If nothing was measured (no app start command, no load test), say so and offer to add a k6 script or the app start config through `/proofloop:feature`.
|
|
19
|
+
3. Then do the design review yourself, read-only: run `proofloop audit --checklist`, read the code, and answer each area (capacity, data-access, caching, concurrency, resilience, scalability, failure-modes, observability) with `file:line` evidence, or say "no evidence found". Mark each answer reviewed, not measured. Check the static findings against the code and say which are real.
|
|
20
|
+
4. Offer fixes as a normal change (`/proofloop:feature` or `/proofloop:performance`) so they get a plan with design decisions, an approved plan hash, and a load check. Do not change code during an audit.
|
package/skills/bug/SKILL.md
CHANGED
|
@@ -12,4 +12,4 @@ Run:
|
|
|
12
12
|
proofloop bug "$ARGUMENTS"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Then show the user the plan
|
|
15
|
+
Then show the user the whole plan from the output (at a glance, tasks, acceptance criteria, commands) and the "Gate plan preview", plus any warnings. **Do not approve anything yourself.** Tell them to review and, when satisfied, run `/proofloop:approve <run-id>`. Never describe work as passing unless a gate result in the output says PASS. If the output says BLOCKED, report the reason and evidence path verbatim. If the bug could not be reproduced, ask the user for the missing details instead of proposing a fix.
|
package/skills/feature/SKILL.md
CHANGED
|
@@ -12,4 +12,4 @@ Run this and wait for it to finish (it can take several minutes; use a long time
|
|
|
12
12
|
proofloop feature "$ARGUMENTS"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Then show the user the plan
|
|
15
|
+
Then show the user the whole plan from the output (at a glance, tasks, acceptance criteria, commands) and the "Gate plan preview", plus any warnings. **Do not approve anything yourself.** Tell them to review and, when satisfied, run `/proofloop:approve <run-id>`. Never describe work as passing unless a gate result in the output says PASS. If the output says BLOCKED, report the reason and evidence path verbatim.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ledger
|
|
3
|
+
description: Export the Proof Ledger for a run (JSON or Markdown), or show the history ProofLoop retrieved before planning.
|
|
4
|
+
argument-hint: "<run-id> [json|markdown]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Bash(proofloop *)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Run `proofloop ledger export $ARGUMENTS` (default JSON; add `--format markdown` for the readable form). Report the disposition, the criteria that are verified, failed or unverified, and any stale or missing evidence. To see the retrieved history, run `proofloop memory <run-id>`; to inspect past incidents, run `proofloop incident list`. Do not edit or summarize away failed attempts.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test
|
|
3
|
+
description: When the user says "test", "run tests", "test everything" or names checks (unit, browser, ...), run the ProofLoop full project test - every check on the current commit, Playwright journeys per persona, and a regression comparison with the base branch - then log, report and file bugs.
|
|
4
|
+
argument-hint: "[unit|lint|typecheck|build|integration|browser|security-scan|migration ...] [--no-baseline] [--file-bugs]"
|
|
5
|
+
allowed-tools: Bash(proofloop *), Bash(git status*), Bash(git add*), Bash(git commit*)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Do not ask which suites; run the test. If the user named checks, pass them; otherwise run everything.
|
|
9
|
+
|
|
10
|
+
1. The working tree must be committed (evidence maps to a commit). If it is dirty, tell the user and offer to commit; do not commit on your own.
|
|
11
|
+
2. Run in the foreground with the Bash timeout set to 600000 ms (never in the background: its output file is outside the repository and ProofLoop's path policy refuses to read it):
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
proofloop test $ARGUMENTS
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This runs lint, typecheck, unit (the full regression suite), build, integration, the browser gate (the repository's Playwright tests, once per persona: ordinary-user, impatient-user, unauthorized-user, accessibility), security-scan and migration, on the current commit AND on the merge base with the default branch. A check that passed on the base and fails now is a **regression**; failing on both is **pre-existing**.
|
|
18
|
+
|
|
19
|
+
3. Report the table exactly as printed, every bug, every "not covered" gap, and the paths to `report.md` and the gate logs. Never call anything passing unless the output says PASS. A BLOCKED check is not a pass.
|
|
20
|
+
4. If the browser check is a gap (no Playwright tests, no app start command), say so plainly, then offer to add them as a normal change: propose the user journeys (main success path, error, empty and permission states) derived from the app's routes and acceptance criteria, and on approval run `/proofloop:feature "Add Playwright journeys for ..."`. Tag tests `@AC-n` so they map to acceptance criteria. Never write or edit tests to hide a failure.
|
|
21
|
+
5. Add `--file-bugs` only when the user asks for GitHub issues.
|
|
22
|
+
|
|
23
|
+
ProofLoop's own end-to-end self-suites are a different command: `proofloop selftest`.
|