Repository navigation
feat(demo): world-file fitting demo with contrast presets and GitHub Pages deploy - #6
Merged
Merged
Conversation
`pnpm run dev` now opens a demo portal and a fitting page that show the input GCPs (pixel board, v axis up; planar metre board near Kyoto) and the output: adopted model, the six world-file values, residual arrows, the F test against its critical value, similarity/affine SSE and warnings. Preset buttons load GCP sets whose results clearly differ: similarity vs sheared map, 2/3/5 points, spread vs nearly collinear points, and one wrong point. The presets live in demo/presets.js and are shared with the tests, which call the real fitWorldFile from src and check that each pair splits. vite and jsdom are devDependencies only; the demo imports src directly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test.yml now also runs verify:demo, and its header note describes the demo and deploy.yml instead of saying there is none. The new deploy.yml builds the same demo on pushes to master and publishes dist-demo; actions are pinned to commit SHAs, the workflow defaults to contents: read and only the deploy job gets pages: write and id-token: write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nstall on every PR pnpm 11 makes strictDepBuilds the default, so a clean pnpm install --frozen-lockfile with lifecycle scripts enabled stops with ERR_PNPM_IGNORED_BUILDS for esbuild. Keep the allowBuilds list in ci/pnpm-workspace.ci.yaml and copy it to pnpm-workspace.yaml right before the install in deploy.yml. A new CI job repeats the same install so the deploy path is exercised before it reaches master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ty gate measures Moving a point by hand changes the input, so the pressed preset button and its expectation line no longer describe it. Release the button and replace the line once a point actually moves; a click without moving keeps the preset. Say next to the quality gate that adoptable is decided by the number of points and does not look at the size of the errors, and bind the wrong point's gate to the correct one's in the preset tests, since the expectation line and both READMEs rely on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kochizufan
marked this pull request as ready for review
October 27, 2026 10:05
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
pnpm run devopens a demo portal (index.html) anddemo/worldfile-fit.html. The same pages are built for GitHub Pages by the newdeploy.ymlon pushes tomaster(base/Daedalus/).fitWorldFile: adopted model, the six world-file values (with the similarity shape note), residual arrows with their magnification, F against its critical value (log-scale bars;F = ∞is spelled out), similarity/affine SSE, warnings with a one-line explanation each,qualityGate,status,rmsMeters, and the package version.preview/adoptablewithout affine / affine evaluated)nearCollinearSourceand skips affine)adoptable, point 3 has the longest residual)srcis unchanged. The demo importssrcdirectly.viteandjsdomare devDependencies only (nodependencieskey).Tests
tests/demo-presets.test.ts: calls the realfitWorldFilewith every preset and checks each contrast splits as promised (properties, not baked numbers).tests/demo-wiring.test.ts(jsdom, injected fakefit,getContextnot stubbed): each preset button callsfitexactly once with the preset GCPs and fills the outputs; drag recomputes once on release; F text/bars for finite, infinite and missing F; version footer; errors are shown without throwing; number formatting and arrow magnification helpers.scripts/verify-demo-pages-build.mjs(pnpm run verify:demo): both pages exist, assets resolve under/Daedalus/assets/, no redirect stub / service worker shim / COOP-COEP.Local:
pnpm run test(73 passed),typecheck,build,test:types,verify:demoall exit 0.Notes
master, so it is first exercised after this branch reachesmaster.deploy.ymlare pinned to commit SHAs; the workflow defaults tocontents: readand only the deploy job getspages: write/id-token: write.🤖 Generated with Claude Code