Skip to content

Commit dcc8523

Browse files
ChanMeng666claude
andcommitted
chore(release): v1.20.0 — sheet & datum
Aggregate the three Batch-2 sub-release PRs (#39 positioning axes, #40 paper/scale + museum flagship, #41 room schedule + legend) into a 1.20.0 CHANGELOG section and bump the core to 1.20.0. MINOR is the right class: four new statement keywords (paper/axes/schedule/legend), one new catalogued code (W_SCALE_OVERFLOW) and three append-only describe() keys (axes/sheet/schedule), all opt-in and byte-compatible for a plan that declares none. packages/mcp has no visible diff since v1.19.0, so the shim stays at 0.2.2 and its ^1.x core range already covers 1.20.0 — no double bump. AGENTS.md status table refreshed: core 1.20.0, tags to v1.20.0, tests 1395/116, the "Latest release:" line, the new axes.ts / sheet-tables.ts modules, and the VS Code row noting the 0.9.0 rebundle still pending. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NxVPnKnaTiDLpkRXyk5mhu
1 parent b4beaa9 commit dcc8523

3 files changed

Lines changed: 47 additions & 12 deletions

File tree

AGENTS.md

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,26 @@ not a work-in-progress. Treat the live artifacts below as the source of truth
1919

2020
| Thing | Current | Where |
2121
|-------|---------|-------|
22-
| **Core package** | `@chanmeng666/archlang@1.19.0` (published, `latest`, with provenance — released tokenlessly via `.github/workflows/release.yml` OIDC trusted publishing) | npmjs.com/package/@chanmeng666/archlang |
22+
| **Core package** | `@chanmeng666/archlang@1.20.0` (published, `latest`, with provenance — released tokenlessly via `.github/workflows/release.yml` OIDC trusted publishing) | npmjs.com/package/@chanmeng666/archlang |
2323
| **Agent interface** | the `arch` **CLI** (`--json`, exit codes, stdin — incl. `ast`/`complete`/`fix`/`suggest`, `compile --from-json`/`-f txt`, `validate --graph`, v1.14's `validate --intent`/`--feedback` + `score --brief`, and the v1.17 **self-describing + bounded-output** layer: manifest-rendered per-command `--help` with worked examples, `--version`, exit-3 did-you-mean on an unknown flag/verb, `describe --room/--select`, `lint\|validate --code/--severity`, `context --section`, `fix --dry-run/--backup` + unified diff) + `SKILL.md` + `spec.llm.md` + **`llms-full.txt` / `arch context`** + **`schemas/plan.schema.json`** + **`schemas/intent.schema.json`** + **`grammars/archlang.gbnf`**. Primary interface stays the CLI; an **optional MCP shim** (`packages/mcp`) is a discoverability channel, not a replacement | `src/cli.ts`, `SKILL.md`, `spec.llm.md`, `llms-full.txt`, `packages/mcp` |
2424
| **MCP server** | `@chanmeng666/archlang-mcp@0.2.2` (published, `latest`; registry entry `io.github.ChanMeng666/archlang-mcp` v0.2.2 live on registry.modelcontextprotocol.io; `packages/mcp/`; stdio shim over the library; tools compile/describe/lint/validate (incl. `intent`)/**score**/repair/fix/suggest/complete + spec/context/schema/**intent-schema**/grammar resources; SDK dep quarantined here, core stays zero-dep) | `packages/mcp/`, `server.json` |
25-
| **VS Code extension** | `ChanMeng.archlang@0.8.0` **live on the Marketplace** (2026-07-26; rebundles core 1.19.0 — `flush`, `dim faces`/`clear`, `W_FIXTURE_BACK_TO_ROOM`/`W_DIM_INSIDE`/`W_DIM_NO_WALL`/`E_FURN_FLUSH`, stable-ref `suggest`). Upload stays a human web step at marketplace.visualstudio.com/manage/publishers/ChanMeng (no CI publish exists) | marketplace.visualstudio.com/items?itemName=ChanMeng.archlang |
25+
| **VS Code extension** | `ChanMeng.archlang@0.8.0` **live on the Marketplace** (2026-07-26; rebundles core 1.19.0 — `flush`, `dim faces`/`clear`, `W_FIXTURE_BACK_TO_ROOM`/`W_DIM_INSIDE`/`W_DIM_NO_WALL`/`E_FURN_FLUSH`, stable-ref `suggest`). **0.9.0 rebundle pending** for v1.20.0's grammar surface (`paper`/`axes`/`schedule`/`legend` + `W_SCALE_OVERFLOW`) — the extension bundles the core at build time. Upload stays a human web step at marketplace.visualstudio.com/manage/publishers/ChanMeng (no CI publish exists) | marketplace.visualstudio.com/items?itemName=ChanMeng.archlang |
2626
| **Playground** | deployed, redesigned (**"The Compile Boundary"** one-light-world UI — see below · TypeScript app · pan/zoom · autocomplete · history · click-to-source · format · repair · error-explain · embeddable `embed.html` · circulation Paths toggle · **Copy-for-LLM** · inline diagnostic fixes) | https://playground.archlang.uk |
2727
| **Docs site** | deployed, redesigned (**"The Compile Boundary"** one-light-world UI · compiler-as-hero · VitePress · live editable `<ArchLive>` examples · plain ```` ```arch ```` fences auto-live · serves `/llms.txt` + `/llms-full.txt` + **raw `/<page>.md`** + **`/plan.schema.json`** + **`/archlang.gbnf`**) | https://archlang.uk |
28-
| **Git** | `main`, tags `v1.0.0``v1.19.0` (latest; a `v*` tag push triggers the tokenless OIDC release workflow) | github.com/ChanMeng666/archlang |
28+
| **Git** | `main`, tags `v1.0.0``v1.20.0` (latest; a `v*` tag push triggers the tokenless OIDC release workflow) | github.com/ChanMeng666/archlang |
2929
| **Dataset** | HF `ChanMeng666/archlang-repair-trajectories` (**published, live 2026-07-13** — repair 1200 + authoring 400 rows) — two splits, fully synthetic, self-verifying, CC0-1.0, deterministic from seed `20260712`; generator `dataset/` (`npm run dataset:gen`), permanent CI leakage guard `test/dataset.test.ts` | `dataset/`, huggingface.co/datasets/ChanMeng666/archlang-repair-trajectories |
30-
| **Tests** | 1269 passing (113 files, incl. the fault-injection L1 gate, the G1 oracle-isolation guards, the L2 protocol tests, the judge byte-equivalence fixture, the intent-channel suites, the vocabulary-equivalence classification pin, the dataset contamination/determinism guard, and v1.17's CLI-surface suites — FLAG_KEYS↔manifest bidirectional drift, per-command help/examples, filters-never-gate, the `context --section` splitter-to-generator weld, and `test/docs-flags.test.ts`, the docs↔manifest gate that fails if any hand-written doc names a flag its command doesn't declare, plus v1.19's drawing-quality suites — fixture orientation, `flush` placement, the openings render pass, and `test/repair-coverage.test.ts`, whose postcondition is that every piece a lint pass flags gets a change entry or an `unresolved` entry, never nothing) + offline authorability eval (26 briefs, judge v2, `npm run eval:ci`, in CI); typecheck (`noUncheckedIndexedAccess` on) + build + `npm run lint` (Biome) clean ||
31-
32-
**Latest release: v1.19.0 (2026-07-25)** — drawing-quality round: GB/T three-chain `dims auto` +
33-
`dim faces`/`clear` + `describe().bbox_outer`, the `flush` keyword, derived fixture orientation with
34-
`W_FIXTURE_BACK_TO_ROOM`, cased openings no longer repainting the floor, `repair()` covering
35-
scripted/component/in-room placements, and `-o -` with `--json` as an exit-3 usage error. (v1.18.0,
36-
2026-07-15, was the `arch suggest` stable-ref round.) The table above is what is live. Canonical release notes
30+
| **Tests** | 1395 passing (116 files, incl. the fault-injection L1 gate, the G1 oracle-isolation guards, the L2 protocol tests, the judge byte-equivalence fixture, the intent-channel suites, the vocabulary-equivalence classification pin, the dataset contamination/determinism guard, and v1.17's CLI-surface suites — FLAG_KEYS↔manifest bidirectional drift, per-command help/examples, filters-never-gate, the `context --section` splitter-to-generator weld, and `test/docs-flags.test.ts`, the docs↔manifest gate that fails if any hand-written doc names a flag its command doesn't declare, plus v1.19's drawing-quality suites — fixture orientation, `flush` placement, the openings render pass, and `test/repair-coverage.test.ts`, whose postcondition is that every piece a lint pass flags gets a change entry or an `unresolved` entry, never nothing, plus v1.20's sheet-and-datum suites — `test/axes.test.ts` (GB/T numbering incl. the `I`/`O`/`Z` skip and the descending-`y` lettering), `test/sheet.test.ts` (the paper/scale size table, closed-form auto-fit, `W_SCALE_OVERFLOW`, and a pin that a plan with no `paper` is byte-identical) and `test/schedule.test.ts` (schedule rows equal `describe()`'s own areas, legend lists only what is drawn)) + offline authorability eval (26 briefs, judge v2, `npm run eval:ci`, in CI); typecheck (`noUncheckedIndexedAccess` on) + build + `npm run lint` (Biome) clean | — |
31+
32+
**Latest release: v1.20.0 (2026-07-26)** — Batch-2 sub-release **"sheet & datum"**: `paper <size>
33+
[orientation]` makes the drawing scale **operative** (every annotation size becomes a constant number
34+
of mm on the sheet × the scale denominator, with closed-form auto-fit and the advisory
35+
`W_SCALE_OVERFLOW`), `axes { x at … / y at … }` adds the GB/T 50001 positioning-axis grid (derived
36+
`1 2 3` / `A B C` labels, dash-dot lines + bubbles on layer `A-GRID`, and `dims auto` chain 2 becomes
37+
the true axis chain), and `schedule rooms` + `legend` add margin tables derived from the plan itself.
38+
New `describe()` keys `axes` / `sheet` / `schedule`; new flagship `examples/museum.arch` (~100 × 60 m,
39+
14 rooms, A1 at 1:200). A plan declaring none of the four keywords is byte-for-byte unchanged.
40+
(v1.19.0, 2026-07-25, was the drawing-quality round — `flush`, GB/T `dims auto`, derived fixture
41+
orientation.) The table above is what is live. Canonical release notes
3742
live in `CHANGELOG.md`; per-tranche research verdicts in `docs/research/`. The full per-release
3843
narrative (v1.3.0 → v1.16.0, honest eval read, sites redesign, every tranche summary) is archived
3944
verbatim at
@@ -144,7 +149,10 @@ symbols), `diagnostic-json.ts` (`diagnosticToJson` line/col/`fix` projection), `
144149
(`renderErrorSvg`), `intent.ts` + `intent-concepts.ts` (intent channel, shared with the eval via
145150
shims), `vocabulary.ts` (`matchVocabulary` label matcher), `sheet.ts` (the sheet layer: the ISO 216 table, the
146151
sheet-millimetre drafting constants, `sizesFromPaper` — the second `RenderSizes` constructor — and the
147-
closed-form fit/auto-fit rule; a plan with no `paper` never reaches it). The CLI lives in `src/cli.ts` (dispatch) +
152+
closed-form fit/auto-fit rule; a plan with no `paper` never reaches it), `axes.ts` (`numberAxes` /
153+
`axisLetter` — the GB/T positioning-axis grid and its derived labels) and `sheet-tables.ts`
154+
(`roomSchedule` / `legendEntries` + their Scene layout, so all four backends draw the margin tables
155+
from one place). The CLI lives in `src/cli.ts` (dispatch) +
148156
`src/cli/` (command modules); a single root `npm install` bootstraps every workspace.
149157

150158
### The sites' design system — "The Compile Boundary" (docs + playground)

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.20.0] - 2026-07-26
11+
12+
**"Sheet & datum"** — the first sub-release of the large-building batch. Until now a plan was a
13+
drawing with no paper and no datum: every annotation size was a fixed fraction of the drawing's own
14+
extent (self-similar, so a dwelling looked right at any zoom but a 100 m museum got 3 m room labels),
15+
dimensions ran from the building's own faces rather than a structural grid, and nothing in the margin
16+
let a reader audit the rooms without measuring them. This release adds the three things a real sheet
17+
has: a **paper size with an operative scale**, a **GB/T 50001 positioning-axis grid**, and **tabular
18+
margin blocks** (room schedule + legend). Every one of them is opt-in, and a plan that declares none
19+
of `paper` / `axes` / `schedule` / `legend` is **byte-for-byte unchanged**.
20+
21+
`compile()` stays pure, synchronous and deterministic. The language gains four statement keywords
22+
(`paper`, `axes`, `schedule`, `legend`) plus the `A4``A0` / `landscape` / `portrait` value
23+
vocabulary, and one catalogued code (**`W_SCALE_OVERFLOW`**); `describe()` gains three append-only
24+
keys (`axes`, `sheet`, `schedule`).
25+
1026
### Added
1127

1228
- **`axes { … }` — GB/T 50001 positioning axes (定位轴线).** An architectural drawing is not
@@ -140,6 +156,17 @@ A plan that declares no `axes` block is **byte-identical** to before — no node
140156
keeps the axis bubbles off ``/``. No `area`/`m2` token enters the grammar: printing a computed area
141157
in the sheet chrome is rendering, which the parked area-syntax decision never covered.
142158

159+
### Meta
160+
161+
- **VS Code extension 0.8.0** was packaged and published to the Marketplace in this window,
162+
rebundling core 1.19.0 (`flush`, `dim faces`/`clear`, the three new warnings) — see
163+
[`editors/vscode/CHANGELOG.md`](editors/vscode/CHANGELOG.md). The extension bundles the core at
164+
build time, so this release's grammar surface needs its own republish.
165+
- **The `release-check` skill now opens with a mandatory true-latest-version probe** (`npm view` +
166+
`git tag` + `gh release list` + the `CHANGELOG.md` headings) and requires the target to be strictly
167+
greater than all four with a semver class matched against the real diff — after a stale AGENTS.md
168+
status table caused an approved plan to target a version that was already published.
169+
143170
## [1.19.0] - 2026-07-25
144171

145172
Professional-drawing-quality round: six independent defects and gaps found by reading the rendered

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@chanmeng666/archlang",
3-
"version": "1.19.0",
3+
"version": "1.20.0",
44
"description": "A small declarative language that compiles to professional SVG floor plans — like Typst/LaTeX, but for architecture.",
55
"keywords": [
66
"architecture",

0 commit comments

Comments
 (0)