@oneie/claude 0.6.0 → 0.7.0
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/agents/w1-recon.md +9 -4
- package/agents/w2-decide.md +51 -28
- package/agents/w3-edit.md +70 -78
- package/agents/w4-verify.md +164 -69
- package/commands/browser.md +98 -35
- package/commands/cc-connect.md +6 -0
- package/commands/chat.md +13 -1
- package/commands/close.md +45 -19
- package/commands/create.md +20 -10
- package/commands/db-sync.md +5 -1
- package/commands/deploy.md +174 -87
- package/commands/do-autonomous.md +31 -20
- package/commands/do-improve.md +4 -4
- package/commands/do-show.md +4 -3
- package/commands/do.md +53 -13
- package/commands/go.md +75 -0
- package/commands/improve.md +4 -2
- package/commands/kill.md +6 -8
- package/commands/notify.md +15 -2
- package/commands/oo-push.md +24 -9
- package/commands/rag.md +6 -0
- package/commands/release.md +46 -25
- package/commands/restart.md +5 -4
- package/commands/see.md +45 -35
- package/commands/skill-create.md +38 -5
- package/commands/sync.md +21 -11
- package/hooks/scripts/auto-continue.sh +70 -0
- package/hooks/scripts/branch-pin.sh +85 -0
- package/hooks/scripts/git-add-guard.sh +16 -5
- package/hooks/scripts/post-edit-check.sh +16 -0
- package/hooks/scripts/session-start.sh +13 -8
- package/hooks/scripts/sync-priority-todo.sh +5 -0
- package/package.json +1 -1
- package/rules/api.md +9 -0
- package/rules/design.md +13 -3
- package/rules/documentation.md +30 -71
- package/rules/engine.md +8 -1
- package/rules/ui.md +5 -1
- package/scripts/__pycache__/do-rank.cpython-313.pyc +0 -0
- package/scripts/browser-check.mjs +44 -103
- package/scripts/cc-events-proof.sh +13 -12
- package/scripts/chrome.mjs +381 -0
- package/scripts/do-analyze.sh +109 -4
- package/scripts/do-auto.sh +350 -43
- package/scripts/do-consumer-sweep.sh +72 -0
- package/scripts/do-derives-check.sh +88 -0
- package/scripts/do-fleet.sh +50 -1
- package/scripts/do-killswitch-audit.py +33 -14
- package/scripts/do-promise-lint.sh +150 -4
- package/scripts/do-promise-settle.sh +131 -9
- package/scripts/do-prove.sh +197 -17
- package/scripts/do-rank.py +606 -20
- package/scripts/do-rubric.py +21 -2
- package/scripts/do-signal.sh +157 -17
- package/scripts/do-smoke.sh +9 -0
- package/scripts/do-substrate-check.sh +49 -0
- package/scripts/do-tasks-wire-check.sh +81 -0
- package/scripts/do-tier.sh +90 -5
- package/scripts/do-ui-gate.sh +332 -0
- package/scripts/do-untracked-gate.sh +231 -0
- package/scripts/do-walk.sh +344 -0
- package/scripts/factory-check.sh +747 -0
- package/scripts/factory-repo.sh +1361 -0
- package/scripts/factory-tasks-check.sh +85 -0
- package/scripts/outcome-pull.ts +279 -0
- package/scripts/promise-manifest.mjs +167 -0
- package/scripts/reconcile-allow.txt +5 -0
- package/scripts/rubric-weights.json +64 -0
- package/scripts/spine-canary.sh +20 -0
- package/scripts/typedb-cluster-status.sh +128 -0
- package/scripts/typedb-env.sh +182 -0
- package/scripts/typedb-flap-recorder.sh +85 -0
- package/scripts/typedb-probes/containment-probe.py +88 -0
- package/scripts/typedb-probes/panic-probe-version.py +92 -0
- package/scripts/typedb-probes/panic-probe.py +77 -0
- package/scripts/typedb-scratch.sh +73 -0
- package/scripts/urls-lint.sh +58 -0
- package/scripts/w4-rubric.ts +96 -12
- package/scripts/wf-check.mjs +75 -0
- package/skills/ai-ui/SKILL.md +1 -1
- package/skills/astro/SKILL.md +177 -132
- package/skills/astro/add-content-collection.md +29 -13
- package/skills/astro/check-build.md +19 -13
- package/skills/astro/create-component.md +36 -9
- package/skills/astro/create-page.md +39 -10
- package/skills/astro/optimize-performance.md +36 -8
- package/skills/cli/SKILL.md +254 -220
- package/skills/dev/SKILL.md +1 -1
- package/skills/directory-autofill/SKILL.md +68 -0
- package/skills/docs/SKILL.md +4 -4
- package/skills/mcp/SKILL.md +186 -156
- package/skills/promise-make/SKILL.md +2 -2
- package/skills/puck/SKILL.md +465 -250
- package/skills/react19/SKILL.md +196 -296
- package/skills/reactflow/SKILL.md +387 -412
- package/skills/sdk/SKILL.md +167 -106
- package/skills/shadcn/SKILL.md +245 -201
- package/skills/signal/SKILL.md +5 -0
- package/skills/sui/SKILL.md +6 -1
- package/skills/tutorial/SKILL.md +15 -0
- package/skills/typedb/SKILL.md +427 -217
- package/skills/typedb/examples/python-patterns.py +11 -4
- package/skills/typedb/examples/query-patterns.tql +8 -3
- package/skills/typedb/examples/schema-patterns.tql +4 -2
- package/skills/typedb/reference/migration-2x-3x.md +19 -1
- package/skills/typedb/reference/python-driver.md +17 -1
- package/skills/voice/SKILL.md +117 -0
- package/skills/writer/SKILL.md +29 -12
- package/templates/template-feature.md +26 -1
- package/templates/template-tests.md +4 -0
- package/templates/template-todo.md +65 -10
package/scripts/do-prove.sh
CHANGED
|
@@ -1,34 +1,214 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# do-prove.sh — PROVE (pure). Promise-check moved to do-reconcile.sh (design canon).
|
|
3
|
-
# Auto-detects surface from changed files
|
|
4
|
-
#
|
|
3
|
+
# Auto-detects surface from changed files, then RUNS the proof for frontend surfaces
|
|
4
|
+
# (chrome-headless-shell page check via chrome.mjs, curl fallback against prod).
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# do-prove.sh [--route <path>]... [<changed-path>|<cycle-slug>]...
|
|
8
|
+
# git diff --name-only | do-prove.sh
|
|
9
|
+
#
|
|
10
|
+
# Arg contract:
|
|
11
|
+
# - Positional args that exist as files/dirs are treated as changed paths.
|
|
12
|
+
# - Positional args that do NOT exist on disk (e.g. a cycle slug) are ignored
|
|
13
|
+
# for surface detection; changed paths then come from `git diff --name-only HEAD`.
|
|
14
|
+
# - --route <path> (repeatable) forces frontend surface + names the route(s) to prove.
|
|
15
|
+
# - stdin (non-tty) supplies changed paths when no positional paths are given.
|
|
16
|
+
#
|
|
17
|
+
# Env:
|
|
18
|
+
# PROVE_BASE_URL dev base for browser check (default http://localhost:4321)
|
|
19
|
+
# PROVE_PROD_URL prod fallback base (default https://one.ie)
|
|
20
|
+
# PROVE_CHECK_CMD optional check command for non-frontend surfaces; if set and
|
|
21
|
+
# it fails, do-prove.sh exits nonzero.
|
|
22
|
+
#
|
|
23
|
+
# Exit codes: 0 = pass or skipped (no reachable environment) · 1 = a reachable
|
|
24
|
+
# page failed (HTTP >= 500 / status 0 / console+JS errors) or declared check failed.
|
|
5
25
|
set -euo pipefail
|
|
6
26
|
|
|
27
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
28
|
+
BASE_URL="${PROVE_BASE_URL:-http://localhost:4321}"
|
|
29
|
+
PROD_URL="${PROVE_PROD_URL:-https://one.ie}"
|
|
30
|
+
BROWSER_CHECK="$ROOT/.claude/scripts/chrome.mjs"
|
|
31
|
+
|
|
32
|
+
routes=()
|
|
7
33
|
paths=()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
34
|
+
while [ "$#" -gt 0 ]; do
|
|
35
|
+
case "$1" in
|
|
36
|
+
--route)
|
|
37
|
+
[ "$#" -ge 2 ] || { echo "PROVE: --route requires a value"; exit 1; }
|
|
38
|
+
routes+=("$2"); shift 2 ;;
|
|
39
|
+
*)
|
|
40
|
+
# A real path (exists on disk relative to root or cwd) counts as a changed
|
|
41
|
+
# path; anything else (a cycle slug) is noted and ignored for detection.
|
|
42
|
+
if [ -e "$1" ] || [ -e "$ROOT/$1" ]; then
|
|
43
|
+
paths+=("$1")
|
|
44
|
+
else
|
|
45
|
+
echo "PROVE: note — '$1' is not a path (cycle slug?); using git diff for surface detection"
|
|
46
|
+
fi
|
|
47
|
+
shift ;;
|
|
48
|
+
esac
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
# stdin (piped) paths
|
|
52
|
+
if [ "${#paths[@]}" -eq 0 ] && [ ! -t 0 ]; then
|
|
53
|
+
while IFS= read -r l; do [ -n "$l" ] && paths+=("$l"); done || true
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# git fallback
|
|
57
|
+
if [ "${#paths[@]}" -eq 0 ]; then
|
|
58
|
+
while IFS= read -r l; do [ -n "$l" ] && paths+=("$l"); done \
|
|
59
|
+
< <(git -C "$ROOT" diff --name-only HEAD 2>/dev/null || true)
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
if [ "${#paths[@]}" -eq 0 ] && [ "${#routes[@]}" -eq 0 ]; then
|
|
63
|
+
echo "PROVE: no changes"; exit 0
|
|
12
64
|
fi
|
|
13
|
-
[ "${#paths[@]}" -eq 0 ] && { echo "PROVE: no changes"; exit 0; }
|
|
14
65
|
|
|
15
66
|
# Surface detection — substrate wins (upstream), then api, then frontend, else backend
|
|
16
67
|
surface=backend
|
|
17
|
-
for p in "${paths[@]}"; do
|
|
68
|
+
for p in "${paths[@]+"${paths[@]}"}"; do
|
|
18
69
|
case "$p" in
|
|
19
70
|
*.tql|schema/*) surface=substrate; break ;;
|
|
20
71
|
*/pages/api/*|*/api/*) surface=api ;;
|
|
21
72
|
*.astro|*.tsx) [ "$surface" != "api" ] && surface=frontend ;;
|
|
22
73
|
esac
|
|
23
74
|
done
|
|
75
|
+
# Explicit --route forces a frontend proof
|
|
76
|
+
[ "${#routes[@]}" -gt 0 ] && surface=frontend
|
|
77
|
+
echo "surface: $surface"
|
|
24
78
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
79
|
+
# ---------- non-frontend surfaces ----------
|
|
80
|
+
if [ "$surface" != "frontend" ]; then
|
|
81
|
+
case "$surface" in
|
|
82
|
+
api) proof="contract test (vitest+msw) + curl per surface — route + SDK + MCP + CLI (four-surface rule)" ;;
|
|
83
|
+
backend) proof="curl against the DEPLOYED runtime (local verify is necessary, not sufficient)" ;;
|
|
84
|
+
substrate) proof="/sync reconcile (TypeDB↔KV↔D1↔SUI) + TypeQL returns the new shape + types compile downhill" ;;
|
|
85
|
+
esac
|
|
86
|
+
echo "proof: $proof"
|
|
87
|
+
if [ -n "${PROVE_CHECK_CMD:-}" ]; then
|
|
88
|
+
echo "PROVE: running declared check: $PROVE_CHECK_CMD"
|
|
89
|
+
if bash -c "$PROVE_CHECK_CMD"; then
|
|
90
|
+
echo "PROVE: pass"; exit 0
|
|
91
|
+
else
|
|
92
|
+
echo "PROVE: fail (declared check command failed)"; exit 1
|
|
93
|
+
fi
|
|
94
|
+
fi
|
|
95
|
+
echo "PROVE: pass (no declared check command — proof action stated above)"
|
|
96
|
+
exit 0
|
|
97
|
+
fi
|
|
31
98
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
99
|
+
# ---------- frontend surface: actually prove the page loads ----------
|
|
100
|
+
|
|
101
|
+
# Route discovery: --route args > .w2-surface-checklist.json > derive from changed pages
|
|
102
|
+
if [ "${#routes[@]}" -eq 0 ] && [ -f "$ROOT/.w2-surface-checklist.json" ] && command -v jq >/dev/null 2>&1; then
|
|
103
|
+
while IFS= read -r r; do [ -n "$r" ] && routes+=("$r"); done < <(
|
|
104
|
+
jq -r '((.surfaces // []) | map(.routes // [])[] | .[]?), ((.routes // [])[]?)' \
|
|
105
|
+
"$ROOT/.w2-surface-checklist.json" 2>/dev/null | sort -u
|
|
106
|
+
) || true
|
|
107
|
+
fi
|
|
108
|
+
if [ "${#routes[@]}" -eq 0 ]; then
|
|
109
|
+
for p in "${paths[@]+"${paths[@]}"}"; do
|
|
110
|
+
case "$p" in
|
|
111
|
+
one.ie/web/src/pages/api/*) ;; # api routes, not pages
|
|
112
|
+
one.ie/web/src/pages/*)
|
|
113
|
+
r="${p#one.ie/web/src/pages}"
|
|
114
|
+
r="${r%.astro}"; r="${r%.md}"; r="${r%.mdx}"; r="${r%.ts}"; r="${r%.tsx}"
|
|
115
|
+
[ "${r##*/}" = "index" ] && r="${r%index}"
|
|
116
|
+
r="${r%/}"; [ -z "$r" ] && r="/"
|
|
117
|
+
# skip dynamic routes — no concrete param to check
|
|
118
|
+
case "$r" in *\[*\]*) continue ;; esac
|
|
119
|
+
routes+=("$r") ;;
|
|
120
|
+
esac
|
|
121
|
+
done
|
|
122
|
+
fi
|
|
123
|
+
[ "${#routes[@]}" -eq 0 ] && routes=("/")
|
|
124
|
+
|
|
125
|
+
# De-dupe (portable — macOS bash 3.2 has no mapfile)
|
|
126
|
+
deduped=()
|
|
127
|
+
while IFS= read -r r; do deduped+=("$r"); done < <(printf '%s\n' "${routes[@]}" | awk '!seen[$0]++')
|
|
128
|
+
routes=("${deduped[@]}")
|
|
129
|
+
|
|
130
|
+
dev_up=0
|
|
131
|
+
if curl -sf -o /dev/null --max-time 4 "$BASE_URL/" 2>/dev/null; then dev_up=1; fi
|
|
132
|
+
|
|
133
|
+
check_route_curl() { # $1 = base, $2 = route → echoes http code
|
|
134
|
+
curl -s -o /dev/null --max-time 20 -w '%{http_code}' "$1$2" 2>/dev/null || echo "000"
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
fail=0
|
|
138
|
+
checked=0
|
|
139
|
+
for route in "${routes[@]}"; do
|
|
140
|
+
proved=0
|
|
141
|
+
# No node_modules precondition here on purpose. The old gate was
|
|
142
|
+
# `[ -d /tmp/node_modules/playwright ]`; that directory had already evaporated,
|
|
143
|
+
# so every browser PROVE silently degraded to the curl fallback while still
|
|
144
|
+
# printing "ok". chrome.mjs resolves Playwright itself and exits 1 with
|
|
145
|
+
# {"error":"playwright_not_found"} when it truly cannot run — which the
|
|
146
|
+
# unparsable-output branch below already treats as environmental.
|
|
147
|
+
if [ "$dev_up" -eq 1 ] && [ -f "$BROWSER_CHECK" ]; then
|
|
148
|
+
out="$(node "$BROWSER_CHECK" "$BASE_URL$route" 2>/dev/null || true)"
|
|
149
|
+
status="$(printf '%s' "$out" | jq -r '.httpStatus // 0' 2>/dev/null || echo 0)"
|
|
150
|
+
# Same gated-is-not-broken policy the curl leg below already applies: a
|
|
151
|
+
# subresource answering 401/403 means the page is signed-out, not broken, and
|
|
152
|
+
# PROVE runs signed-out by default. Measured 2026-08-02 when the browser leg
|
|
153
|
+
# came back to life: /pricing, /blog and /chat each failed on nothing but
|
|
154
|
+
# "Failed to load resource: … 401", which curl had always passed. Everything
|
|
155
|
+
# else still counts — uncaught JS, real console.error, and subresource
|
|
156
|
+
# 404/5xx, which are genuine breakage.
|
|
157
|
+
counted='((.jsErrors // []) + ((.consoleErrors // []) | map(select(test("status of (401|403)") | not))))'
|
|
158
|
+
errs="$(printf '%s' "$out" | jq -r "$counted | length" 2>/dev/null || echo "")"
|
|
159
|
+
if [ -n "$status" ] && [ "$status" != "0" ] && [ -n "$errs" ]; then
|
|
160
|
+
proved=1; checked=$((checked+1))
|
|
161
|
+
# 404 IS A FAIL here too. The curl leg below learned this on 2026-07-29;
|
|
162
|
+
# the browser leg never did, so a nonexistent route proved itself green
|
|
163
|
+
# whenever the page also logged no errors. 401/403 stay ok — gated, not gone.
|
|
164
|
+
if [ "$status" -ge 500 ] || [ "$status" -eq 404 ] || [ "$errs" -gt 0 ]; then
|
|
165
|
+
echo "PROVE: FAIL $route — http=$status console/js errors=$errs (dev $BASE_URL)"
|
|
166
|
+
printf '%s' "$out" | jq -r "$counted[]" 2>/dev/null | head -5 | sed 's/^/PROVE: error: /'
|
|
167
|
+
fail=1
|
|
168
|
+
else
|
|
169
|
+
echo "PROVE: ok $route — http=$status, 0 console/js errors (dev $BASE_URL)"
|
|
170
|
+
fi
|
|
171
|
+
fi
|
|
172
|
+
# status 0 / unparsable = environmental (browser-check couldn't run) → fall through
|
|
173
|
+
fi
|
|
174
|
+
if [ "$proved" -eq 0 ] && [ "$dev_up" -eq 1 ]; then
|
|
175
|
+
# dev reachable but playwright unavailable → curl the dev route
|
|
176
|
+
code="$(check_route_curl "$BASE_URL" "$route")"
|
|
177
|
+
if [ "$code" != "000" ]; then
|
|
178
|
+
proved=1; checked=$((checked+1))
|
|
179
|
+
# 404 IS A FAIL. It used to report `ok` — only >=500 failed — so a route
|
|
180
|
+
# that does not exist proved itself. Measured 2026-07-29: `--route /factory`
|
|
181
|
+
# returned "ok /factory — http=404" against a dev server running a tree
|
|
182
|
+
# without the page, and that line was the 17th leg of a promise's proof.
|
|
183
|
+
# 401/403 stay ok: the route exists and answered, it is merely gated.
|
|
184
|
+
if [ "$code" -ge 500 ] || [ "$code" -eq 404 ]; then
|
|
185
|
+
echo "PROVE: FAIL $route — http=$code (dev $BASE_URL, curl)"; fail=1
|
|
186
|
+
else
|
|
187
|
+
echo "PROVE: ok $route — http=$code (dev $BASE_URL, curl)"
|
|
188
|
+
fi
|
|
189
|
+
fi
|
|
190
|
+
fi
|
|
191
|
+
if [ "$proved" -eq 0 ]; then
|
|
192
|
+
code="$(check_route_curl "$PROD_URL" "$route")"
|
|
193
|
+
if [ "$code" != "000" ]; then
|
|
194
|
+
checked=$((checked+1))
|
|
195
|
+
# Same rule as the dev branch above — a 404 in production is the clearest
|
|
196
|
+
# possible "not shipped", and it must not read as proven.
|
|
197
|
+
if [ "$code" -ge 500 ] || [ "$code" -eq 404 ]; then
|
|
198
|
+
echo "PROVE: FAIL $route — http=$code (prod $PROD_URL)"; fail=1
|
|
199
|
+
else
|
|
200
|
+
echo "PROVE: ok $route — http=$code (prod $PROD_URL)"
|
|
201
|
+
fi
|
|
202
|
+
else
|
|
203
|
+
echo "PROVE: unreachable $route — neither $BASE_URL nor $PROD_URL responded"
|
|
204
|
+
fi
|
|
205
|
+
fi
|
|
206
|
+
done
|
|
207
|
+
|
|
208
|
+
if [ "$fail" -eq 1 ]; then
|
|
209
|
+
echo "PROVE: fail"; exit 1
|
|
210
|
+
fi
|
|
211
|
+
if [ "$checked" -eq 0 ]; then
|
|
212
|
+
echo "PROVE: skipped (no reachable environment)"; exit 0
|
|
213
|
+
fi
|
|
214
|
+
echo "PROVE: pass ($checked route(s) proven)"; exit 0
|