# CAR-001 geometry source ledger ## Pinned factual reference - Repository: https://github.com/Horace-Maxwell/Horosa-Web-App-comprehensively-improved-Windows - Audited checkout commit: `daab60ce05c8f0e78cc51b5e7974120f81aed79c`, verified with `git rev-parse HEAD`. - Source file: `local/workspace/Horosa-Web-55c75c5b088252fbd718afeffa6d5bcb59254a0c/astrostudyui/src/components/tarot/engine/spreads.js`. - Source SHA-256: `f5ab2dc2e6b5b55754b0762985ff71685a5c719b7ea0c5d900444e0192f191a3`. - Source URL: https://github.com/Horace-Maxwell/Horosa-Web-App-comprehensively-improved-Windows/blob/daab60ce05c8f0e78cc51b5e7974120f81aed79c/local/workspace/Horosa-Web-55c75c5b088252fbd718afeffa6d5bcb59254a0c/astrostudyui/src/components/tarot/engine/spreads.js - The source package declares **AGPL-3.0-only**. This is not a public-domain code source. No source implementation, UI stylesheet, deck art, or modern descriptive prose was copied or run. - Use was limited to spread identifiers/counts, numeric positions, sparse matrix row/column facts, and the 90-degree crossing flag. The new layout algorithm, renderer, CSS, validation, and tests were authored independently. MIT applies only to that new material; it does not relicense the reference. `build-geometry.py` reads reference text as text. It extracts only numeric scalar records with a constrained regular expression. Generated coordinate patterns are independently restated from their mathematical facts. There is no eval, JS import, VM, or reference runtime. The build refuses an unexpected source digest. `geometry-facts.json` stores each template's source line, factual basis, 1-based index, x/y, orientation, and declared overlap pairs. There are 69 fixed templates and 521 positions. This is presentation parity for existing templates, not 69 new divination algorithms. ## Retained application data Input `zhouyi-workbench/dist/cards-data.js` supplies all names, card IDs, slot IDs, slot labels, meanings, independent reading text, deck compatibility, and draw rules. `cards-engine.js` remains the sole draw authority. Neither production file is changed. The renderer never resolves new cards, shuffles, scores, adjusts reversal, or changes a saved result. The existing corpus license remains separate. Its original statement that its own geometry was independently authored remains true; coverage documentation must separately disclose this new factual reference-geometry presentation layer. ## Declared differences and edge cases | Template | Rendering decision | Source fact / compatibility reason | |---|---|---| | annual | Existing independent 4-column geometry retained | Source lines 101–106 give 13 semantic positions but no coordinates. No source geometry is invented or attributed. | | grand_tableau, 8×4+4 | Last four centered under columns 3–6 | Source formula at lines 754–756 left-aligns the tail. Existing application explicitly uses a centered 8×4+4 profile, which is preserved. | | grand_tableau, 9×4 | Independent nine-column row-major matrix | Existing application permits this alternate layout. It is not claimed to be present in source spreads.js. Both views retain original 1–36 position/house identities. | | celtic, celtic6, celtic11 | Positions 1 and 2 intentionally share a center; #2 is landscape | Source marks the second position crossFixed. Its 90-degree orientation is kept separate from the input's reversed flag. No reading rule is changed. | | zodiac | First at bottom, following points clockwise on a top-left-origin screen | Source numerical expression differs from its comment. Numeric positions win; historical universality is not claimed. | | chakra7 | First at top, increasing y downward | Source numerical coordinates differ from its descriptive direction. Numeric positions win. | | year_wheel13 | #1 at top, #13 at center | Numeric positions differ from the source's clock-wording. No wording is copied. | | zodiac13 | Twelve perimeter points, #13 center | Restores the source's geometry without altering semantic order. | | problem_solving9 | Sparse 3-column × 4-row matrix | Numeric row/column records are retained, including bottom-center ninth card. | | hero22, choice22 | Two top-row corner cards, followed by four full rows | Sparse source matrix positions retained. | | latent26 | 5×5 plus bottom-center #26 | Source matrix fact retained. | | calendar31 | Up to seven columns × five rows, only actual 28–31 drawn positions | Existing engine's month-length behavior wins over any source suggestion to discard extra drawn cards. | | first_reversal | A zero-or-one-card compatibility view, outside the 69 fixed count | Existing draw result preserved; no-reversal displays no phantom card. | | opening_of_key | Explicitly rejected | Dedicated workflow outside CAR-001. | The Celtic crossing is the only intentional visual overlap. All other pairs are separated by at least one rem under the mathematical model. Source normalized coordinates are uniformly scaled (x and y equally), not independently stretched. Padding is computed from actual card footprints. The 8×4+4/9×4 profiles preserve topology and order without requiring identical pixel gaps in x and y. ## Verification provenance Tests use the already installed first-party application engine and local `linkedom`. No dependency installation, reference executable, browser server, localhost port, alternate host, or deployment is used. DOM and arithmetic tests do **not** establish real-browser visual, screen-reader, clipping, or print fidelity. See the remaining checklist in README.md.