Files
try-gstack/CHANGELOG.md
T
tiennm99 638af314ea v0.0.3.0 feat(module-1): drag-to-explore tam giác bằng nhau (lớp 7, SSS) (#3)
* feat(geom-engine): triangle module + position-strict congruentSSS

Third pure module under src/geom-engine/. Adds Triangle type, sides() (returns
named AB / BC / CA lengths), and congruentSSS() with position-strict semantics:
labels define the correspondence (AB↔A'B', BC↔B'C', CA↔C'A'), permuted matches
are NOT counted as congruent. This preserves SGK pedagogy where the labels and
the matched-pair encoding (color + tick marks) carry meaning.

10 new unit tests: identical, translated-congruent, similar-not-congruent (2x scale),
shape-different, EPSILON_LEN tolerance (within and just outside), label-permutation
rejection, and symmetry of the relation.

Total tests: 29 → 39.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(module-1): drag-to-explore tam giác bằng nhau (lớp 7, SSS)

Second interactive theorem demo. Page at /lop-7/tam-giac-bang-nhau/.

Component: src/components/congruence-sss.ts owns 6 draggable vertices (3 per
triangle), each independently captured via setPointerCapture per vertex.
Drag-clamping (16px viewBox padding) keeps every vertex on-screen.

Encoding per autoplan Decision D3 (a11y + SGK-correct in one move):
  AB / A'B' → pair1 #D7263D + 1 tick
  BC / B'C' → pair2 #1B998B + 2 ticks
  CA / C'A' → pair3 #F46036 + 3 ticks
Tick marks are SVG line segments perpendicular to each side at the midpoint,
spaced 5 viewBox-units apart for multi-tick. Redrawn live during drag.

Page: viewBox 400x300 (4:3, side-by-side triangles), single 6KB page including
inline JS bundle (entire geom-engine + canvas controller, minified).

Live side-length readout table + green badge "Hai tam giác bằng nhau (c.c.c)"
that appears when SSS condition holds within EPSILON_LEN. Badge has
role="status" + aria-live="polite" so screen readers announce the moment the
triangles become congruent.

Rigid-motion overlay animation EXPLICITLY DROPPED per autoplan — color+tick
match is the success state.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(hub): activate lớp 7 card linking to tam giác bằng nhau module

Status flips from sap-ra-mat to live; href points at the new module.
i18n/vi.ts gains module1.* strings (intro, instruction, theorem, example,
SGK-aligned theorem statement) so every user-facing string still routes
through t() — adding English in the future is one en.ts file away.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: VERSION 0.0.3.0 + CHANGELOG + TODOS update

v0.0.3.0 = scaffold + Module 3 (góc nội tiếp) + Module 1 (tam giác bằng nhau).
2 of 3 MVP modules now live. Module 2 (tam giác đồng dạng) is next.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: TODOS Module 1 reflects v0.0.3.0 (SSS shipped)

Original P1 items "SSS detector" + "SGK tick-mark encoding" already moved to
Completed in the previous commit. Replace the still-pending M1 section with
the actual remaining work: P2 toggles for SAS/ASA/AAS/cạnh huyền cases, P3 for
extra examples.

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:17:26 +07:00

6.1 KiB
Raw Blame History

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.3.0] - 2026-04-30

Added

  • Module 1 (lớp 7): Tam giác bằng nhau (SSS) — second interactive theorem demo, live at /lop-7/tam-giac-bang-nhau/.
    • Two side-by-side triangles ABC and ABC in a 400×300 viewBox. All 6 vertices independently draggable via Pointer Events + setPointerCapture per vertex. Drag-clamping keeps every vertex inside the canvas (16-px padding) so the triangles never escape view.
    • SGK-correct encoding per autoplan Decision D3 — color and tick marks paired: AB/AB in pair1 #D7263D with 1 tick, BC/BC in pair2 #1B998B with 2 ticks, CA/CA in pair3 #F46036 with 3 ticks. Tick marks are perpendicular SVG line segments rendered at the midpoint of each side, redrawn live during drag. This is both a11y-correct (color is never the only signal) and matches what every Vietnamese textbook does.
    • Live side-length readout table — six values, color-keyed to the matching tick-pair colors.
    • Green pill badge "Hai tam giác bằng nhau (c.c.c)" appears whenever all 3 corresponding side pairs match within EPSILON_LEN = 0.5 viewBox units. ARIA-live polite so screen readers announce the moment the triangles become congruent.
  • src/geom-engine/triangle.ts — third pure module: triangle(), sides(), congruentSSS() with position-strict semantics (AB↔AB, etc., not arbitrary permutations — preserves the SGK label-correspondence convention).
  • 10 new unit tests including translation invariance, similar-not-congruent rejection, EPSILON tolerance, position-strict label correspondence (permuted side-length sets are NOT counted as congruent), and symmetry of the relation.
  • Hub landing page: lớp 7 card now links to the module with "Khám phá" status.

Notes

  • Per autoplan: rigid-motion overlay animation EXPLICITLY DROPPED from MVP (was scope creep — rotation+reflection interpolation = days, not hours). The green badge + tick-mark color match is the entire success state.
  • SAS / ASA / AAS / cạnh huyền-góc nhọn / cạnh huyền-cạnh góc vuông toggles deferred — SSS alone validates the canvas + tick-mark + badge pattern. Other cases land in v0.0.5.0+ as toggles on the same canvas.
  • Worked examples count: 1 (autoplan called for 3). Same posture as Module 3 — content additions don't gate the killer-demo ship.

[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).