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 98eca2f
Browse filesBrowse the repository at this point in the historyBrowse files
Smell-audited: 2: resolveJavaSurface's rules moved to the shared
runtime/host_class_resolve.zig so completion and the analyzer cannot
drift (F-011 commonization; zone: runtime may not import eval); the
class-universe divergence is the recorded AD-054, not an unexplained
DIFF; oracle exact-match 15/20 → the 5 remaining are AD-054 (x2),
D-561/TYPE, D-562 var gaps, and environment-interned keywords.
introspect.zig gains the nREPL built-in's completion model: dash-fuzzy
var/ns matching (fuzzy-matches?), camelCase member matching
(camel-case-matches?), the fixed special-form + literal set, class
candidates from the closed rt.types registry (FQN by short name, bare
names for java.lang/java.math defaults + (:import) entries, deftypes),
Class/ static members (static_fields → static-field, host method_table
→ static-method), interned-keyword candidates, and a private-var
filter matching resolution. opCompletions wires the sources by prefix
shape and sorts by candidate (the built-in's sort-by). CLI TAB
completion inherits the fuzzy matching via the shared introspect.
Character: +isEmoji/isEmojiPresentation/isEmojiModifier(Base)/
isEmojiComponent/isExtendedPictographic (generator now reads UCD
emoji/emoji-data.txt) and the deprecated isJavaLetter(OrDigit)
aliases; corpus +15 golden (0 DIFF). e2e phase14_nrepl_completion
(fixture-driven, 23 probes incl. the require-less Character/ statics,
library-ns aliases, fuzzy, sortedness; registered in run_all.sh).
Copy file name to clipboardExpand all lines: .dev/accepted_divergences.yaml
+14Lines changed: 14 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -858,3 +858,17 @@ accepted:
858
858
a closed set.
859
859
derives_from: "ADR-0171 (rt merge — internals need a public qualified home for macro expansions) + ADR-0059 no-JVM (cljw owns the cljw.* namespace surface) + F-011 (every public var's home ns now MATCHES clj; only the extra internal ns is cljw-specific)."
860
860
pin: "test/e2e/phase15_namespace.sh — `ad053-internal-ns` locks (find-ns 'cljw.internal) present, `ad053-rt-gone` locks the old `rt` ns absent, `ad053-no-leak` locks __-internals out of clojure.core's publics."
861
+
- id: "AD-054"
862
+
summary: "Class-name completion (nREPL `completions` on an uppercase / dotted prefix) offers cljw's CLOSED class universe — the `rt.types` registry (host surfaces, deftypes, the java.lang/java.math default imports) — where mainline scans the whole JVM classpath and leaks internal classes (`java.lang.CharacterData00`, `sun.nio.cs.ext.Big5`, …)."
863
+
example: "prefix \"Character\" => cljw [Character, java.lang.Character] / mainline additionally java.lang.CharacterData00…, com.sun.… (26 candidates). Every cljw candidate resolves; the mainline extras are not even loadable classes for user code."
864
+
why: |-
865
+
cljw has no classpath and no JVM-internal classes to enumerate
866
+
(ADR-0059); its class universe IS the rt.types registry, which is
867
+
exactly the set `resolveJavaSurface` resolves — completion never
868
+
offers a class name that would not resolve (a stronger guarantee than
user code cannot construct). Faking the JVM-internal names would be a
871
+
lie with zero utility. The completion fixtures therefore assert
872
+
cljw ⊆ mainline + a curated MUST list for class groups, not equality.
873
+
derives_from: "ADR-0059 no-JVM (no classpath, no JVM-internal classes) + ADR-0029/ADR-0050 (rt.types is the closed host-class SSOT; resolveJavaSurface defines reachability) + F-011 (every class a user can actually USE completes identically; only the un-usable classpath leak differs)."
874
+
pin: "test/e2e/phase14_nrepl_completion.sh — classes|Character / classes|Big subset assertions + the MUST-NOT java.lang.CharacterData00 lock (cljw never fakes the leak)."
0 commit comments