Commit Graph

545 Commits

Author SHA1 Message Date
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
Marty
0f97439f4b Add latest models 2026-03-05 18:41:09 -05:00