Skip to content
Merged

Next #69

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
d121c6b
Clean slate: remove AI bloat, add canonical OpenSpec specs
codecaaron Mar 20, 2026
cbd8b80
Bun and Dun
codecaaron Mar 20, 2026
35669d6
Arc 2
codecaaron Mar 21, 2026
c831ec9
save
codecaaron Mar 22, 2026
4843138
Arc 3 Checkpoint
codecaaron Mar 22, 2026
198d098
Pre Red Team Arc 4
codecaaron Mar 22, 2026
760452b
Post arc 5
codecaaron Mar 22, 2026
89c56a2
New plans
codecaaron Mar 22, 2026
6eac161
Pre Theme
codecaaron Mar 23, 2026
c460ba6
Pre HMR
codecaaron Mar 23, 2026
62ca299
HMR Transactions
codecaaron Mar 23, 2026
7366385
System
codecaaron Mar 23, 2026
2815e74
save
codecaaron Mar 23, 2026
6f4567c
post system fixes
codecaaron Mar 24, 2026
a07be63
Sigh
codecaaron Mar 24, 2026
b5725da
Save
codecaaron Mar 24, 2026
bc8554d
Bindings yo
codecaaron Mar 24, 2026
3f1125d
Split yo
codecaaron Mar 25, 2026
764d18b
Sync Specs
codecaaron Mar 25, 2026
300d1d4
Clean up root
codecaaron Mar 25, 2026
27915c8
Test release
codecaaron Mar 25, 2026
504902a
Build
codecaaron Mar 25, 2026
246be71
NAPI
codecaaron Mar 25, 2026
1802979
Correct build scritp
codecaaron Mar 25, 2026
be5e73c
Fix
codecaaron Mar 25, 2026
41dfc3a
Save
codecaaron Mar 25, 2026
b704ba1
Npm publish
codecaaron Mar 25, 2026
00b0c7b
Npm auth
codecaaron Mar 25, 2026
8502b5c
Updates
codecaaron Mar 25, 2026
0462055
More CI fixes
codecaaron Mar 25, 2026
81cb2dd
Save
codecaaron Mar 26, 2026
fcf1d9c
Clean up naming and stuff
codecaaron Mar 26, 2026
d76da9f
Runtime bundle savings
codecaaron Mar 26, 2026
abc1951
Unresolved values + Props
codecaaron Mar 26, 2026
5bb3a8b
.props()
codecaaron Mar 27, 2026
beee24f
Lint
codecaaron Mar 27, 2026
952108f
lightning CSS
codecaaron Mar 27, 2026
eea0fec
Reconfig Contract
codecaaron Mar 27, 2026
e0b0a8d
Theme manifest
codecaaron Mar 27, 2026
d88b46f
Typesystem
codecaaron Mar 27, 2026
f63cc80
Compound Variant API
codecaaron Mar 27, 2026
9bb847e
archive
codecaaron Mar 27, 2026
9652076
Lint ohmy god
codecaaron Mar 27, 2026
303c294
Remove Core Dep
codecaaron Mar 27, 2026
92e558a
Deps
codecaaron Mar 27, 2026
caf287c
Negative Scales
codecaaron Mar 27, 2026
d60b9f2
Checkpoint
codecaaron Mar 27, 2026
3c19ae0
More
codecaaron Mar 28, 2026
14a42d5
Compose tests
codecaaron Mar 28, 2026
9940b7a
Saving
codecaaron Mar 28, 2026
331139b
More modes
codecaaron Mar 28, 2026
e64f85e
Theme Structure
codecaaron Mar 29, 2026
04c9b92
Contextual variables
codecaaron Mar 29, 2026
089cf5f
Contextual Vars
codecaaron Mar 29, 2026
4526086
Strict toggle
codecaaron Mar 29, 2026
fffda11
Fun times
codecaaron Mar 29, 2026
92e73db
Linting
codecaaron Mar 29, 2026
379780c
API Design Review
codecaaron Mar 29, 2026
07832aa
flatten-system-builder
codecaaron Mar 29, 2026
1dc72a4
Enforce disjoint group/prop namespace at type level + runtime
codecaaron Mar 29, 2026
d471196
Archive flatten-system-builder + separate-global-styles, sync global-…
codecaaron Mar 29, 2026
1da75fe
Archive 7 completed changes, sync delta specs to main specs
codecaaron Mar 29, 2026
4df0971
Remove erroneous artifacts
codecaaron Mar 29, 2026
1dd35bf
Close out nested-selector-type-regression + dx-review-fixes, archive …
codecaaron Mar 29, 2026
3addb2d
Consolidate stale proposals: archive 4, repropose 3 fresh
codecaaron Mar 29, 2026
6546f35
Test infrastructure cleanup: sever core dependency, inline snapshots,…
codecaaron Mar 30, 2026
73fa4b3
Testing Strategy Redux
codecaaron Mar 30, 2026
652126b
Fix Verify
codecaaron Mar 30, 2026
b031a33
Testing Rel
codecaaron Mar 30, 2026
18dbc74
Save
codecaaron Mar 30, 2026
e899e30
Save
codecaaron Mar 31, 2026
6f5957d
Next Plugin
codecaaron Mar 31, 2026
14aaba2
Next working
codecaaron Mar 31, 2026
2219b3c
External modules
codecaaron Mar 31, 2026
e091550
Refactor key lookup . only
codecaaron Mar 31, 2026
4329137
Finalize theme composition
codecaaron Mar 31, 2026
a36a123
Dworkin' Yo
codecaaron Mar 31, 2026
a4a59e3
Save
codecaaron Mar 31, 2026
7fdb73a
Fix externals
codecaaron Mar 31, 2026
ffcefde
Lint
codecaaron Mar 31, 2026
eb6a795
Validate
codecaaron Apr 1, 2026
a7a7fe1
valiudate
codecaaron Apr 1, 2026
982a25d
Biome
codecaaron Apr 1, 2026
ff56ed2
Biggo
codecaaron Apr 1, 2026
d4e39f0
Type cleanup
codecaaron Apr 1, 2026
1703a09
FAQ
codecaaron Apr 2, 2026
8b675f7
Shared properties sub deb
codecaaron Apr 2, 2026
266a722
Closer
codecaaron Apr 3, 2026
08d37b1
Release Script for RC
codecaaron Apr 3, 2026
83c9880
README.md
codecaaron Apr 3, 2026
7f39d79
Docs rewrite: 18-page reorg + dynamic routing from nav config
codecaaron Apr 4, 2026
77fad09
Docs ReWrite
codecaaron Apr 4, 2026
8ab8399
Home again
codecaaron Apr 4, 2026
150ae61
Remove unused
codecaaron Apr 4, 2026
78ca0b3
Selector Alias
codecaaron Apr 6, 2026
ed568be
Werk
codecaaron Apr 6, 2026
86a78b7
asChild + compose yo
codecaaron Apr 6, 2026
fc35eeb
Fixes
codecaaron Apr 7, 2026
2e199f4
Nav Stuff
codecaaron Apr 7, 2026
83e0d5a
HMR New File
codecaaron Apr 7, 2026
7af8072
Gaps
codecaaron Apr 8, 2026
950812d
Showcase
codecaaron Apr 8, 2026
8198ec1
Multi layer
codecaaron Apr 9, 2026
40a8a8a
Docs Yo
codecaaron Apr 9, 2026
5302605
save
codecaaron Apr 9, 2026
1f5710b
Save
codecaaron Apr 9, 2026
ec7f3f3
Layer PRefix
codecaaron Apr 9, 2026
4b8ff38
Docs
codecaaron Apr 9, 2026
735a529
Auto Prefix
codecaaron Apr 9, 2026
030b82e
Save
codecaaron Apr 9, 2026
b7685b7
Fix
codecaaron Apr 9, 2026
53f73b5
Reset on build start
codecaaron Apr 9, 2026
02d52a8
Reset on build start
codecaaron Apr 9, 2026
7984e55
Improve Transform Perf
codecaaron Apr 10, 2026
4fb6607
Typings
codecaaron Apr 10, 2026
ff7a8d4
Save
codecaaron Apr 11, 2026
be7f188
Parallelize
codecaaron Apr 11, 2026
7d09d11
Measurements
codecaaron Apr 11, 2026
7a89291
pipeline
codecaaron Apr 11, 2026
313ea94
Perf Turf
codecaaron Apr 11, 2026
1cb67f2
Pappy
codecaaron Apr 11, 2026
f54eaf7
Release
codecaaron Apr 12, 2026
58e4dad
fix tests
codecaaron Apr 12, 2026
0c6b991
Sigh
codecaaron Apr 12, 2026
e347c8f
Cool
codecaaron Apr 12, 2026
7210f5a
sigh
codecaaron Apr 12, 2026
a0233f3
Gotchya bitch
codecaaron Apr 12, 2026
6bc652e
Maybe?
codecaaron Apr 12, 2026
60a8926
Direct resolution
codecaaron Apr 12, 2026
f8f9d4e
Fix
codecaaron Apr 13, 2026
30cb517
Aliased JSX usage
codecaaron Apr 13, 2026
f406f1c
Push to CI
codecaaron Apr 13, 2026
ad1c3ed
Fix CI
codecaaron Apr 13, 2026
5567d5b
fix
codecaaron Apr 13, 2026
aa39d12
next
codecaaron Apr 14, 2026
db2a47f
Split legacy
codecaaron Apr 14, 2026
e37403e
Save
codecaaron Apr 15, 2026
a6a3627
Freebase
codecaaron Apr 15, 2026
e9b2fa0
Test Infra
codecaaron Apr 15, 2026
6ac7c4c
Remove tmp
codecaaron Apr 16, 2026
26cf41c
KeYfRaMeS
codecaaron Apr 16, 2026
4708cb1
keyframes
codecaaron Apr 18, 2026
b78447d
Assertins
codecaaron Apr 18, 2026
0ff2c3e
Specs
codecaaron Apr 18, 2026
d91223f
Fix refs
codecaaron Apr 20, 2026
6223f78
fix inconsistency
codecaaron Apr 21, 2026
1996d05
MDX Fix
codecaaron Apr 21, 2026
9a55af6
Clean up
codecaaron Apr 21, 2026
48a41f6
Fallow
codecaaron Apr 23, 2026
e0c431a
Hygiene
codecaaron Apr 23, 2026
4135ceb
Checkpoint
codecaaron Apr 24, 2026
bba8361
Hygiene test
codecaaron Apr 24, 2026
15de2f7
finalize loop
codecaaron Apr 24, 2026
b583f19
Cycle
codecaaron Apr 26, 2026
8b975ba
Hygiene
codecaaron Apr 27, 2026
15a3edb
Fix verdict bug: clean trailing iterations are convergence, not diver…
codecaaron Apr 27, 2026
da89d1d
biome: ignore .hygiene/ audit-trail directory
codecaaron Apr 27, 2026
c653b6e
hygiene tasks: mark validation tasks complete with end-to-end run notes
codecaaron Apr 27, 2026
9e93680
hygiene: guard empty WORKSPACE_DIRS expansion under set -u
codecaaron Apr 27, 2026
78bc459
knip: ignore hygiene wrapper TS files invoked from bash
codecaaron Apr 27, 2026
9fc907b
hygiene tasks: mark S8.5 verified with real-run discovery notes
codecaaron Apr 27, 2026
6848523
hygiene: stop emitting false-positive receipts for optionalPeerDepend…
codecaaron Apr 27, 2026
9c5f546
Save
codecaaron Apr 27, 2026
ef8d897
hygiene: fix D1 binding-pattern blind spot in getExportsOfFile
codecaaron Apr 27, 2026
b0f7162
Archive refine-code-hygiene-dx (2026-04-27)
codecaaron Apr 27, 2026
5fbe9dc
Pre ts 7
codecaaron Apr 29, 2026
fbf1a06
6.0
codecaaron Apr 29, 2026
8f29795
lets friggin TSGO
codecaaron Apr 30, 2026
dd6756d
Fixes
codecaaron Apr 30, 2026
8203085
Migrate
codecaaron May 1, 2026
981cb2a
V for version
codecaaron May 1, 2026
e5653d2
oxlint oxfmt
codecaaron May 1, 2026
510a664
Fix
codecaaron May 1, 2026
a83a9bf
Save
codecaaron May 5, 2026
d55a0b0
ok
codecaaron May 5, 2026
aa0cce7
okie
codecaaron May 5, 2026
6241f64
depends
codecaaron May 5, 2026
fd548cb
boom
codecaaron May 5, 2026
64af5f8
FMT
codecaaron May 5, 2026
8eb9d05
Save yo
codecaaron May 5, 2026
8155805
ox
codecaaron May 6, 2026
442821b
More split
codecaaron May 7, 2026
b94a102
save
codecaaron May 7, 2026
2ed3dad
finalize
codecaaron May 7, 2026
f368e54
Save
codecaaron May 7, 2026
4aa41b7
FMT
codecaaron May 7, 2026
ec79e1d
vitest
codecaaron May 8, 2026
c6d2d70
ty
codecaaron May 8, 2026
6c7475b
Down
codecaaron May 11, 2026
fa1302d
done
codecaaron May 11, 2026
31ae862
remove pkg
codecaaron May 11, 2026
9bedb03
Great
codecaaron May 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
309 changes: 309 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,309 @@
name: CI

on:
push:
branches: [main, next]
tags:
- 'v*'
pull_request:
branches: [main, next]
workflow_dispatch:

jobs:
# ─── Fast lint (parallel with build-extract) ──────────
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: .tool-versions

- uses: oven-sh/setup-bun@v2
with:
bun-version-file: .tool-versions

- run: bun install

- name: Lint
run: bunx vp run verify:lint

- name: NAPI loading contract check
run: |
if grep -rn "require('@animus-ui/extract')" packages/_integration/__tests__/; then
echo "ERROR: require('@animus-ui/extract') in _integration tests violates the NAPI loading contract."
echo "Use require('../../extract/index.js') instead. See packages/_integration/CLAUDE.md."
exit 1
fi

# ─── Rust unit tests (debug profile, no NAPI binary) ─────
test-rust:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: packages/extract

- name: Rust unit tests
working-directory: packages/extract
run: cargo test --lib

# ─── Rust dependency hygiene (parallel with test-rust) ───
hygiene-rust:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: packages/extract

- name: Install cargo-machete
uses: taiki-e/install-action@v2
with:
tool: cargo-machete@0.9.2

- name: Rust dependency hygiene
working-directory: packages/extract
run: cargo machete

# ─── Rust NAPI build matrix (release profile, no tests) ──
build-extract:
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-apple-darwin
runner: macos-14
- target: x86_64-unknown-linux-gnu
runner: ubuntu-latest
- target: aarch64-unknown-linux-gnu
runner: ubuntu-24.04-arm
optional: true
runs-on: ${{ matrix.runner }}
continue-on-error: ${{ matrix.optional || false }}
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: packages/extract

- uses: oven-sh/setup-bun@v2
with:
bun-version-file: .tool-versions

- run: bun install

- name: Build NAPI binary
working-directory: packages/extract
run: |
bunx @napi-rs/cli build --platform --release --target ${{ matrix.target }}

- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: napi-${{ matrix.target }}
path: packages/extract/*.node
if-no-files-found: error

# ─── Full pipeline verification ─────────────────────────
verify:
needs: [build-extract, test-rust]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version-file: .tool-versions

- uses: oven-sh/setup-bun@v2
with:
bun-version-file: .tool-versions

- name: Download linux binary
uses: actions/download-artifact@v4
with:
name: napi-x86_64-unknown-linux-gnu
path: packages/extract/

- run: bun install

- name: Verify NAPI binary (repo root context)
run: |
ls -la packages/extract/*.node
bun -e "const m = require('./packages/extract/index.js'); console.log('NAPI exports:', Object.keys(m));"

- name: Verify NAPI binary (_integration context)
working-directory: packages/_integration/__tests__
run: |
bun -e "const m = require('../../extract/index.js'); if (typeof m.analyzeProject !== 'function') { throw new Error('analyzeProject not a function — NAPI loading contract violated'); } console.log('OK: analyzeProject is a function from _integration context');"

- name: Build TS
run: bunx vp run build:ts

- name: Compile
run: bunx vp run verify:compile

- name: Type Contract Tests
run: bunx vp run verify:types

- name: Unit Tests (TS)
run: bunx vp run verify:unit:ts

- name: Canary Tests
run: bunx vp run verify:canary

- name: Integration Tests
run: bunx vp run verify:integration

- name: Showcase Build + Assert
run: bunx vp run verify:showcase

# ─── Release (tag push or manual dispatch only) ─────────
release:
needs: verify
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
steps:
- uses: actions/checkout@v4

- uses: oven-sh/setup-bun@v2
with:
bun-version-file: .tool-versions

- uses: actions/setup-node@v4
with:
node-version-file: .tool-versions
registry-url: 'https://registry.npmjs.org'
scope: 'animus-ui'
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}

- run: bun install

- name: Verify npm auth
run: npm whoami

# ── Parse version from tag ──
- name: Set version from tag
id: version
run: |
if [[ "$GITHUB_REF" == refs/tags/v* ]]; then
VERSION="${GITHUB_REF#refs/tags/v}"
else
VERSION="0.0.0-dev.$(date +%s)"
fi
if [[ "$VERSION" == *-* ]]; then
TAG="next"
else
TAG="latest"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "Publishing version: $VERSION (tag: $TAG)"

# ── Set version in all packages ──
- name: Bump versions and resolve workspace deps
run: |
VERSION="${{ steps.version.outputs.version }}"
for pkg in properties system extract vite-plugin next-plugin; do
jq --arg v "$VERSION" '
.version = $v |
if .dependencies then .dependencies |= with_entries(if .value == "workspace:*" then .value = $v else . end) else . end |
if .optionalDependencies then .optionalDependencies |= with_entries(if (.value | test("^[0-9]")) then .value = $v else . end) else . end
' packages/$pkg/package.json > tmp.json && mv tmp.json packages/$pkg/package.json
echo "$pkg → $VERSION"
done

# ── Build TS packages ──
- name: Build
run: bunx vp run build:ts

# ── Download all NAPI binaries ──
- name: Download darwin-arm64 binary
uses: actions/download-artifact@v4
with:
name: napi-aarch64-apple-darwin
path: packages/extract/

- name: Download linux-x64 binary
uses: actions/download-artifact@v4
with:
name: napi-x86_64-unknown-linux-gnu
path: packages/extract/

- name: Download linux-arm64 binary
uses: actions/download-artifact@v4
with:
name: napi-aarch64-unknown-linux-gnu
path: packages/extract/
continue-on-error: true

# ── Generate NAPI platform packages ──
- name: Generate platform packages
working-directory: packages/extract
run: |
VERSION="${{ steps.version.outputs.version }}"
generate_pkg() {
local platform=$1 os=$2 cpu=$3
local binary="animus-extract.${platform}.node"
local pkg_dir="npm/${platform}"
mkdir -p "$pkg_dir"
if [ -f "$binary" ]; then
cp "$binary" "$pkg_dir/"
printf '{"name":"@animus-ui/extract-%s","version":"%s","os":["%s"],"cpu":["%s"],"main":"%s","files":["%s"],"license":"MIT","publishConfig":{"access":"public"}}\n' \
"$platform" "$VERSION" "$os" "$cpu" "$binary" "$binary" \
> "$pkg_dir/package.json"
echo "Created $pkg_dir ($binary)"
else
echo "WARNING: $binary not found, skipping $platform"
fi
}
generate_pkg "darwin-arm64" "darwin" "arm64"
generate_pkg "linux-x64-gnu" "linux" "x64"
generate_pkg "linux-arm64-gnu" "linux" "arm64"
ls -la npm/*/

# ── Publish NAPI packages ──
- name: Publish platform packages
working-directory: packages/extract
run: |
NPM_TAG="${{ steps.version.outputs.tag }}"
for dir in npm/*/; do
if [ -d "$dir" ] && ls "$dir"/*.node 1>/dev/null 2>&1; then
echo "Publishing $dir"
cd "$dir"
npm publish --access public --tag "$NPM_TAG"
cd ../..
fi
done

- name: Publish @animus-ui/extract
working-directory: packages/extract
run: |
NPM_TAG="${{ steps.version.outputs.tag }}"
npm publish --access public --tag "$NPM_TAG" --ignore-scripts

# ── Publish TS packages in dependency order ──
- name: Publish TS packages
run: |
NPM_TAG="${{ steps.version.outputs.tag }}"
for pkg in properties system vite-plugin next-plugin; do
echo "Publishing @animus-ui/$pkg"
cd packages/$pkg
npm publish --access public --tag "$NPM_TAG"
cd ../..
done
42 changes: 0 additions & 42 deletions .github/workflows/publish-alpha.yaml

This file was deleted.

43 changes: 0 additions & 43 deletions .github/workflows/publish-beta.yaml

This file was deleted.

Loading
Loading