Files
try-gstack/CHANGELOG.md
T
tiennm99 3b9feb3ecd v0.0.2.0 feat(module-3): drag-to-explore góc nội tiếp (lớp 9) (#2)
* 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>
2026-04-30 00:03:34 +07:00

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: none scoped to the canvas, Pointer Events + setPointerCapture for unified mouse/touch/stylus handling, AbortController teardown on astro: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 prevent acos NaN). 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" with opacity: 0.7 to signal not-yet-clickable.

Changed

  • i18n/vi.ts extended with module3.* strings + per-grade href and a new live status. Every user-facing string still routed through t().
  • Landing-page card rendering now branches on grade.href to produce either an <a> (live) or a dimmed <li> (coming soon).
  • .gitignore now 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 and font-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 adding en.ts.
  • src/geom-engine/ pure module (no DOM imports) with Vec2, add/sub/scale/dot/len/dist/normalize, EPSILON_LEN = 0.5, and approxEqualLen helper.
  • Vitest with v8 coverage, 95% line/function/statement and 90% branch threshold against the geom-engine module.
  • GitHub Actions: ci.yml runs typecheck + tests + build on PRs and pushes to main; deploy.yml deploys to GitHub Pages from main via actions/deploy-pages@v4.
  • RUNBOOK.md with rollback procedure and domain-purchase trigger thresholds (500 sessions / 30d, 1 organic teacher share, or ≥5 modules shipped).