Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
9a86b85
feat(ui): add connection status component
BunsDev Aug 29, 2026
cb17221
feat(ui): add command receipt component
BunsDev Aug 29, 2026
e8b8bb0
feat(ui): add developer surface block
BunsDev Aug 29, 2026
ba7d239
feat(ui): export developer surface components
BunsDev Aug 29, 2026
c6e9be8
test(ui): cover developer surface semantics
BunsDev Aug 29, 2026
d038f9a
feat(registry): add developer surface items
BunsDev Aug 29, 2026
1a970ec
feat(registry): compose developer surface fragment
BunsDev Aug 29, 2026
756ae8f
feat(specimens): add developer surface showcase
BunsDev Aug 29, 2026
24bf7bd
feat(specimens): route developer showcase
BunsDev Aug 29, 2026
7764b62
docs(ui): define SDK and CLI adapter boundary
BunsDev Aug 29, 2026
69b1e52
fix(specimens): use supported button density
BunsDev Aug 29, 2026
790b120
fix(deploy): build registry before specimen app
BunsDev Aug 29, 2026
268688b
test(ui): align accessibility assertion style
BunsDev Aug 29, 2026
d92d556
refactor(specimens): remove nonfunctional showcase actions
BunsDev Aug 29, 2026
85ece82
test(contracts): enforce developer integration boundary
BunsDev Aug 29, 2026
8745c28
test(registry): install developer surface in clean consumer
BunsDev Aug 29, 2026
16fd15f
test(specimens): capture developer surface receipts
BunsDev Aug 29, 2026
eaa83d3
test(specimens): review developer surface viewports
BunsDev Aug 29, 2026
6e0df63
chore(ci): remove brittle self-modifying visual workflow
BunsDev Aug 30, 2026
1155951
fix(specimens): carry shell regression guards into developer surface
BunsDev Aug 30, 2026
1a1a2ff
fix(specimens): preserve browser shortcuts across developer surfaces
BunsDev Aug 30, 2026
fa5ad22
style(specimens): format regression guards
BunsDev Aug 30, 2026
48dba4e
chore(ci): add one-shot developer surface formatter
BunsDev Aug 30, 2026
b243363
style(ui): format developer surface
github-actions[bot] Aug 30, 2026
79ece5b
chore(ci): remove one-shot developer formatter
BunsDev Aug 30, 2026
682abde
fix(specimens): constrain assembled tabs at mobile width
BunsDev Aug 30, 2026
44f084a
fix(specimens): constrain assembled tab panels on mobile
BunsDev Aug 30, 2026
36d298e
fix(specimens): make mobile assembled sizing border-box
BunsDev Aug 30, 2026
eec571d
fix(tabs): honor Base UI orientation contract
BunsDev Aug 30, 2026
62c7010
fix(registry): publish corrected tabs orientation
BunsDev Aug 30, 2026
6d1560c
test(tabs): lock Base UI orientation semantics
BunsDev Aug 30, 2026
b83c80a
test(specimens): add mobile quality receipts to developer stack
BunsDev Aug 30, 2026
2e89961
test(specimens): add mobile quality browser gate
BunsDev Aug 30, 2026
5f0aa11
sync(specimens): inherit mobile card composition
BunsDev Aug 30, 2026
9e1f857
sync(blocks): inherit mobile transcript contract
BunsDev Aug 30, 2026
695e34a
sync(blocks): inherit mobile session contract
BunsDev Aug 30, 2026
f489ca1
sync(registry): inherit responsive session description
BunsDev Aug 30, 2026
c5bb0cc
sync(registry): keep stable session metadata
BunsDev Aug 30, 2026
808d802
sync(registry): inherit responsive session header
BunsDev Aug 30, 2026
29141d1
sync(registry): inherit responsive transcript turn
BunsDev Aug 30, 2026
b124bf3
sync(tests): inherit mobile block contracts
BunsDev Aug 30, 2026
f470720
style(specimens): format mobile quality gate
BunsDev Aug 30, 2026
69a201d
fix(specimens): simplify mobile quality evaluation
BunsDev Aug 30, 2026
d596b2a
fix(ui): make connection state generic and accessible
BunsDev Aug 30, 2026
aabc00f
fix(ui): make invocation receipts evidence-safe
BunsDev Aug 30, 2026
77c4731
fix(ui): give developer surfaces stable accessible identity
BunsDev Aug 30, 2026
f3e8940
test(ui): cover developer surface identity and receipt semantics
BunsDev Aug 30, 2026
252e6c8
docs(specimens): use safe deterministic developer evidence
BunsDev Aug 30, 2026
82de99f
docs(ui): define safe developer adapter and receipt contracts
BunsDev Aug 30, 2026
b937ebf
docs(registry): publish safe developer surface metadata
BunsDev Aug 30, 2026
656bcdf
test(registry): detect untracked generated output
BunsDev Aug 30, 2026
1c47c00
test(registry): require committed generated routes
BunsDev Aug 30, 2026
4ea5e77
fix(registry): initialize cleanup timeout safely
BunsDev Aug 30, 2026
9116daf
test(contracts): enforce developer surface safety boundaries
BunsDev Aug 30, 2026
65371e9
test(specimens): prove developer surface viewport contracts
BunsDev Aug 30, 2026
804fc1d
chore(ci): harden complete specimen receipt workflow
BunsDev Aug 30, 2026
4e204a3
docs(specimens): document all reviewable receipt matrices
BunsDev Aug 30, 2026
fa78313
chore(stack): restack developer surface on reviewed receipts
BunsDev Aug 30, 2026
f9fb534
chore(ci): materialize PR 3 generated artifacts once
BunsDev Aug 30, 2026
79e8624
chore(registry): materialize developer surface artifacts
github-actions[bot] Aug 30, 2026
11e0ac3
chore(ci): remove one-shot registry materializer
BunsDev Aug 30, 2026
f39d737
chore(ci): finalize developer surface blockers once
BunsDev Aug 31, 2026
b740624
chore(ci): repair developer finalizer once
BunsDev Aug 31, 2026
920d5a5
chore: stage deterministic developer finalization
BunsDev Aug 31, 2026
bcbf10b
chore: reserve atomic developer fix tree
BunsDev Aug 31, 2026
44fee0b
chore: prepare developer source replacement
BunsDev Aug 31, 2026
34d233f
chore: stage final atomic developer update
BunsDev Aug 31, 2026
dce8a50
chore: hold atomic update
BunsDev Aug 31, 2026
c84127f
chore: begin atomic source update
BunsDev Aug 31, 2026
792e4bd
chore: mark transient staging files
BunsDev Aug 31, 2026
26dfb60
chore: transient staging marker
BunsDev Aug 31, 2026
61fe377
fix(types): resolve package root in workspace tests
BunsDev Aug 31, 2026
0a9b722
fix(specimens): apply persisted presentation state to all routes
BunsDev Aug 31, 2026
fe21d1c
fix(developer): make showcase reflow at text zoom
BunsDev Aug 31, 2026
009e9c6
fix(developer): harden assembled surface reflow
BunsDev Aug 31, 2026
f92bcdb
fix(developer): let connection evidence wrap safely
BunsDev Aug 31, 2026
c31bd27
fix(developer): keep command evidence within narrow surfaces
BunsDev Aug 31, 2026
78068b4
chore: stage helper cleanup
BunsDev Aug 31, 2026
0e6e07a
chore(ci): verify and clean developer source fixes once
BunsDev Aug 31, 2026
1b17f4c
chore(ci): finalize developer source fixes without stale helpers
BunsDev Aug 31, 2026
7d1fb51
chore: reserve clean tree update
BunsDev Aug 31, 2026
12168bd
chore: temporary
BunsDev Aug 31, 2026
b1e7cc7
chore: temporary marker before cleanup
BunsDev Aug 31, 2026
08afb8d
chore: accidental staging marker
BunsDev Aug 31, 2026
3c431bc
chore: stop marker
BunsDev Aug 31, 2026
abfe59e
chore: cleanup marker
BunsDev Aug 31, 2026
4a12a04
noop
BunsDev Aug 31, 2026
fc006af
chore(ci): remove transient blocker workflows and staging files
BunsDev Aug 31, 2026
9acac61
chore(ci): format developer connection surface once
BunsDev Aug 31, 2026
ed1f1cc
test(contracts): normalize prose whitespace before assertions
BunsDev Aug 31, 2026
8f14f2d
style(developer): apply repository formatter
github-actions[bot] Aug 31, 2026
713e305
chore(ci): verify finalized developer surface
BunsDev Aug 31, 2026
c8ba732
chore(ci): add one-shot PR 3 stack repair
BunsDev Aug 31, 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
177 changes: 177 additions & 0 deletions .github/workflows/repair-pr3-stack-20260831.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
name: Repair PR 3 stack

on:
push:
branches:
- feat/developer-surface-system

permissions:
contents: write

concurrency:
group: repair-pr3-stack
cancel-in-progress: false

jobs:
repair:
if: github.actor != 'github-actions[bot]'
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Check out feature branch
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
with:
ref: feat/developer-surface-system
fetch-depth: 0

- name: Set up pnpm
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.17.1

- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 24
cache: pnpm

- name: Set up Chrome for Testing
id: chrome
uses: browser-actions/setup-chrome@2e1d749697dd1612b833dba4a722266286fbefcd # v2.1.2
with:
chrome-version: stable

- name: Rebuild PR 3 from the verified PR 2 tree
env:
CHROME_PATH: ${{ steps.chrome.outputs.chrome-path }}
run: |
set -euo pipefail

git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git fetch origin feat/developer-surface-system test/specimen-visual-review

old_head="$(git rev-parse origin/feat/developer-surface-system)"

# PR 2 removes its one-shot repair workflow only after full CI and the
# browser/mobile matrix pass. Wait for that proven head rather than
# racing a partially repaired stack.
base_head=""
for _ in $(seq 1 180); do
git fetch origin test/specimen-visual-review
candidate="$(git rev-parse origin/test/specimen-visual-review)"
if ! git cat-file -e "$candidate:.github/workflows/repair-pr2-stack-20260831.yml" 2>/dev/null; then
base_head="$candidate"
break
fi
sleep 5
done

if [[ -z "$base_head" ]]; then
echo "Timed out waiting for PR 2's verified repair head." >&2
exit 1
fi

git checkout --detach "$base_head"

preserve=(
.github/workflows/visual-review.yml
apps/specimens/src/developer-showcase.tsx
apps/specimens/src/main.tsx
docs/developer-surface.md
package.json
packages/ui/src/blocks/developer-surface.tsx
packages/ui/src/components/command-receipt.tsx
packages/ui/src/components/connection-status.tsx
packages/ui/src/components/ui/tabs.tsx
packages/ui/src/index.ts
packages/ui/tests/developer-surface.test.tsx
packages/ui/tests/tabs.test.tsx
registry/developer/registry.fragment.json
scripts/check-registry-clean.mjs
scripts/compose-registry.mjs
scripts/developer-visual-review.mjs
scripts/test-registry-consumer.mjs
scripts/verify-contracts.mjs
vercel.json
)

for path in "${preserve[@]}"; do
mkdir -p "$(dirname "$path")"
git show "$old_head:$path" > "$path"
done

rm -f .github/workflows/repair-pr3-stack-20260831.yml
rm -f .github/workflows/refine-visual-clipping-check.yml

# Preserve all developer-surface contracts while importing the final
# intrinsic-grid regression guard from the verified shell base.
python - <<'PY'
from pathlib import Path

path = Path("scripts/verify-contracts.mjs")
text = path.read_text()
marker = ''' [
"specimen chrome avoids decorative gradients",
!specimenCss.includes("gradient("),
],'''
assertion = ''' [
"responsive grids allow intrinsic shrinking",
specimenFixes.includes(
".specimen-shell {\\n grid-template-columns: minmax(0, 1fr);",
) &&
specimenFixes.includes(
".catalog-group__grid {\\n grid-template-columns: minmax(0, 1fr);",
),
],
'''
if "responsive grids allow intrinsic shrinking" not in text:
if marker not in text:
raise SystemExit("Could not locate contract insertion point")
text = text.replace(marker, assertion + marker, 1)
path.write_text(text)
PY

pnpm install --frozen-lockfile
pnpm registry:build
pnpm exec prettier --write \
"${preserve[@]}" \
registry.json \
'public/r/*.json'

git add -A
tree="$(git write-tree)"
merge_commit="$(printf '%s\n' 'chore(stack): rebuild developer surface on verified visual base' | git commit-tree "$tree" -p "$old_head" -p "$base_head")"

git checkout --detach "$merge_commit"
pnpm check

rm -rf artifacts/visual-review artifacts/mobile-quality
mkdir -p artifacts/visual-review artifacts/mobile-quality
preview_log="$RUNNER_TEMP/specimens-preview.log"
pnpm --filter @opencoven/specimens preview --host 127.0.0.1 --port 4173 >"$preview_log" 2>&1 &
preview_pid=$!
cleanup() {
kill "$preview_pid" 2>/dev/null || true
wait "$preview_pid" 2>/dev/null || true
}
trap cleanup EXIT

ready=false
for _ in $(seq 1 120); do
if curl --fail --silent http://127.0.0.1:4173/ >/dev/null; then
ready=true
break
fi
sleep 0.1
done
if [[ "$ready" != "true" ]]; then
cat "$preview_log"
exit 1
fi

node scripts/visual-review.mjs
node scripts/developer-visual-review.mjs
node scripts/mobile-quality-review.mjs

git push origin "$merge_commit":refs/heads/feat/developer-surface-system
15 changes: 10 additions & 5 deletions .github/workflows/visual-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ on:
- ".github/workflows/visual-review.yml"
- "apps/specimens/**"
- "packages/ui/**"
- "registry/**"
- "scripts/compose-registry.mjs"
- "scripts/visual-review.mjs"
- "scripts/developer-visual-review.mjs"
- "scripts/mobile-quality-review.mjs"
workflow_dispatch:

Expand All @@ -21,7 +24,7 @@ jobs:
specimens:
name: Specimen browser
runs-on: ubuntu-latest
timeout-minutes: 20
timeout-minutes: 25

steps:
- name: Check out repository
Expand All @@ -43,8 +46,8 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build package and specimen app
run: pnpm build
- name: Build registry, package, and specimen app
run: pnpm registry:build && pnpm build

- name: Set up Chrome for Testing
id: chrome
Expand Down Expand Up @@ -89,14 +92,16 @@ jobs:

set +e
node scripts/visual-review.mjs
visual_status=$?
browser_status=$?
node scripts/developer-visual-review.mjs
developer_status=$?
node scripts/mobile-quality-review.mjs
mobile_status=$?
set -e

cp "$preview_log" artifacts/visual-review/preview.log

if [[ "$visual_status" -ne 0 || "$mobile_status" -ne 0 ]]; then
if [[ "$browser_status" -ne 0 || "$developer_status" -ne 0 || "$mobile_status" -ne 0 ]]; then
exit 1
fi

Expand Down
Loading
Loading