Skip to content

docs(adr): ADR-0008 — neg reverse-only; purist/adulterated dialect#38

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/dazzling-albattani-ubS9r
Jun 18, 2026
Merged

docs(adr): ADR-0008 — neg reverse-only; purist/adulterated dialect#38
hyperpolymath merged 1 commit into
mainfrom
claude/dazzling-albattani-ubS9r

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Records the approved resolution of the ADR-0007 D2 open tension (the surviving DataExpr.neg primitive). Decision record only — feature-gating, lint, and certificate are follow-on implementation.

The decision

  • neg leaves the purist core. In purist-jtv, - is a parse error; subtraction is reverse-only (effect-level), in every number system.
  • neg/- is re-admitted only under an optional, feature-gated sugar aspect (adulterated-jtv), with a discouragement lint — it works but nags. Users aren't limited; the old way just isn't the default.
  • The compiler stamps every build with a purity certificate (purist vs adulterated, and which sugar) — the "co-product / pre-final product" that makes the escape hatch visible and accountable, not silent.
  • Chosen architecture: feature-gated dialect (rung 1); the sidecar desugarer and co-product grammar are noted as future purity upgrades.

The insight it pins

Subtraction-as-reverse-addition is effect-level (a reverse {} block + token); neg/a - b is expression-level (a pure value). That level mismatch is why neg is the tempting escape hatch — and why a purist refuses it. Ties into ADR-0007 D6 (reverse-addition is the subtraction in every system at the effect level; float stays Neutral/approximate).

Also catches STATE.a2ml up (license #36, hardening #37, ADR-0008).

Still parked for you: the two standards-blocked hardening items (secret-scanner.yml, scorecard perms), and the remaining queue — (b) echo + epistemic first-class, number-system semantics, license wave-2. The neg-dialect implementation (feature flag + lint + certificate) is the natural follow-on to this ADR.

https://claude.ai/code/session_01BJmfoz1ZS1Pejy9LLMY742


Generated by Claude Code

Records the approved resolution of the ADR-0007 D2 open tension (the surviving
DataExpr.neg primitive):

- neg leaves the purist core; in purist-jtv `-` is a parse error and subtraction
  is reverse-only (effect-level), in every number system.
- neg/`-` is re-admitted only under an optional feature-gated `sugar` aspect
  (adulterated-jtv), with a discouragement lint -- works but nags.
- the compiler stamps every build with a purity certificate (purist vs
  adulterated), making the escape hatch visible and accountable, not silent.
- chosen architecture: feature-gated dialect (rung 1); sidecar desugarer and
  co-product grammar noted as future purity upgrades.

Key insight recorded: subtraction-as-reverse-addition is effect-level while neg
is expression-level -- that mismatch is why neg is the escape hatch. Decision
record only; feature-gating + lint + certificate are follow-on implementation.

STATE.a2ml: artefact location + session-history catch-up (license #36,
hardening #37, ADR-0008).

https://claude.ai/code/session_01BJmfoz1ZS1Pejy9LLMY742
@github-actions

Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 51 issues detected

Severity Count
🔴 Critical 0
🟠 High 25
🟡 Medium 26
View findings
[
  {
    "reason": "No test directory or test files found",
    "type": "no_tests",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper",
    "action": "flag",
    "rule_module": "honest_completion",
    "severity": "high",
    "deduction": 20
  },
  {
    "reason": "Issue in secret-scanner.yml",
    "type": "missing_workflow",
    "file": "secret-scanner.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in scorecard.yml",
    "type": "scorecard_wrapper_missing_job_permissions",
    "file": "scorecard.yml",
    "action": "flag",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "unwrap() without prior check -- DoS via panic (10 occurrences, CWE-754)",
    "type": "unwrap_without_check",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/crates/jtv-core/benches/interpreter_bench.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "unwrap() without prior check -- DoS via panic (6 occurrences, CWE-754)",
    "type": "unwrap_without_check",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/crates/jtv-core/benches/parser_bench.rs",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "Js.Array2 deprecated -- use Array (3 occurrences)",
    "type": "deprecated_api",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/vscode-extension/src/Extension.res",
    "action": "search_replace",
    "rule_module": "migration_rules",
    "severity": "high"
  },
  {
    "reason": "Js.Promise deprecated -- use Promise (2 occurrences)",
    "type": "deprecated_api",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/vscode-extension/src/Extension.res",
    "action": "module_replace",
    "rule_module": "migration_rules",
    "severity": "medium"
  },
  {
    "reason": "Belt.Array deprecated -- use Array (30 occurrences)",
    "type": "deprecated_api",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/packages/jtv-analyzer/src/Main.res",
    "action": "module_replace",
    "rule_module": "migration_rules",
    "severity": "high"
  },
  {
    "reason": "Belt.Option deprecated -- use Option (2 occurrences)",
    "type": "deprecated_api",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/packages/jtv-analyzer/src/Main.res",
    "action": "module_replace",
    "rule_module": "migration_rules",
    "severity": "medium"
  },
  {
    "reason": "Js.Array2 deprecated -- use Array (7 occurrences)",
    "type": "deprecated_api",
    "file": "/home/runner/work/julia-the-viper/julia-the-viper/packages/jtv-analyzer/src/Main.res",
    "action": "search_replace",
    "rule_module": "migration_rules",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

@hyperpolymath
hyperpolymath marked this pull request as ready for review June 18, 2026 00:11
@hyperpolymath
hyperpolymath merged commit 525e9a2 into main Jun 18, 2026
29 checks passed
@hyperpolymath
hyperpolymath deleted the claude/dazzling-albattani-ubS9r branch June 18, 2026 00:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants