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 d33e687
Browse filesBrowse the repository at this point in the historyBrowse files
`(aget a i j)` and `(aset a i j v)` raised arity errors where clj accepts the
variadic multidim forms — and nested arrays exist (`(make-array Long 2 3)`),
so the gap was reachable.
`aget`/`aset` are now variadic in the builtin itself: each extra index walks
into the nested array, the final aset pair is the ordinary store, exactly the
recursion clj's `(apply aget (aget a i) idxs)` composes. The D-446 barrier
sketched a core.clj-wrapper shape instead; the builtin recursion is smaller
and leaves the hot 2-arg/3-arg path untouched, so the sketch was not obeyed
(rows are memos, not contracts). The 8 typed `aset-*` gained clj's multidim
arm in core.clj: `([a i j & more] (apply aset-X (aget a i) j more))`.
Mechanised per the row's own anti-D-177 mandate: 5 clj-byte-matched golden
pairs in the arity_envelopes corpus (multidim get/set + catchable
out-of-bounds), 6 checks in phase14_arity_parity.sh (44/44) including AD-019
pins — the typed aset-* store without element-type checks because cljw arrays
are type-erased, where clj on a boxed array throws IllegalArgumentException.
The sweep surfaced those three DIFFs and AD-019 already covers them verbatim
("a typed-array constructor / aset does not coerce or type-check").
D-446 discharged.
Smell-audited: 1: the barrier's sketched shape was re-derived rather than
followed — Reservation-as-bias check came out the other way this time (the
smaller shape is also the finished form, because the variadic IS the builtin's
natural signature).
Copy file name to clipboardExpand all lines: .dev/debt.yaml
+6-6Lines changed: 6 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -1354,12 +1354,6 @@ active:
1354
1354
category: "perf"
1355
1355
barrier: "none hard — O-023 already ships the effective form. The 正しい姿 unification is a deliberate refactor that touches the gate-green O-023 path; a transducer stack (map's fn) ≠ a pred vector, so the unified representation needs design. Take up alongside a reduce-heavy bench that the current `[xform coll]` descriptor under-serves, or when the lazy-walk collapse is revisited with a real workload. Not blocking; the existing fused-reduce is correct + fast."
1356
1356
last_reviewed: "2026-06-15"
1357
-
- id: "D-446"
1358
-
status: "PARTIAL (2026-06-18 — MID/UNDER/over-arity sweep COMPLETE; only multidim residual open). An empirical both-sides arity probe (193 common clojure.core fns × arities 0-7, BOTH runtimes catch clojure.lang.ArityException; harness + data in private/arity_sweep/) found 22 over-strict fns (cljw REJECTS an arity clj accepts; ZERO over-lenient — the 0-arg class from the 2026-06-16 pass below stays clean). 14 fixed bug→fix (F-011): n-ary map/mapv/mapcat/list* (declare-d top-level -map-n-step + -spread, D-147 no-named-local-fn), bit-and-not variadic fold, resolve 2-arg env form (a local named in env → nil) [commit 982890aa]; the 8 typed array ctors gained the 2-arg (X-array size init-or-seq) form (uniform -array-from2 — value init fills, sequential init copies; the byte/short/char NUMBER-init divergence vs clj IS recorded as AD-036 deriving from AD-019, Devil-advocate-forked) [array commit]. Mechanised: test/diff/clj_corpus/arity_envelopes.txt (22 cases, all clj-byte-matched) + e2e phase14_arity_parity.sh (35/0). REMAINING OPEN SCOPE OF THIS ROW = multidim array indexing: (aget a i j …) and (aset a i j … v) + the typed aset-* multidim forms diverge at arity 3+/4+ (8 aset-* fns; aget is a builtin the ns-publics fn? sweep did not enumerate) — see barrier. EARLIER 0-ARG PASS (2026-06-16, kept for history): a fresh-context subagent probed the 0-ARG boundary (the not= precedent) + 22 over-arity + 20 extra-0-arg; found 10 divergences all aligned to clj — cljw-LENIENT = < > <= >= distinct? every-pred some-fn now throw; cljw-STRICT into + conj! now return clj values. ORIGINAL (2026-06-15, user-directed): arity-divergence audit — enumerate cljw fn arities, diff vs clj, classify each bug→fix or accepted→AD-NNN; big-bang-then-closed (clj_diff_sweep Discipline 2)."
1359
-
category: "clj-parity"
1360
-
quality_floor: "clj-parity: fn arity envelopes match clj (no silent over-lenient / missing arities)"
1361
-
barrier: "none for the common surface (DONE). Remaining = multidim array indexing, a distinct rare feature: cljw aget/aset are fixed 2-arg/3-arg Zig builtins, so (aget a i j)/(aset-int a i j v) raise an arity error where clj accepts the variadic multidim form. Nested arrays DO exist ((make-array nil 2 2) → (aget a 0) is a nested array), so it is reachable. array.zig docstring states the F-009 intent: multi-dim aget+aset are a core.clj variadic over the minimal builtins — but that .clj layer was never built. The clean form renames the builtins rt/__aget/rt/__aset + adds core.clj aget/aset variadic wrappers + aset-* multidim arms, but routes the HOT 2-arg/3-arg path through a .clj fn (perf-vs-F-009-layering call for the array/perf owner). Rare in real Clojure → low priority; mechanise via the arity_envelopes corpus when landed (anti-D-177)."
1362
-
last_reviewed: "2026-06-18"
1363
1357
- id: "D-447"
1364
1358
status: "open (2026-06-15, regex equivalence audit / ADR-0147). Regex parity gaps cljw's Pike-NFA matcher does NOT support — all currently RAISE NotImplemented (never silently wrong; the 48-golden `test/diff/clj_corpus/regex_equivalence.txt` deliberately excludes them; reluctant quantifiers `*? +? ?? {n,m}?` LANDED 2026-06-16 — split-priority swap pairing with the cut-on-match leftmost-first fix + a dedicated matchFull loop for the re-matches full-span case, corpus regex_equivalence): lookbehind `(?<=)`/`(?<!)`, named groups `(?<name>)`, backreferences `\\1`, `\\A \\z \\Z`, POSIX `[[:class:]]`. (Lookahead `(?=)`/`(?!)` and all four flags `(?imsx)` DO work.) NOT campaign-blocking — addressed only when a real workload needs them OR opportunistically alongside the ADR-0147 regex-perf engine work (reluctant quantifiers are a cheap split-priority swap that pairs naturally with the matcher changes; backrefs would need a backtracking fallback cljw rejects per ADR-0031, so likely stay a documented gap / RE2 posture). When a gap closes, MOVE its goldens into the equivalence corpus in the same cycle (corpus-backed discharge, anti-D-177). Also a depth-1 doc fix: `compile.zig:22-23` claims 'lookaround' unsupported but lookahead works."
1365
1359
category: "clj-parity"
@@ -2702,6 +2696,12 @@ standing:
2702
2696
barrier: "open after the D-440 arc completes (R4 + R5 must first rewrite the bulk of 'Phase N' citations to gap-area terms). Premature adoption = ~70 dangling citations with no 1:1 redirect. Trigger: D-440 R4/R5 done + a user nod to re-architect the planning axis (it is depth-4, the project's organizing metaphor)."
2703
2697
last_reviewed: "2026-06-15"
2704
2698
discharged:
2699
+
- id: "D-446"
2700
+
status: "PARTIAL (2026-06-18 — MID/UNDER/over-arity sweep COMPLETE; only multidim residual open). An empirical both-sides arity probe (193 common clojure.core fns × arities 0-7, BOTH runtimes catch clojure.lang.ArityException; harness + data in private/arity_sweep/) found 22 over-strict fns (cljw REJECTS an arity clj accepts; ZERO over-lenient — the 0-arg class from the 2026-06-16 pass below stays clean). 14 fixed bug→fix (F-011): n-ary map/mapv/mapcat/list* (declare-d top-level -map-n-step + -spread, D-147 no-named-local-fn), bit-and-not variadic fold, resolve 2-arg env form (a local named in env → nil) [commit 982890aa]; the 8 typed array ctors gained the 2-arg (X-array size init-or-seq) form (uniform -array-from2 — value init fills, sequential init copies; the byte/short/char NUMBER-init divergence vs clj IS recorded as AD-036 deriving from AD-019, Devil-advocate-forked) [array commit]. Mechanised: test/diff/clj_corpus/arity_envelopes.txt (22 cases, all clj-byte-matched) + e2e phase14_arity_parity.sh (35/0). REMAINING OPEN SCOPE OF THIS ROW = multidim array indexing: (aget a i j …) and (aset a i j … v) + the typed aset-* multidim forms diverge at arity 3+/4+ (8 aset-* fns; aget is a builtin the ns-publics fn? sweep did not enumerate) — see barrier. EARLIER 0-ARG PASS (2026-06-16, kept for history): a fresh-context subagent probed the 0-ARG boundary (the not= precedent) + 22 over-arity + 20 extra-0-arg; found 10 divergences all aligned to clj — cljw-LENIENT = < > <= >= distinct? every-pred some-fn now throw; cljw-STRICT into + conj! now return clj values. ORIGINAL (2026-06-15, user-directed): arity-divergence audit — enumerate cljw fn arities, diff vs clj, classify each bug→fix or accepted→AD-NNN; big-bang-then-closed (clj_diff_sweep Discipline 2)."
2701
+
category: "clj-parity"
2702
+
quality_floor: "clj-parity: fn arity envelopes match clj (no silent over-lenient / missing arities)"
2703
+
barrier: none — discharged
2704
+
last_reviewed: "2026-08-05"
2705
2705
- id: "D-571"
2706
2706
status: |-
2707
2707
DISCHARGED 2026-08-05 — the budget follows the work (thread-ownership
0 commit comments