Skip to content

Commit b54fdcc

Browse files
ChanMeng666claude
andcommitted
chore(release): v1.35.0 - the third dimension, added twice
A MINOR shipping two independent halves: the vertical datum layer (`height` at three new sites, `sill`/`head` on openings, three refusal codes) which draws nothing, and the opt-in axonometric view (`--view iso|axon`) which measures nothing. - root 1.34.0 -> 1.35.0 - MCP shim 0.2.14 -> 0.2.15, dep range ^1.35.0 (twelfth consecutive version-bump-only release; four of five baked resources moved, the GBNF and plan schema among them) - VS Code extension 0.23.0 -> 0.24.0, dep range ^1.35.0 - CHANGELOG [Unreleased] -> [1.35.0] with the shim resource measurement - AGENTS.md status rows written PRE-probe and marked as such - docs E2E page-count pin 8 -> 9 for the new docs/axonometric.md route Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019qQs1eZDKceqT7NMkeHYvW
1 parent ceb660a commit b54fdcc

9 files changed

Lines changed: 127 additions & 23 deletions

File tree

AGENTS.md

Lines changed: 53 additions & 7 deletions
Large diffs are not rendered by default.

CHANGELOG.md

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

88
## [Unreleased]
99

10+
## [1.35.0] - 2026-09-04
11+
12+
**The third dimension, added twice — once as a number nothing draws, once as a picture nothing
13+
measures.** A floor plan is a horizontal cut, and until now that cut was all ArchLang had: a wall
14+
carried a thickness and no height, a window a width and no sill. This release adds the missing
15+
datum and then, separately, the first thing that consumes it. They are deliberately independent —
16+
the datum ships with **nothing drawing differently**, pinned over all thirty shipped examples and
17+
every storey of each, and the view ships **taking no part in any measurement**, with `describe()`
18+
and `lint()` structurally unable to read it.
19+
20+
Two new keywords (`sill`, `head`), `height` reused at three new sites rather than a fourth spelling
21+
invented, three new `E_*` refusal codes, and one new opt-in flag (`--view iso|axon`). **No
22+
removals.** A plan that authors no height and passes no `--view` is byte-identical in SVG,
23+
`describe()` and `lint()` — held as a law on both digests, not asserted.
24+
25+
**The two findings worth carrying past this release.** No test in this repository had ever
26+
**executed** an error-catalog example: the drift gate proves `docs/error-codes.md` reproduces the
27+
catalog, never that the catalog is true, and `E_HEIGHT_RANGE`'s own example documented a refusal
28+
the compiler does not make. `test/error-catalog-examples.test.ts` now runs every one, holding 95 of
29+
139 to raising their own code and pruning the 44 excuses in **both** directions — which already
30+
paid for itself, four entries excused on sight turning out to raise their code anyway. And the
31+
SVG backend's per-CAD-layer `<g>` grouping **re-orders nodes within a pass**, which a painter's
32+
algorithm cannot survive: the first axonometric render drew every floor plate after every wall and
33+
read as an open box seen from inside.
34+
1035
### Added — the opt-in axonometric view
1136

1237
`compile(source, { view: "iso" | "axon" })`, and `arch compile|preview --view iso|axon`, draw the
@@ -209,6 +234,31 @@ while `storey_height` and `walls[].height` are vertical — the same word for tw
209234
is kept on the wall because it is the `.arch` clause the payload round-trips to and the word a model
210235
has to produce; both schema descriptions say which is which.
211236

237+
### Shipped alongside
238+
239+
- **MCP shim `@chanmeng666/archlang-mcp` 0.2.15** — a **twelfth consecutive version-bump-only
240+
release** (`git diff v1.34.0..main -- packages/mcp` is empty), and the sharpest instance of the
241+
pack-time law since 0.2.11. Measured by SHA-256 against the v1.34.0 tag, **four of the five baked
242+
resources moved** and one did not:
243+
244+
| Baked resource | vs v1.34.0 |
245+
|---|---|
246+
| `spec.llm.md` | moved |
247+
| `llms-full.txt` | moved |
248+
| `grammars/archlang.gbnf` | moved |
249+
| `schemas/plan.schema.json` | moved |
250+
| `schemas/intent.schema.json` | unchanged |
251+
252+
The grammar moving is what makes this the sharp case: `sill` and `head` are real tokens, so a
253+
constrained decoder pointed at published 0.2.14's GBNF **cannot derive either clause at all**
254+
not mis-taught, unable to emit the syntax. `plan.schema.json` moved for the four new keys
255+
(`storey_height`, `walls[].height`, `openings[].sill`, `openings[].head`), so a host reading the
256+
published 0.2.14 schema rejects payloads this core emits. `intent.schema.json` is unchanged, and
257+
correctly: a height is not an intent assertion. Dep range re-pinned to `^1.35.0`.
258+
- **VS Code extension `ChanMeng.archlang` 0.24.0** — packaged against core 1.35.0, carrying the two
259+
new keywords, the three new `E_*` codes and the `--view` surface in the bundled server. The
260+
Marketplace upload is a human web step and is **not** performed by this repository.
261+
212262
## [1.34.0] - 2026-09-04
213263

214264
**What the gates could not see.** Every item here is a check that was running, green, and

CLAUDE.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ than memory.
6666
union to answer a `describe()` question. Inventory: `docs/research/2026-08-06-competitor-borrowing-roadmap.md` §9.1.
6767
- **Every new language form ships with a byte-identity law, pinned by test:** a plan that does not
6868
use it renders, describes and lints exactly as before. `site`, the door kinds, `zone`, `paper`,
69-
`polygon`, `arc`, `roof` and `void` all have one. Prove it with a SHA-256 sweep over the shipped
69+
`polygon`, `arc`, `roof`, `void`, the v1.35 `height`/`sill`/`head` datum and the v1.35 `--view`
70+
all have one. Prove it with a SHA-256 sweep over the shipped
7071
examples, not by eyeballing — and if a golden moves, that is a finding to explain before it is a
7172
diff to bless. Take the baseline with the **same digest body the test will run**, not a lookalike
7273
in a throwaway script: `test/roof-void-byte-identity.test.ts`'s first attempt used a scratch script
@@ -140,7 +141,14 @@ whole design (`arch lint --code E_ROOF_CURVED` / `arch explain E_ROOF_CURVED`
140141
refused rather than approximated, and `roof polygon` is the answer); and the **underlay walkability
141142
check**, which is the one furniture claim a drawing cannot show — put a `rug` and then a `sofa` on
142143
the same rectangle across a plan's only route and confirm `arch describe --json`'s circulation walks
143-
THROUGH the first and `arch lint` raises `W_ROOM_NO_CLEAR_PATH` on the second. Keep the flagship
144+
THROUGH the first and `arch lint` raises `W_ROOM_NO_CLEAR_PATH` on the second. For the v1.35
145+
surfaces, drive the two things a reading gets wrong: **`arch describe --json --select heights`** on a
146+
plan that authors a `height` and on one that does not — the whole block is gated on one whole-plan
147+
flag, so a plan authoring nothing must emit nothing, and elevation ACCUMULATES the storeys below
148+
rather than being `level × storey_height` (write two `level … height` blocks of different heights and
149+
read the third floor); and **`arch compile --view iso`**, which is a picture and not a drawing —
150+
confirm `describe()`/`lint()` are unmoved by it, and that all four refusals exit 3 rather than falling
151+
back to the plan (`--view` with `-f txt`, with `--ascii`, with `--level`, with `--overlay`). Keep the flagship
144152
`examples/studio.arch` **lint-clean and import-free**, and update snapshots/goldens
145153
(`vitest -u`, `UPDATE_GOLDENS=1 vitest run test/visual.test.ts`, `ASCII_UPDATE=1 vitest run
146154
test/ascii.test.ts`) only after reviewing the diff — never to green a red suite.

docs-site/e2e/routes.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ test.describe("machine-readable root artifacts", { tag: "@prod" }, () => {
8888

8989
test.describe("the raw /<page>.md copies serve the canonical markdown", { tag: "@prod" }, () => {
9090
test("there are as many routes as sync-docs publishes pages", () => {
91-
expect(PAGE_ROUTES.length).toBe(8);
91+
expect(PAGE_ROUTES.length).toBe(9);
9292
});
9393

9494
for (const { route, source } of PAGE_ROUTES) {

editors/vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "archlang",
33
"private": true,
4-
"version": "0.23.0",
4+
"version": "0.24.0",
55
"displayName": "ArchLang",
66
"description": "Syntax highlighting plus full language support — live diagnostics, hover, completion, go-to-definition, rename, and signature help — for ArchLang (.arch) floor-plan source.",
77
"license": "MIT",
@@ -57,7 +57,7 @@
5757
"vscode:prepublish": "npm run build"
5858
},
5959
"devDependencies": {
60-
"@chanmeng666/archlang": "^1.34.0",
60+
"@chanmeng666/archlang": "^1.35.0",
6161
"@types/node": "^22.20.0",
6262
"@types/vscode": "^1.75.0",
6363
"@vscode/vsce": "^3.2.1",

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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.34.0",
3+
"version": "1.35.0",
44
"description": "A small declarative language that compiles to professional SVG floor plans — like Typst/LaTeX, but for architecture.",
55
"keywords": [
66
"architecture",

packages/mcp/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@chanmeng666/archlang-mcp",
3-
"version": "0.2.14",
3+
"version": "0.2.15",
44
"mcpName": "io.github.ChanMeng666/archlang-mcp",
55
"description": "Model Context Protocol (MCP) server for ArchLang — compile, describe, lint, validate, score, repair, fix and suggest floor plans over stdio, plus the intent channel (gate + continuous score against a brief). Covers the whole current language: multi-storey `level` plans with stairs, `place`d components, zones, scaled paper with dimension chains and room schedules, and non-rectilinear `room polygon` / `room circle` / `arc` walls. A thin shim over @chanmeng666/archlang; the CLI stays the primary, token-cheaper interface.",
66
"keywords": [
@@ -42,7 +42,7 @@
4242
"prepack": "npm run build"
4343
},
4444
"dependencies": {
45-
"@chanmeng666/archlang": "^1.34.0",
45+
"@chanmeng666/archlang": "^1.35.0",
4646
"@modelcontextprotocol/sdk": "^1.29.0",
4747
"zod": "^3.25.76"
4848
},

packages/mcp/server.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
33
"name": "io.github.ChanMeng666/archlang-mcp",
44
"description": "Compile, describe, lint, validate, score and repair multi-storey and curved ArchLang floor plans.",
5-
"version": "0.2.14",
5+
"version": "0.2.15",
66
"repository": {
77
"url": "https://github.com/ChanMeng666/archlang",
88
"source": "github",
@@ -14,7 +14,7 @@
1414
"registryType": "npm",
1515
"registryBaseUrl": "https://registry.npmjs.org",
1616
"identifier": "@chanmeng666/archlang-mcp",
17-
"version": "0.2.14",
17+
"version": "0.2.15",
1818
"runtimeHint": "npx",
1919
"transport": {
2020
"type": "stdio"

0 commit comments

Comments
 (0)