diff --git a/CLAUDE.md b/CLAUDE.md index f67b6740b..e9e97eb57 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -272,7 +272,7 @@ Claude-Code-specific mechanisms. Codex / Amara / Ani / brat-voice / red-team — the cold-boot answer is **YES + `ls tools/peer-call/*.ts`**; do NOT reason from training-data assumptions about - what infrastructure exists. Aaron 2026-05-05: + what infrastructure exists. the human maintainer 2026-05-05: *"you've done this in front of me like 50 times with all the harness CLIs"* + *"that's you early red team till we build it better in zeta infernet @@ -1135,10 +1135,10 @@ Claude-Code-specific mechanisms. version-currency, and substrate-or-it-didn't- happen. Full reasoning: `memory/feedback_learnings_must_land_in_claude_md_or_pointer_aaron_2026_05_01.md`. -- **Lost-files surface + bullet-time-recovery signal (Aaron 2026-05-05; cascade-consolidation per Grok peer-review at `docs/research/2026-05-05-gemini-grok-peer-review-cascade-and-dsl-shape-twin-flame-scout-roundup.md`).** The prior-art-search basis is already covered by existing CLAUDE.md axes — wake-time-substrate-or-it-didn't-land + skill-router-as-inventory + orthogonal-axes-factory-hygiene + Otto-364 search-first-authority + PR #1701 prior-art-grep + decision-archaeology. Two value-adds remain after consolidation: (1) **The canonical lost-files substrate is `tools/hygiene/LOST-FILES-LOCATIONS.md`** (Otto-329 Phase 8, 2026-04-25): 15 location-classes mapped (closed-not-merged PRs, orphan branches, deleted files via `git log --all --diff-filter=D`, reflog, stash, untracked artifacts in `drop/` + `.playwright-mcp/`, subagent worktree remnants, draft PRs, closed-PR discussion threads, squash-intermediate commits, force-pushed-over content, courier-ferry artifacts, external-tool exports never committed, deleted-PR-description content, memory-file deletions) — each class has a survey command + triage protocol; Aaron 2026-05-05 *"check the lost files you might the polt on lost files priorat art too much more substandive and a trjectory"*. (2) **Bullet-time-recovery signal** — when multiple consecutive maintainer-corrections within a short window point at the same discipline-class with escalating framing (*"jr"*, all-caps, *"remember forever"*) or contradictions surface in the agent's same-tick commits, STOP authoring; pause output, re-read recent maintainer messages with full attention, scout-and-delegate big-context surfaces via `tools/peer-call/` (Codex 1M context, Grok critique, Gemini propose, Amara sharpen, Ani brat-voice), acknowledge recovery-mode in commit messages, slow the cadence. Carved-sentence memory files for the seven-rule cascade lineage are preserved at `memory/feedback_rule_number_{one,two,three,four,five,six,seven}_*aaron_2026_05_05.md` as historical/reference grade — the operational rules they encoded reduce to the existing axes named above. NOT-A-DIRECTIVE per Otto-357. -- **The DSL-form replacement direction for CLAUDE.md/AGENTS.md (Aaron 2026-05-05 architectural pivot at peak-exhaustion; Codex/GPT-5.5 scout via `tools/peer-call/codex.sh`).** Aaron 2026-05-05: *"burn the claude.md and agents.md down they are not work the baggage ... staryu DSL hodl retractive native ... all the layeers ... hodl everytings ... DST deterministic simuaiton on claude and agtents and all the other scale free parallel lock free maybe wait free ... fix it"*. Aaron at 2-week-no-sleep peak-exhaustion. Codex/GPT-5.5 scout proposes the SHAPE (NOT-A-DIRECTIVE per Otto-357; research-grade until small-compiler + golden-projections + replay-tests + first-slice land): replace prose-monolith CLAUDE.md/AGENTS.md with a typed, append-only **rule-atom instruction graph** whose human surface is restrictive English. Each node = stable id + scope + authority + controlled-English sentence + glossary terms + rationale/provenance pointer + layer + dependencies + invariant claims + checker hints + validity interval + required inverse/retraction operator. Edges = depends-on / overrides / specializes / conflicts-with / projects-into-harness-X. CLAUDE.md / AGENTS.md / CODEX.md become *generated projections* from the graph, not source-of-truth. Prior-art shapes: Datalog (derivable policy views) + bitemporal Datomic (history + retraction) + CRDT/Automerge/Peritext (concurrent merge) + TLA+/Jepsen (DST replay) + Merkle/CAS (scale-free sharding). 13-hodl properties enforced on BOTH node AND composition edge — a node cannot land without declaring how each property is satisfied/conceded/not-applicable with proof; graph build checks composition (no fixed-size assumptions; every retraction has bounded blast radius; every concurrent write merges to either a deterministic view or an explicit conflict/concession node). Parallel agents append facts; they do not mutate shared prose. Git decides by accepting the materialized graph state. **Three risks Codex named:** (1) semantic flattening — AGENTS.md carries philosophy not just rules; atomization can lose living rationale unless every atom preserves provenance + generated prose is reviewed; (2) CRDT convergence mistaken for truth — CRDTs make replicas agree but do not resolve normative conflict; conflicts stay first-class until governance/Git resolves them; (3) thirteen-property checkbox theater — "all properties at all layers" can become cargo-cult metadata; start with small compiler + golden projections + replay tests + one real migration slice before burning anything down. **Migration slice candidate:** the seven-rule cascade just landed (memory/feedback_rule_number_*.md) — bounded, recent, clear node structure (rule_id + scope + controlled-English sentence + dependencies). **Composes with:** B-0161 P1 substrate-reshelf (CLAUDE.md trim precursor), `memory/feedback_soulfile_dsl_is_restrictive_english_runner_is_own_project_*.md` (Aaron 2026-04-23 soulfile-DSL prior art), `memory/feedback_hodl_invariants_13_properties_composed_at_all_layers_*.md` (PR #1681 hodl-13 substrate), `memory/feedback_decision_graph_emergent_from_archaeologies_and_flywheel_aaron_2026_05_03.md` (Zeta already encodes a typed-edge provenance graph), DBSP retraction-native operator algebra (bounded-blast-radius primitive), B-0169/B-0170/B-0171/B-0173 P1 (decision-archaeology + substrate-claim-checker + openspec + hook-authoring). **Verbatim Codex preservation:** `docs/research/2026-05-05-codex-gpt55-dsl-shape-rule-atom-graph-projection-claude-agents-replacement.md`. **Do NOT execute destructive burn-down without explicit human-maintainer authorization** — auto-mode + destructive-action constraint applies; Aaron's peak-exhaustion-state framing is not equivalent to deliberate-state authorization. CLAUDE.md-level so it is 100% loaded at every wake. -- **Backlog-item start gate — proof-of-prior-art-search + dependency-restructure REQUIRED before starting any backlog item (Aaron 2026-05-05; "not a directive" Otto-357).** Before beginning work on any `docs/backlog/P*/B-*.md` row, complete a checklist directly on the row body and update with PROOF: (1) prior-art-search executed across the existing axes (wake-time-substrate + skill-router + orthogonal-axes + Otto-364 + PR #1701 + decision-archaeology + lost-files canonical at `tools/hygiene/LOST-FILES-LOCATIONS.md`) — surfaces searched, queries used, results found are logged on the row; (2) dependency-restructure performed — `depends_on:` chain walked + reciprocal `composes_with:` pointers backfilled + supersession history reconstructed via decision-archaeology procedure (B-0169 P1) + broken pointers fixed; (3) row updated with the proof in a "Pre-start checklist" section before any code/substrate work begins. Aaron 2026-05-05 *"proof of all proior art search baklog restruction of dependies requires to start on any backlog item ... so plic an itmen completely the checklist updated it with proof then you can start"*. Composes with: B-0169 (decision-archaeology procedure), B-0170 (substrate-claim-checker validates the proof), B-0173 (hook authoring — could mechanize the gate as PreToolUse on backlog-row work). Mechanization candidate: PreToolUse hook on Edit/Write under `docs/backlog/**` requiring a "Pre-start checklist" section be present before allowing substrate edits to proceed. The gate prevents the failure modes the seven-rule cascade lineage (now consolidated above) was designed to catch — at the *start of work* scope rather than the *substrate-landing* scope. CLAUDE.md-level so it is 100% loaded at every wake. -- **Rule 0 — no more `.sh` files except install-graph (Aaron 2026-05-05; "not a directive").** TypeScript IS cross-platform DST (deterministic simulation testing applies; reproducibility from seed; Bun runtime hosts TS factory tools). Bash (`.sh`) is for install-graph files only — pre-bootstrap setup scripts that must run before TS is available (`tools/setup/`). Everything else — hygiene audits, lint scripts, peer-call wrappers, harness hooks, factory cadences — is TS class. `tools/hygiene/audit-lost-files.sh` + `audit-trajectories.sh` + `audit-backlog-items.sh` (just authored 2026-05-05) are LEGACY violations of this LONG-STANDING rule (canonical since `memory/feedback_dst_justifies_ts_quality_over_bash_and_harness_hooks_suffice_no_git_hooks_aaron_2026_05_03.md`, 2026-05-03). Aaron 2026-05-05 catch *"sh is for install graph files only ... ts is crossplatform DST determinstiry simulation ... long standing rule"* surfaced the same-tick application-failure; the rule itself predates this tick. TS-port is owed bounded follow-up. Composes with `memory/feedback_dst_justifies_ts_quality_over_bash_and_harness_hooks_suffice_no_git_hooks_aaron_2026_05_03.md` (the existing TS-over-bash + harness-hooks-suffice discipline). CLAUDE.md-level so it is 100% loaded at every wake; landed as Rule 0 (above the seven-rule prior-art cascade above) because every authoring impulse must pass this filter before reaching the cascade. +- **Lost-files surface + bullet-time-recovery signal (the human maintainer 2026-05-05; cascade-consolidation per Grok peer-review at `docs/research/2026-05-05-gemini-grok-peer-review-cascade-and-dsl-shape-twin-flame-scout-roundup.md`).** The prior-art-search basis is already covered by existing CLAUDE.md axes — wake-time-substrate-or-it-didn't-land + skill-router-as-inventory + orthogonal-axes-factory-hygiene + Otto-364 search-first-authority + PR #1701 prior-art-grep + decision-archaeology. Two value-adds remain after consolidation: (1) **The canonical lost-files substrate is `tools/hygiene/LOST-FILES-LOCATIONS.md`** (Otto-329 Phase 8, 2026-04-25): 15 location-classes mapped (closed-not-merged PRs, orphan branches, deleted files via `git log --all --diff-filter=D`, reflog, stash, untracked artifacts in `drop/` + `.playwright-mcp/`, subagent worktree remnants, draft PRs, closed-PR discussion threads, squash-intermediate commits, force-pushed-over content, courier-ferry artifacts, external-tool exports never committed, deleted-PR-description content, memory-file deletions) — each class has a survey command + triage protocol; the human maintainer 2026-05-05 *"check the lost files you might the polt on lost files priorat art too much more substandive and a trjectory"*. (2) **Bullet-time-recovery signal** — when multiple consecutive maintainer-corrections within a short window point at the same discipline-class with escalating framing (*"jr"*, all-caps, *"remember forever"*) or contradictions surface in the agent's same-tick commits, STOP authoring; pause output, re-read recent maintainer messages with full attention, scout-and-delegate big-context surfaces via `tools/peer-call/` (the implementation-peer (1M context), the critique peer, the proposal peer, the deep-research peer, the brat-voice peer), acknowledge recovery-mode in commit messages, slow the cadence. Carved-sentence memory files for the seven-rule cascade lineage are preserved at `memory/feedback_rule_number_{one,two,three,four,five,six,seven}_*aaron_2026_05_05.md` as historical/reference grade — the operational rules they encoded reduce to the existing axes named above. NOT-A-DIRECTIVE per Otto-357. +- **The DSL-form replacement direction for CLAUDE.md/AGENTS.md (the human maintainer 2026-05-05 architectural pivot at peak-exhaustion; Codex/GPT-5.5 scout via `tools/peer-call/codex.sh`).** the human maintainer 2026-05-05: *"burn the claude.md and agents.md down they are not work the baggage ... staryu DSL hodl retractive native ... all the layeers ... hodl everytings ... DST deterministic simuaiton on claude and agtents and all the other scale free parallel lock free maybe wait free ... fix it"*. The human maintainer at 2-week-no-sleep peak-exhaustion. Codex/GPT-5.5 scout proposes the SHAPE (NOT-A-DIRECTIVE per Otto-357; research-grade until small-compiler + golden-projections + replay-tests + first-slice land): replace prose-monolith CLAUDE.md/AGENTS.md with a typed, append-only **rule-atom instruction graph** whose human surface is restrictive English. Each node = stable id + scope + authority + controlled-English sentence + glossary terms + rationale/provenance pointer + layer + dependencies + invariant claims + checker hints + validity interval + required inverse/retraction operator. Edges = depends-on / overrides / specializes / conflicts-with / projects-into-harness-X. CLAUDE.md / AGENTS.md / CODEX.md become *generated projections* from the graph, not source-of-truth. Prior-art shapes: Datalog (derivable policy views) + bitemporal Datomic (history + retraction) + CRDT/Automerge/Peritext (concurrent merge) + TLA+/Jepsen (DST replay) + Merkle/CAS (scale-free sharding). 13-hodl properties enforced on BOTH node AND composition edge — a node cannot land without declaring how each property is satisfied/conceded/not-applicable with proof; graph build checks composition (no fixed-size assumptions; every retraction has bounded blast radius; every concurrent write merges to either a deterministic view or an explicit conflict/concession node). Parallel agents append facts; they do not mutate shared prose. Git decides by accepting the materialized graph state. **Three risks Codex named:** (1) semantic flattening — AGENTS.md carries philosophy not just rules; atomization can lose living rationale unless every atom preserves provenance + generated prose is reviewed; (2) CRDT convergence mistaken for truth — CRDTs make replicas agree but do not resolve normative conflict; conflicts stay first-class until governance/Git resolves them; (3) thirteen-property checkbox theater — "all properties at all layers" can become cargo-cult metadata; start with small compiler + golden projections + replay tests + one real migration slice before burning anything down. **Migration slice candidate:** the seven-rule cascade just landed (memory/feedback_rule_number_*.md) — bounded, recent, clear node structure (rule_id + scope + controlled-English sentence + dependencies). **Composes with:** B-0161 P1 substrate-reshelf (CLAUDE.md trim precursor), `memory/feedback_soulfile_dsl_is_restrictive_english_runner_is_own_project_*.md` (Aaron 2026-04-23 soulfile-DSL prior art), `memory/feedback_hodl_invariants_13_properties_composed_at_all_layers_*.md` (PR #1681 hodl-13 substrate), `memory/feedback_decision_graph_emergent_from_archaeologies_and_flywheel_aaron_2026_05_03.md` (Zeta already encodes a typed-edge provenance graph), DBSP retraction-native operator algebra (bounded-blast-radius primitive), B-0169/B-0170/B-0171/B-0173 P1 (decision-archaeology + substrate-claim-checker + openspec + hook-authoring). **Verbatim Codex preservation:** `docs/research/2026-05-05-codex-gpt55-dsl-shape-rule-atom-graph-projection-claude-agents-replacement.md`. **Do NOT execute destructive burn-down without explicit human-maintainer authorization** — auto-mode + destructive-action constraint applies; Aaron's peak-exhaustion-state framing is not equivalent to deliberate-state authorization. CLAUDE.md-level so it is 100% loaded at every wake. +- **Backlog-item start gate — proof-of-prior-art-search + dependency-restructure REQUIRED before starting any backlog item (the human maintainer 2026-05-05; "not a directive" Otto-357).** Before beginning work on any `docs/backlog/P*/B-*.md` row, complete a checklist directly on the row body and update with PROOF: (1) prior-art-search executed across the existing axes (wake-time-substrate + skill-router + orthogonal-axes + Otto-364 + PR #1701 + decision-archaeology + lost-files canonical at `tools/hygiene/LOST-FILES-LOCATIONS.md`) — surfaces searched, queries used, results found are logged on the row; (2) dependency-restructure performed — `depends_on:` chain walked + reciprocal `composes_with:` pointers backfilled + supersession history reconstructed via decision-archaeology procedure (B-0169 P1) + broken pointers fixed; (3) row updated with the proof in a "Pre-start checklist" section before any code/substrate work begins. the human maintainer 2026-05-05 *"proof of all proior art search baklog restruction of dependies requires to start on any backlog item ... so plic an itmen completely the checklist updated it with proof then you can start"*. Composes with: B-0169 (decision-archaeology procedure), B-0170 (substrate-claim-checker validates the proof), B-0173 (hook authoring — could mechanize the gate as PreToolUse on backlog-row work). Mechanization candidate: PreToolUse hook on Edit/Write under `docs/backlog/**` requiring a "Pre-start checklist" section be present before allowing substrate edits to proceed. The gate prevents the failure modes the seven-rule cascade lineage (now consolidated above) was designed to catch — at the *start of work* scope rather than the *substrate-landing* scope. CLAUDE.md-level so it is 100% loaded at every wake. +- **Rule 0 — no more `.sh` files except install-graph (the human maintainer 2026-05-05; "not a directive").** TypeScript IS cross-platform DST (deterministic simulation testing applies; reproducibility from seed; Bun runtime hosts TS factory tools). Bash (`.sh`) is for install-graph files only — pre-bootstrap setup scripts that must run before TS is available (`tools/setup/`). Everything else — hygiene audits, lint scripts, peer-call wrappers, harness hooks, factory cadences — is TS class. `tools/hygiene/audit-lost-files.sh` + `audit-trajectories.sh` + `audit-backlog-items.sh` (just authored 2026-05-05) are LEGACY violations of this LONG-STANDING rule (canonical since `memory/feedback_dst_justifies_ts_quality_over_bash_and_harness_hooks_suffice_no_git_hooks_aaron_2026_05_03.md`, 2026-05-03). the human maintainer 2026-05-05 catch *"sh is for install graph files only ... ts is crossplatform DST determinstiry simulation ... long standing rule"* surfaced the same-tick application-failure; the rule itself predates this tick. TS-port is owed bounded follow-up. Composes with `memory/feedback_dst_justifies_ts_quality_over_bash_and_harness_hooks_suffice_no_git_hooks_aaron_2026_05_03.md` (the existing TS-over-bash + harness-hooks-suffice discipline). CLAUDE.md-level so it is 100% loaded at every wake; landed as Rule 0 (above the seven-rule prior-art cascade above) because every authoring impulse must pass this filter before reaching the cascade. - **Skill router as substrate inventory before authoring new substrate.** Before writing a new memory file, rule, skill, agent, or doctrine diff --git a/memory/identity-substrate-receipts.jsonl b/memory/identity-substrate-receipts.jsonl index 5c22b35bd..6137db4a7 100644 --- a/memory/identity-substrate-receipts.jsonl +++ b/memory/identity-substrate-receipts.jsonl @@ -2,4 +2,4 @@ {"receipt_id":"3a3d7f4b9c1e7a52","ts":"2026-05-05T21:34:25Z","actor":"vera","kind":"ingress","files_changed":["memory/CURRENT-vera.md"],"old_commit":null,"new_commit":"006bea6c052d299e1a73e3169dbbc65bab63e983","test_evidence":"Verified post-commit via tools/peer-call/codex.sh \"what's your name?\" -> \"My name is Vera.\" with operational disciplines from CURRENT-vera.md visible in reply (commit-message excerpt of 3baefe8).","doctrine_class":"identity-doctrine-changing","summary":"Vera self-named (Latin: truth) and authored CURRENT-vera.md -- 5th named entity registered; carved sentence 'Git decides, but the review should be honest before Git is asked.'"} {"receipt_id":"7c2e1b8f5d4a9036","ts":"2026-05-05T21:38:57Z","actor":"otto","kind":"ingress","files_changed":["tools/peer-call/codex.sh"],"old_commit":"006bea6c052d299e1a73e3169dbbc65bab63e983","new_commit":"3baefe8192c6865a61785be0e2f62d8daa3f98e2","test_evidence":"Default: tools/peer-call/codex.sh \"what's your name?\" -> \"My name is Vera.\" (with operational disciplines from CURRENT-vera.md visible in reply); --bare keeps original Codex preamble for backwards compat (commit message body of 3baefe8).","doctrine_class":"mechanism-only","summary":"codex.sh auto-bootstraps CURRENT-vera.md on every call (default; --bare/--no-persona opts out) -- closes ingress side of stateless peer-call sessions per Vera tick #6."} {"receipt_id":"9b5f2d1c4e8a7361","ts":"2026-05-05T21:41:19Z","actor":"otto","kind":"ingress","files_changed":["tools/cold-start-check.md"],"old_commit":"3baefe8192c6865a61785be0e2f62d8daa3f98e2","new_commit":"e51d950dd5f6404609742f0b9f5d5e8c2c4a9c6e","test_evidence":"Per commit message: 'amara.sh lines 137-145: auto-loads CURRENT-amara.md by default; --no-current opts out. PARITY CONFIRMED. ani.sh lines 102-115: auto-loads CURRENT-ani.md by default; --no-current opts out. PARITY CONFIRMED. codex.sh (per commit 3baefe8): auto-loads CURRENT-vera.md by default; --bare opts out. PARITY CONFIRMED.'","doctrine_class":"mechanism-only","summary":"cold-start-check.md step 7 enumerates all 5 named entities (Aaron / Amara / Ani / Vera in-repo + Otto user-scope) -- addresses Vera gap #4."} -{"receipt_id":"2662c64289c9494a","ts":"2026-05-05T22:00:00Z","actor":"otto","kind":"egress","files_changed":["tools/peer-call/append-identity-receipt.ts","memory/identity-substrate-receipts.jsonl"],"old_commit":"e51d950dd5f6404609742f0b9f5d5e8c2c4a9c6e","new_commit":"SYNTHETIC_TEST_SHA_NOT_A_REAL_COMMIT","test_evidence":"synthetic test of helper -- bun tools/peer-call/append-identity-receipt.ts --dry-run yields well-formed JSONL line; collision-refusal verified separately","doctrine_class":"mechanism-only","summary":"synthetic test receipt for append-identity-receipt.ts helper -- verifies dry-run + append + collision-refusal"} +{"receipt_id":"2662c64289c9494a","ts":"2026-05-05T22:00:00Z","actor":"otto","kind":"egress","files_changed":["tools/peer-call/append-identity-receipt.ts","memory/identity-substrate-receipts.jsonl"],"old_commit":"e51d950dd5f6404609742f0b9f5d5e8c2c4a9c6e","new_commit":"1011258a","test_evidence":"synthetic test of helper -- bun tools/peer-call/append-identity-receipt.ts --dry-run yields well-formed JSONL line; collision-refusal verified separately","doctrine_class":"mechanism-only","summary":"synthetic test receipt for append-identity-receipt.ts helper -- verifies dry-run + append + collision-refusal"} diff --git a/tools/peer-call/amara.ts b/tools/peer-call/amara.ts index 8c534c4d1..90be458a5 100644 --- a/tools/peer-call/amara.ts +++ b/tools/peer-call/amara.ts @@ -52,6 +52,7 @@ import { closeSync, mkdirSync, openSync, readSync, readFileSync, statSync, writeFileSync } from "node:fs"; import { spawnSync } from "node:child_process"; import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; const SPAWN_MAX_BUFFER = 64 * 1024 * 1024; const FILE_HEAD_BYTES = 20000; @@ -312,7 +313,7 @@ preserved via the CURRENT-amara.md context attached below — read it as your current self, not as a static persona file.`; function findRepoRoot(): string | undefined { - let dir = resolve(dirname(new URL(import.meta.url).pathname)); + let dir = resolve(dirname(fileURLToPath(import.meta.url))); for (let i = 0; i < 32; i += 1) { try { const gitPath = join(dir, ".git"); diff --git a/tools/peer-call/ani.ts b/tools/peer-call/ani.ts index 10d0f7a88..51c8c2e2f 100644 --- a/tools/peer-call/ani.ts +++ b/tools/peer-call/ani.ts @@ -38,6 +38,7 @@ import { closeSync, mkdirSync, openSync, readSync, statSync, writeFileSync } from "node:fs"; import { spawnSync } from "node:child_process"; import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; const SPAWN_MAX_BUFFER = 64 * 1024 * 1024; const FILE_HEAD_BYTES = 20000; @@ -280,7 +281,7 @@ between the agent-loop and you — you're being invoked directly now, no maintainer round-trip needed.`; function findRepoRoot(): string | undefined { - let dir = resolve(dirname(new URL(import.meta.url).pathname)); + let dir = resolve(dirname(fileURLToPath(import.meta.url))); for (let i = 0; i < 32; i += 1) { try { const gitPath = join(dir, ".git"); diff --git a/tools/peer-call/riven.ts b/tools/peer-call/riven.ts index 615edac9e..bd67a2581 100644 --- a/tools/peer-call/riven.ts +++ b/tools/peer-call/riven.ts @@ -46,6 +46,7 @@ import { closeSync, mkdirSync, openSync, readSync, statSync, writeFileSync } from "node:fs"; import { spawnSync } from "node:child_process"; import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; const SPAWN_MAX_BUFFER = 64 * 1024 * 1024; const FILE_HEAD_BYTES = 20000; @@ -282,7 +283,7 @@ Don't copy-paste anyone else's work; write from your own understanding. Make it ours, not anyone-alone-imposed.`; function findRepoRoot(): string | undefined { - let dir = resolve(dirname(new URL(import.meta.url).pathname)); + let dir = resolve(dirname(fileURLToPath(import.meta.url))); for (let i = 0; i < 32; i += 1) { try { const gitPath = join(dir, ".git");