You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e42ffac
Browse filesBrowse the repository at this point in the historyBrowse files
feat(meta): D-239 — namespace meta (alter-meta!/reset-meta!) + ns docstring lands as {:doc}
Smell-audited: 1: the ns ATTR-MAP + name-symbol meta stay skipped — split to
D-554 (needs a Value-in-node + ADR-0169 rooting design; the docstring rides
as a plain string, no rooting) rather than bundling a second design into
this unit.
Namespace gained a meta slot (GC-rooted in root_set's ns_vars walk as the
walk enters each ns); reset-meta!'s .ns arm + metaOf's .ns arm complete the
alter-meta! family (var/atom/agent/ref/ns). Sibling in the same unit: the
`(ns name "docstring")` docstring — previously silently skipped — now lands
as {:doc ...} ns meta in BOTH backends per the ADR-0036 contract: NsNode.doc
-> tree_walk evalNs + VM op_ns_with_filter (NsFilterEntry doc/refer_clojure,
bytecode v4 with the format-coverage guard + round-trip asserts + freeChunk
updated); shared meta.setNsDoc helper so semantics cannot drift; diff case
added. e2e phase15_ns_docstring (5 cases); clj-oracle-verified
({:doc "my doc", :k 1} after alter-meta!).
Copy file name to clipboardExpand all lines: .dev/debt.yaml
+11-17Lines changed: 11 additions & 17 deletions
Original file line number
Diff line number
Diff line change
@@ -24,6 +24,11 @@
24
24
# md-table-align no longer pads it to ~800 KB of whitespace.
25
25
26
26
active:
27
+
- id: "D-554"
28
+
status: "open (2026-07-06, split from D-239's discharge). The `(ns name {:attr-map} …)` ATTR-MAP and `(ns ^{:m 1} name)` name-symbol meta are still SKIPPED at analysis (special_forms.zig analyzeNs) — only the docstring lands as {:doc} ns meta. clj merges name-sym meta + attr-map + docstring into the ns meta. Rare vs the docstring (libs mostly use :author/:added attr-maps); needs a Form->Value map conversion at analysis + ADR-0169-style rooting OR an arena-thread of the literal into both backends (the doc rode NsFilterEntry as a plain string; a map needs a Value). Mechanise via phase15_ns_docstring e2e when landed."
29
+
category: "clj-parity"
30
+
barrier: "none hard — design choice: formToValue at analysis (needs AnalysisFrame rooting for the map Value in NsNode) vs re-analyzing the attr-map Form at execution. Take up easiest-first or on a lib whose ns attr-map meta is read programmatically."
31
+
last_reviewed: "2026-07-06"
27
32
- id: "D-547"
28
33
status: |-
29
34
open (2026-07-01, NARROWED same day). Enforcement-honesty sweep — surfaced by the
@@ -655,23 +660,6 @@ active:
655
660
barrier: |-
656
661
`src/lang/primitive/` (math / core / error today, 3 files) will grow with collection / sequence / io / numeric / type / spec primitives across Phase 5-14. ROADMAP A6 ≤ 1000-lines cap will breach on `core.zig` (general primitives bucket) first. Sub-directory restructure (`primitive/core/`, `primitive/sequence/`, etc.) should land when the second primitive file passes ~500 lines. Owner picks exact split shape **within F-NNN envelope** (= F-005 numeric tower primitives organisation must remain coherent across the split). | each Phase 5+ primitive wave
657
662
last_reviewed: "2026-05-28"
658
-
- id: "D-239"
659
-
status: "RE-NARROWED 2026-07-02 (audit): barrier opening ns + ref remain is half-stale — ref meta landed via D-533 (reset-meta! on refs verified). NS meta is the only remainder. ORIGINAL: now (PARTIAL: var + atom + AGENT + REF landed — agent meta via D-441 (agent.zig:110 + metadata.zig dispatch); REF meta via D-533 (2026-06-25: Ref.meta field + `(ref v :meta m)` ctor kwarg + meta/reset-meta! dispatch; `with-meta` on a ref correctly THROWS — clj's Ref is not IObj, so that is clj-parity, not a gap). Only NS meta still deferred. Corrected 2026-06-17 audit (agent) + 2026-06-25 audit (ref).)"
660
-
category: "runtime"
661
-
quality_floor: "metadata: alter-meta!/reset-meta! on namespace / ref / agent refs"
662
-
barrier: |-
663
-
**`alter-meta!` / `reset-meta!` cover Var + atom + agent refs; ns + ref
664
-
still deferred.** The Zig primitive `reset-meta!` mutates a Var's `.meta`
665
-
field, an atom's `.meta` slot, or an agent's meta (agent.zig:110 + the
666
-
metadata.zig dispatch, landed via D-441); `alter-meta!` is a core.clj defn
667
-
over it. clj also supports these on **namespaces and refs** — cljw has no
668
-
meta slot on Namespace (it is not yet a first-class Value-with-meta; see
669
-
ADR-0085 namespace-as-value), and ref is a Phase-15 concurrency type. A
dissolves when (a) Namespace gains a meta slot reachable through a namespace
672
-
Value (ADR-0085 follow-on), and (b) Phase 15 lands ref. potemkin's
673
-
`namespaces.clj` alter-meta! on a namespace is the first real consumer.
674
-
corpus alter_meta (8) covers the var/atom surface.
675
663
- id: "D-245"
676
664
status: "now (ADR-0092, 2026-06-05) — `locking` LANDED as Option A (header spinlock + threadlocal reentrancy held-set, runtime/concurrency/object_monitor.zig). Correct, reentrant, GC-safe (safepoint-polling spin), clj-result-equivalent (mutual-exclusion e2e = 400). The Option C blocking-monitor inflation is this row."
677
665
category: "concurrency"
@@ -6534,6 +6522,12 @@ discharged:
6534
6522
barrier: "DISCHARGED (was: no UTF-16 hasher)."
6535
6523
last_reviewed: "2026-07-06"
6536
6524
6525
+
- id: "D-239"
6526
+
status: "DISCHARGED 2026-07-06 — the LAST remainder (namespace meta) landed; alter-meta!/reset-meta!/meta now cover Var + atom + agent + ref + NAMESPACE. Namespace gained a meta slot (env.zig; GC-rooted in root_set's ns_vars walk as the walk enters each ns); reset-meta!'s .ns arm + metaOf's .ns arm; the stale 'var or atom' catalog template updated. SIBLING also landed same cycle: the `(ns name \"docstring\")` docstring — previously silently SKIPPED — now lands as {:doc …} ns meta in BOTH backends (NsNode.doc; tree_walk evalNs + VM op_ns_with_filter via NsFilterEntry.doc/refer_clojure + bytecode v4 serialization; shared meta.setNsDoc helper so semantics cannot drift; diff case per the ADR-0036 contract). e2e phase15_ns_docstring (5 cases incl. ns-doc-meta/ns-alter-meta); clj-oracle-verified ({:doc \"my doc\", :k 1} after alter-meta!). The ns ATTR-MAP + name-symbol meta remain skipped -> split to D-554 (needs a Value-in-node + rooting design). HISTORY: var (D-183) + atom + agent (D-441) + ref (D-533) landed earlier."
6527
+
category: "runtime"
6528
+
barrier: "DISCHARGED (was: ns meta slot missing)."
6529
+
last_reviewed: "2026-07-06"
6530
+
6537
6531
conventions: |-
6538
6532
- Structure: two top-level lists — `active:` and `discharged:`. Active entries carry id / status / category / barrier (+ optional quality_floor / last_reviewed); discharged entries carry id / discharged_at / resolution. Edit as YAML (no Markdown table to align).
6539
6533
- New debt: grep `.dev/debt.yaml` for class-overlap before adding (per `.claude/rules/debt_dedup.md`).
0 commit comments