mirror of
https://github.com/tiennm99/try-gstack.git
synced 2026-05-26 01:59:27 +00:00
3b9feb3ecd
* chore: ignore .gstack/ deploy reports /land-and-deploy writes per-deploy artifacts to .gstack/deploy-reports/. Those shouldn't enter the repo. Captured here so future runs don't surface stale diffs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(geom-engine): circle module + inscribed-angle invariance test Add the second pure module per autoplan eng decision E1: src/geom-engine/circle.ts with circle(), pointOnCircle(), projectToCircle() (snap-to-circle for Module 3 drag), and angleAtVertex() (clamped against IEEE-754 drift to prevent acos NaN at exactly collinear angles). The killer-demo property test pins the inscribed-angle theorem as a CI gate: pick two fixed points A and B on a unit circle, sample 7 different M positions on the major arc, and assert all sampled inscribed angles AMB stay within 0.5° of the reference. If this test ever fails, Module 3's central premise is broken. 13 new unit tests, total 29 passing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(module-3): drag-to-explore góc nội tiếp page (lớp 9) Ship the first interactive theorem demo. Page lives at /lop-9/goc-noi-tiep/. Component: src/components/inscribed-angle.ts wires Pointer Events + setPointerCapture per autoplan eng decision E1. Drag M; on every pointermove, project the pointer to the circle (M = center + r·normalize(pointer − center)) so M never escapes the circle. Live readouts: ∠AMB at M (inscribed, pair1 red), ∠AOB at center O (central, pair2 teal). All listeners use AbortController keyed on astro:before-swap so view-transition navigation doesn't leak. Page: src/pages/lop-9/goc-noi-tiep.astro holds the SVG canvas (viewBox 400x400, touch-action: none scoped to canvas), theorem panel, and one worked example walking the 120°/60° canonical case. Astro bundles the script inline so the single page ships ~7KB total (including the entire geom-engine + component). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(hub): link lớp 9 card to góc nội tiếp module Hub landing page now branches each grade card on grade.href: - live cards render as <a> with hover affordance (lớp 9 only, for now) - coming-soon cards stay as <li> with opacity 0.7 and "Sắp ra mắt" badge Status taxonomy extended: 'sap-ra-mat' | 'live' so future modules just flip the status when their page ships. i18n/vi.ts gains module3.* (intro, theorem, example, instruction copy) plus a new 'live' status string ("Khám phá") so every user-facing string stays inside vi.ts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: VERSION 0.0.2.0 + CHANGELOG entry First feature release. v0.0.2.0 = scaffold + Module 3 góc nội tiếp. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: mark TODOS items completed by v0.0.2.0 - Drag M with circle constraint → DONE in src/components/inscribed-angle.ts - TheoremCanvas primitive first cut → DONE (built directly in Astro) - Theorem panel + worked examples → PARTIAL (1 of 3 examples shipped) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.8 KiB
3.8 KiB
Changelog
All notable changes to Hình Học Sống are documented here. Format: Keep a Changelog. Versioning: 4-digit MAJOR.MINOR.PATCH.MICRO per gstack.
[0.0.2.0] - 2026-04-29
Added
- Module 3 (lớp 9): Góc nội tiếp — the first interactive theorem demo, live at
/lop-9/goc-noi-tiep/.- Drag point M around the circle; ∠AMB stays constant when M is on the same arc (the inscribed-angle theorem in motion).
- Live numeric readout of ∠AMB (inscribed) and ∠AOB (central). Color-coded per the locked autoplan palette: M and the inscribed-angle readout in pair1 (#D7263D), A/B and the central-angle readout in pair2 (#1B998B).
- SVG canvas with
viewBox="0 0 400 400",touch-action: nonescoped to the canvas, Pointer Events +setPointerCapturefor unified mouse/touch/stylus handling, AbortController teardown onastro:before-swap. - Theorem statement panel with the SGK phrasing, plus one worked example walking the user through the 120° → 60° relationship for the canonical A=150°, B=30° configuration.
src/geom-engine/circle.ts— pure circle module:circle(),pointOnCircle(),projectToCircle(),angleAtVertex()(clamped against IEEE-754 drift to preventacosNaN). 17 unit tests including the inscribed-angle invariance property test (∀ M on the major arc, ∠AMB stays within 0.5° of the reference) — the killer-demo property is now a CI gate.- Hub landing page upgrade: lớp 9 card is now a real link with
bg-style hover affordance and "Khám phá" status badge. Lớp 7 + 8 cards still show "Sắp ra mắt" withopacity: 0.7to signal not-yet-clickable.
Changed
i18n/vi.tsextended withmodule3.*strings + per-gradehrefand a newlivestatus. Every user-facing string still routed throught().- Landing-page card rendering now branches on
grade.hrefto produce either an<a>(live) or a dimmed<li>(coming soon). .gitignorenow ignores.gstack/(per-deploy reports written by/land-and-deploy).
Notes
- KaTeX still deferred — the theorem text uses Unicode (∠AMB, °) directly, which renders fine in Be Vietnam Pro. KaTeX bundling lands when a future module needs it.
- Tick-mark encoding (Decision D3) not used here since inscribed-angle has no matching sides; ticks land with Module 1 (tam giác bằng nhau).
- Keyboard navigation, first-load coaching, and three theorem-toggle variants all deferred to v0.0.3.0+ per TODOS.md.
[0.0.1.0] - 2026-04-29
Added
- Astro project scaffold with TypeScript strict mode and
base: '/try-gstack/'for GitHub Pages subdirectory hosting. - Vietnamese-first BaseLayout with
lang="vi", canonical URL, OpenGraph, robots meta,X-Frame-Options: DENY. - Be Vietnam Pro typography (self-hosted via
@fontsource/be-vietnam-pro, Vietnamese subset, weights 400/500/700) with locked sizes/line-heights andfont-feature-settings: kern, locl. - Tailwind 3 with the locked SGK 3-color palette (#D7263D / #1B998B / #F46036) and
max-w-prose: 56ch. - Landing page (hub) with three placeholder grade cards (lớp 7 / 8 / 9), each marked "Sắp ra mắt".
src/i18n/vi.ts+t()helper — every user-facing string routed through i18n from day 1 so English can ship later by addingen.ts.src/geom-engine/pure module (no DOM imports) withVec2,add/sub/scale/dot/len/dist/normalize,EPSILON_LEN = 0.5, andapproxEqualLenhelper.- Vitest with v8 coverage, 95% line/function/statement and 90% branch threshold against the geom-engine module.
- GitHub Actions:
ci.ymlruns typecheck + tests + build on PRs and pushes tomain;deploy.ymldeploys to GitHub Pages frommainviaactions/deploy-pages@v4. RUNBOOK.mdwith rollback procedure and domain-purchase trigger thresholds (500 sessions / 30d, 1 organic teacher share, or ≥5 modules shipped).