Commit Graph

546 Commits

Author SHA1 Message Date
Christopher Monsanto
8bf512480a Replace the .env deploy command with deploy.json5
An untracked json5 config maps deploy names to a buildFile plus
(subset globs, cmd) entries: the deploy verb builds the named
buildFiles, finishes each, routes the outputs through the subset
globs, and pipes one tar per entry to its command. Every glob must
match an output and every output must be covered by some entry.

The tar no longer carries __key; the upload command names the asset
set itself (smogonctl assets upload sprites).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:13 -04:00
Christopher Monsanto
a3f4dada09 Rename the deploy modules to *.build.ts
They are the buildFiles the upcoming deploy config points at; "deploy"
now belongs to the config entries that ship their outputs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:13 -04:00
Christopher Monsanto
bc39c94851 Fix review findings in the content-addressed core
- casInsert verifies an existing object's bytes before trusting it, fsyncs
  before the rename, and the store records object sizes so a crash-truncated
  object reads as dirty instead of clean forever.
- The driver hashes sources over the producer closure, so partial builds
  (inspect) that pull in producers outside the demanded set work.
- Unknown executor errors are reported and abort the build instead of
  vanishing into allSettled.
- %b/%B expand to nominal names at declaration (never CAS basenames), which
  also puts name-dependence in the identity key; cmds are key-joined with
  NUL so a multi-line command cannot collide with split commands. This
  churns every rule key once.
- Rules must declare at least one output; output names reject shell-hostile
  characters.
- run --link copies read-only (CAS) sources instead of hardlinking 0444
  modes into deploy trees; ctx.list filters dotfiles and directories like
  the build-side glob; inspect resolves targets against the invoking cwd.
- The registry dedupes identical declarations (same cmds/inputs/deps/
  outputs/display), returning the existing artifacts, so shared rule sets
  are plain functions and memo() is gone; ps.deploy.ts no longer declares
  the gen5 gif set it never ships.
- rule() returns a tuple typed by its literal output list (single string
  output returns the Artifact directly), so destructuring needs no
  non-null assertions.
- Manifest is a class carrying the deploy ctx: set() rejects duplicate
  keys, write(dst) emits the sorted JSON, and spritecopy/itemspritecopy/
  stampcopy take just the manifest. The unstamped smogon sets (xyitems,
  fbsprites, twittersprites) are deprecated and commented out.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
f6e0b189f3 Cut over to content-addressed deploys
pnpm build/deploy now run the umbrella CLI (build/deploy/run/inspect); the
fixed-name build/ tree, the old planner (rename detection, adopt, tamper
checks), and the vm deploy sandbox are gone. Also lands tools/deploy/api.ts
and the CLI, which earlier commits referenced but an overbroad local
gitignore pattern had silently excluded.

Migration: the store migrates the v1 db in place; build/ is dead and can be
deleted. A full rebuild repopulated .build/cas, and the old and new deploy
trees were diffed: byte-identical except the two multi-file hash pointers
(algorithm change), fb/twitter PNG re-encodes (pixel-identical; old outputs
predated current tool versions), and a stale 2023 orphan sprite the old
system never cleaned up.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
499651b3f8 Strip PNG date chunks from magick outputs
date:create/date:modify tEXt chunks made rebuilds nondeterministic, which
would churn every content-addressed name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
460da484a1 Port the Buildfile and deploy scripts to co-located deploy modules
rules/ holds the shared sets (memoized) and the publish helpers that were
duplicated across the vm scripts; assets/smogon/ps .deploy.ts each declare
their rules and finish. The smogdex sheet is split into two chained rules,
retiring the undeclared spritesheet.png temp.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
feb3166bbb Add the deploy finish API and umbrella CLI
makeCtx serves finish over the CAS and ActionQueue; cli.ts adds the
build/deploy/run/inspect verbs (unwired until cutover). Copy-mode
materialization chmods CAS-sourced files back to 0644.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
6ba5c04b5e Add the demand-driven executor and build driver
Keys resolve after producers finish, so there is no upfront plan; identical
keys share one execution, failures block dependents, and GC (union builds
only) drops undeclared keys then sweeps the CAS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
58089f0231 Extract DSL helpers; add the content-addressed rule model
helpers.ts is a pure move out of api.ts; artifact.ts introduces
Artifact-returning rule()/forEachRule() with execution-time content keys.
The old api.ts machinery still powers Buildfile.ts until cutover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:12 -04:00
Christopher Monsanto
4ec5574c34 Add the v2 rule store keyed by content identity
Keeps the v1 file_cache on migration; failures are never recorded, so
failed and never-ran are the same state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
71ecd991ba Add the content-addressed store (cas.ts)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
d075d27885 Move BuildError to errors.ts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
11282e1002 Add indexed %oN output substitution
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
a132276e78 Retire the wrappers superseded by pnpm deploy
updatepmdsprites.sh is gone entirely; updateminisprites.sh loses its
spritesheet/forumsprites/dex-suffix steps and becomes updatexyicons.sh.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
dd2396719d Add pnpm deploy: pipe the assets tar to DEPLOY_COMMAND from .env
The deploy tool grows a deploy subcommand that runs the build, packs the
tar, and streams it to the command .env names. Packing now finalizes the
archive; without the end-of-archive marker, strict stream readers
(Python tarfile, hence smogonctl) die on truncation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
41119f63a3 Split the hashed asset sets into assets.deploy.js
spritesheet, minisprites, pmd, and forumsprites now ship as a tar to the
__assets tree: __key leads the tar, and the mutable pointer files
(manifests, css suffix, minisprites hash) ride in __meta/ instead of
being published as immortal assets. xy and xyicons stay in
smogon.deploy.js on the rsync path for now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:11 -04:00
Christopher Monsanto
997668ec2e Build dex spritesheet assets in the deploy script
Replaces the esbuild invocation that ran out of the smogon.com checkout:
the deploy script now stamps the webp, rewrites the css urls, and writes
the hashed css plus the suffix file that updateminisprites.sh ships to
/smog2/dex/spritesheet_css_suffix.txt. updateminisprites.sh no longer
depends on ~/smogon/smogon.com/run, esbuild, python, or zopfli/brotli
(css precompression dropped; to be handled separately). Minification is
also dropped (machine-generated css, ~same size compressed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:10 -04:00
Christopher Monsanto
f772bf1357 Hash-stamp the pmd set
Same scheme as the other sets; pmd/manifest.json rides the
updatepmdsprites.sh rsync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:10 -04:00
Christopher Monsanto
b6e70c2c41 Hash-stamp the xy dex animations set
Same scheme as forumsprites/xyicons; xy/manifest.json rides the
syncdexani.sh rsync.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:10 -04:00
Christopher Monsanto
db0f5bbd7a Hash-stamp forumsprites and xyicons, write url manifests
Deployed names become <alias>-<HASH>.png (sha256/base32/8, same format as
the existing minisprites dir hash) with a manifest.json per set mapping
the unhashed name to the hashed one, riding the existing rsyncs. Other
deploy sections are unchanged; alias collisions now error via the
manifest-key check since hashed destinations no longer collide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 01:13:10 -04:00
Marty
56f2e8680d Update PS Pokemon spritesheet 2026-08-16 19:32:35 -04:00
Marty
6c5874c197 Update minisprites 2026-08-16 19:25:20 -04:00
Christopher Monsanto
2d1dd3a119 Replace build.sh with pnpm build; type-check is now pnpm check
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:47:10 -04:00
Christopher Monsanto
44fb49a96f Refresh stored rule template/display when their computed form drifts
They are outside the rule key, so a format change (like the one in the
previous commit) silently disabled rename detection for existing records.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:34:11 -04:00
Christopher Monsanto
2d83f4a16f Fix review findings in tools/build
- Verify rename sources against recorded stats at copy time; colliding
  rename destinations/sources fall back to running the rule
- Restrict rename detection to single-input, no-deps rules (sheet-style
  rules embed input names in output bytes)
- Include input extensions in the rename template (magick picks output
  format from extensions)
- Adopt only rules with no stored record, never known-dirty ones
- Skip dotfiles in glob (tup parity)
- Complete sheet dep closures (data/lib, lib/root)
- Validate --jobs; reject non-numeric values instead of silently no-oping
- Worker pool drains all workers before rethrowing; per-rule internal
  errors abort scheduling instead of racing db.close()
- SIGKILL all live process groups on second Ctrl-C
- Transactional loadStoredRules snapshot; dry run without existing state
  uses an in-memory db; idempotent DDL
- rule() rejects % placeholders in literal outputs

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:32:59 -04:00
Christopher Monsanto
02194b17f0 Remove tup: delete Lua build config, tupctime, and tup state
The build is now driven by tools/build (see Buildfile.ts). tupctime is
obsolete: the new tool hashes content behind a stat cache, so ctime/mtime
churn without content changes no longer causes rebuilds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:09:51 -04:00
Christopher Monsanto
c6c336dc2d Fix ps sheet data imports broken by dist-main removal
The .sheet.mjs files imported bare @smogon/sprite-data / @smogon/sprite-root,
which stopped resolving from the repo root after the TS7/Node 24 migration
dropped dist mains. Use explicit index.ts imports and add the workspace deps
to the root package.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:04:43 -04:00
Christopher Monsanto
0ee06d3a5b Add tools/build unit tests
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:03:13 -04:00
Christopher Monsanto
edda6cb310 Implement tools/build core and Buildfile.ts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:01:04 -04:00
Christopher Monsanto
4ded7eea86 Scaffold tools/build package and root Buildfile project wiring
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 21:52:57 -04:00
Christopher Monsanto
c9ec48f512 Run deploy tool as tools/deploy/index.ts in update scripts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 19:35:28 -04:00
Christopher Monsanto
d7e0f8d373 Merge branch 'worktree-ts7-node24' 2026-08-12 19:34:13 -04:00
Christopher Monsanto
14f58e38c3 some stuff i should commit 2026-08-12 19:33:29 -04:00
Christopher Monsanto
94229b4c85 Add types:[node] to base config (tsgo drops @types auto-include)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:48:42 -04:00
Christopher Monsanto
ff3ceca064 Regenerate pnpm-lock.yaml with pnpm 11
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:45:49 -04:00
Christopher Monsanto
1cb32a62f2 Update callers to node index.ts; refresh CI/README/gitignore
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:45:35 -04:00
Christopher Monsanto
75580a962a Run TS sources directly: ESM sprite-root, .ts imports, node:test
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:44:51 -04:00
Christopher Monsanto
ac0ef09084 Drop dist mains, thin tsconfigs, bump @types/node and better-sqlite3
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:43:53 -04:00
Christopher Monsanto
c50ccca509 Adopt smogon.com tsconfig-base and TS ~7.0.2
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:42:54 -04:00
Marty
a23538ecaf Add more PMD sprites 2026-08-06 23:25:00 -04:00
Marty
7a2ee41966 Add missing PMD sprites 2026-08-06 18:15:19 -04:00
Marty
358c1e3341 Update CAP sprites 2026-08-06 18:13:01 -04:00
Marty
69bf0e96f3 Add latest models 2026-07-31 12:12:31 -04:00
Marty
971b2cfb1b Update models 2026-07-03 16:33:32 -04:00
Christopher Monsanto
52ecf6cae9 champions change 2026-06-21 22:19:59 -04:00
Marty
32a4c5916a Add new sprites 2026-06-17 22:43:23 -04:00
Marty
6b9759b741 Update CAP sprites 2026-05-23 20:55:46 -04:00
Marty
800bfa74b9 Update item sprites 2026-04-14 22:32:16 -04:00
Marty
60a3172076 Add new sprites 2026-04-11 11:49:11 -04:00
Marty
4921ff31a3 Add latest CAP 2026-03-22 17:24:47 -04:00