@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.
Files changed (111) hide show
  1. package/agents/w1-recon.md +9 -4
  2. package/agents/w2-decide.md +51 -28
  3. package/agents/w3-edit.md +70 -78
  4. package/agents/w4-verify.md +164 -69
  5. package/commands/browser.md +98 -35
  6. package/commands/cc-connect.md +6 -0
  7. package/commands/chat.md +13 -1
  8. package/commands/close.md +45 -19
  9. package/commands/create.md +20 -10
  10. package/commands/db-sync.md +5 -1
  11. package/commands/deploy.md +174 -87
  12. package/commands/do-autonomous.md +31 -20
  13. package/commands/do-improve.md +4 -4
  14. package/commands/do-show.md +4 -3
  15. package/commands/do.md +53 -13
  16. package/commands/go.md +75 -0
  17. package/commands/improve.md +4 -2
  18. package/commands/kill.md +6 -8
  19. package/commands/notify.md +15 -2
  20. package/commands/oo-push.md +24 -9
  21. package/commands/rag.md +6 -0
  22. package/commands/release.md +46 -25
  23. package/commands/restart.md +5 -4
  24. package/commands/see.md +45 -35
  25. package/commands/skill-create.md +38 -5
  26. package/commands/sync.md +21 -11
  27. package/hooks/scripts/auto-continue.sh +70 -0
  28. package/hooks/scripts/branch-pin.sh +85 -0
  29. package/hooks/scripts/git-add-guard.sh +16 -5
  30. package/hooks/scripts/post-edit-check.sh +16 -0
  31. package/hooks/scripts/session-start.sh +13 -8
  32. package/hooks/scripts/sync-priority-todo.sh +5 -0
  33. package/package.json +1 -1
  34. package/rules/api.md +9 -0
  35. package/rules/design.md +13 -3
  36. package/rules/documentation.md +30 -71
  37. package/rules/engine.md +8 -1
  38. package/rules/ui.md +5 -1
  39. package/scripts/__pycache__/do-rank.cpython-313.pyc +0 -0
  40. package/scripts/browser-check.mjs +44 -103
  41. package/scripts/cc-events-proof.sh +13 -12
  42. package/scripts/chrome.mjs +381 -0
  43. package/scripts/do-analyze.sh +109 -4
  44. package/scripts/do-auto.sh +350 -43
  45. package/scripts/do-consumer-sweep.sh +72 -0
  46. package/scripts/do-derives-check.sh +88 -0
  47. package/scripts/do-fleet.sh +50 -1
  48. package/scripts/do-killswitch-audit.py +33 -14
  49. package/scripts/do-promise-lint.sh +150 -4
  50. package/scripts/do-promise-settle.sh +131 -9
  51. package/scripts/do-prove.sh +197 -17
  52. package/scripts/do-rank.py +606 -20
  53. package/scripts/do-rubric.py +21 -2
  54. package/scripts/do-signal.sh +157 -17
  55. package/scripts/do-smoke.sh +9 -0
  56. package/scripts/do-substrate-check.sh +49 -0
  57. package/scripts/do-tasks-wire-check.sh +81 -0
  58. package/scripts/do-tier.sh +90 -5
  59. package/scripts/do-ui-gate.sh +332 -0
  60. package/scripts/do-untracked-gate.sh +231 -0
  61. package/scripts/do-walk.sh +344 -0
  62. package/scripts/factory-check.sh +747 -0
  63. package/scripts/factory-repo.sh +1361 -0
  64. package/scripts/factory-tasks-check.sh +85 -0
  65. package/scripts/outcome-pull.ts +279 -0
  66. package/scripts/promise-manifest.mjs +167 -0
  67. package/scripts/reconcile-allow.txt +5 -0
  68. package/scripts/rubric-weights.json +64 -0
  69. package/scripts/spine-canary.sh +20 -0
  70. package/scripts/typedb-cluster-status.sh +128 -0
  71. package/scripts/typedb-env.sh +182 -0
  72. package/scripts/typedb-flap-recorder.sh +85 -0
  73. package/scripts/typedb-probes/containment-probe.py +88 -0
  74. package/scripts/typedb-probes/panic-probe-version.py +92 -0
  75. package/scripts/typedb-probes/panic-probe.py +77 -0
  76. package/scripts/typedb-scratch.sh +73 -0
  77. package/scripts/urls-lint.sh +58 -0
  78. package/scripts/w4-rubric.ts +96 -12
  79. package/scripts/wf-check.mjs +75 -0
  80. package/skills/ai-ui/SKILL.md +1 -1
  81. package/skills/astro/SKILL.md +177 -132
  82. package/skills/astro/add-content-collection.md +29 -13
  83. package/skills/astro/check-build.md +19 -13
  84. package/skills/astro/create-component.md +36 -9
  85. package/skills/astro/create-page.md +39 -10
  86. package/skills/astro/optimize-performance.md +36 -8
  87. package/skills/cli/SKILL.md +254 -220
  88. package/skills/dev/SKILL.md +1 -1
  89. package/skills/directory-autofill/SKILL.md +68 -0
  90. package/skills/docs/SKILL.md +4 -4
  91. package/skills/mcp/SKILL.md +186 -156
  92. package/skills/promise-make/SKILL.md +2 -2
  93. package/skills/puck/SKILL.md +465 -250
  94. package/skills/react19/SKILL.md +196 -296
  95. package/skills/reactflow/SKILL.md +387 -412
  96. package/skills/sdk/SKILL.md +167 -106
  97. package/skills/shadcn/SKILL.md +245 -201
  98. package/skills/signal/SKILL.md +5 -0
  99. package/skills/sui/SKILL.md +6 -1
  100. package/skills/tutorial/SKILL.md +15 -0
  101. package/skills/typedb/SKILL.md +427 -217
  102. package/skills/typedb/examples/python-patterns.py +11 -4
  103. package/skills/typedb/examples/query-patterns.tql +8 -3
  104. package/skills/typedb/examples/schema-patterns.tql +4 -2
  105. package/skills/typedb/reference/migration-2x-3x.md +19 -1
  106. package/skills/typedb/reference/python-driver.md +17 -1
  107. package/skills/voice/SKILL.md +117 -0
  108. package/skills/writer/SKILL.md +29 -12
  109. package/templates/template-feature.md +26 -1
  110. package/templates/template-tests.md +4 -0
  111. package/templates/template-todo.md +65 -10
@@ -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 emits the proof action to run.
4
- # Usage: do-prove.sh <changed-path>... | git diff --name-only | do-prove.sh
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
- if [ "$#" -gt 0 ]; then
9
- paths=("$@")
10
- else
11
- while IFS= read -r l; do [ -n "$l" ] && paths+=("$l"); done
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
- case "$surface" in
26
- frontend) proof="/browser (real Chrome: HTTP + JS/console errors + rail before/after + screenshot) + Lighthouse" ;;
27
- api) proof="contract test (vitest+msw) + curl per surface — route + SDK + MCP + CLI (four-surface rule)" ;;
28
- backend) proof="curl against the DEPLOYED runtime (local verify is necessary, not sufficient)" ;;
29
- substrate) proof="/sync reconcile (TypeDB↔KV↔D1↔SUI) + TypeQL returns the new shape + types compile downhill" ;;
30
- esac
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
- echo "surface: $surface"
33
- echo "proof: $proof"
34
- echo "PROVE: pass"; exit 0
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