{"_id":"@1stcompiler/walnut.js","_rev":"6-0077a61c5cd480443a2d0e312ff17550","name":"@1stcompiler/walnut.js","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"@1stcompiler/walnut.js","version":"0.0.1","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","_id":"@1stcompiler/walnut.js@0.0.1","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"dist":{"shasum":"6829fa36a79f247418a2554ef2708a1ea4d06ca1","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.1.tgz","fileCount":13,"integrity":"sha512-2XnIeNCC00qaYsTlQuCh8w62pUed99tVy119Cpyf714Vv1K09hsqF57QuFbbcoZFB1mH+j28WdckM2QGmLlbGQ==","signatures":[{"sig":"MEUCIG4P/tG/qLXyc9+6jPk9+2sxyS46PLkdyrWQITP490v+AiEAgYaGsxnZqluVLF0FuD/jjUW6GOWi0hEYACTDQcNLRts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46755},"main":"index.js","engines":{"node":">=18"},"scripts":{"test":"node test/smoke.js"},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"_npmVersion":"11.12.1","description":"The programming language that runs the universe. The universe is not doing great.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walnut.js_0.0.1_1777844701831_0.9439420136447929","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@1stcompiler/walnut.js","version":"0.0.2","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","_id":"@1stcompiler/walnut.js@0.0.2","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"dist":{"shasum":"2535b40693ab4e8cd37f6fd5ee7a9966b4440cc7","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.2.tgz","fileCount":13,"integrity":"sha512-sxkpjgggrtwyGzliuYa6M/avuSokPI7trgWLtKXYCVvybyU7VF5/OrCCTttRT5Nhlbqo36SHc/zSLEwx3UJnHw==","signatures":[{"sig":"MEYCIQD1Ad7pTcxKaU0303Sd38LsZ0iz2mwEBmGdfsX7SmeNMgIhAOjNBGuN1Vj07l5uc/aOEndK2QwTqZeKPxe+JsqI60Rb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46824},"main":"index.js","engines":{"node":">=18"},"scripts":{"test":"node test/smoke.js"},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"_npmVersion":"11.12.1","description":"The programming language that runs the universe. The universe is not doing great.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"@1stcompiler/walnut.js":"^0.0.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walnut.js_0.0.2_1777846052562_0.4449483106644898","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@1stcompiler/walnut.js","version":"0.0.3","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","_id":"@1stcompiler/walnut.js@0.0.3","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"dist":{"shasum":"ba48f57befce9eaf0e80f22915e9a404f4583cbb","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.3.tgz","fileCount":13,"integrity":"sha512-EkS4+zB4HVIoRW8Qh1ia7jyV2pudZfSa1CXVY9vxA/dBdPPMmGiS0swvIALeQShrMnwLTLDqcc2pI0bDhkNQDQ==","signatures":[{"sig":"MEQCIA6wj1lNH0gltXttHFyyEQziXhz6alYSsG86IPNn3+o4AiABZCWDqyjP3aPpUvyI+pf32jKSfX3jIu/M6U6dB0T59g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48912},"main":"index.js","engines":{"node":">=18"},"scripts":{"test":"node test/smoke.js"},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"_npmVersion":"11.12.1","description":"The programming language that runs the universe. The universe is not doing great.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walnut.js_0.0.3_1777846515147_0.13395868014313828","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@1stcompiler/walnut.js","version":"0.0.4","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","_id":"@1stcompiler/walnut.js@0.0.4","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"dist":{"shasum":"6c785ac640e3c419a34c069eb3ee638362c20ee1","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.4.tgz","fileCount":17,"integrity":"sha512-zsKZ7H1lC1TJHcvL+seT2HPKggDdImZ3AdGtTnh9EQIPmi/TQy+ZD9DJJucW5Cbe6kSXs5BjuD9dnCngvooz0w==","signatures":[{"sig":"MEQCIHwoXPmXhvItqrr747cXwaVtcIEjecEz2TWMwtLsTe8wAiBcddD7pfTPaguz0opQP4EC18umcrpicXbM/hLwnaJCCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63004},"main":"index.js","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"d6da49149c2287cbb377e4150fecae30e77a5578","scripts":{"test":"node test/smoke.js"},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"_npmVersion":"11.12.1","description":"The programming language that runs the universe. The universe is not doing great.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walnut.js_0.0.4_1777849497512_0.7462559844522356","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@1stcompiler/walnut.js","version":"0.0.5","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","_id":"@1stcompiler/walnut.js@0.0.5","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"dist":{"shasum":"3c47abde15d0b794171a091f32e5911042975e9e","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.5.tgz","fileCount":17,"integrity":"sha512-TTdwfFqqVd5Ta/jbBOJcbN9icD6DV9RwZ3ImvcaDp88lX23yUyu5pxnZYVhRROasPgVtrYQxONrFcx6TK+rQGg==","signatures":[{"sig":"MEUCIQCWbtUFDK9rBh8JhPprgqNZ6T/6PQMZi5Lxv3UQpG8mlgIgDb5s0vwPPmrfdGqxRCrSTert7WeMzfmTOR+89IPcUfg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64450},"main":"index.js","types":"index.d.ts","engines":{"node":">=18"},"gitHead":"d6da49149c2287cbb377e4150fecae30e77a5578","scripts":{"test":"node test/smoke.js"},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"_npmVersion":"11.12.1","description":"The programming language that runs the universe. The universe is not doing great.","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/walnut.js_0.0.5_1778015540063_0.07790480444002768","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@1stcompiler/walnut.js","version":"0.0.6","description":"The programming language that runs the universe. The universe is not doing great.","main":"index.js","types":"index.d.ts","scripts":{"test":"node test/smoke.js"},"engines":{"node":">=18"},"keywords":["walnut","prophecy","corelandia","soup","tuesday"],"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","gitHead":"d6da49149c2287cbb377e4150fecae30e77a5578","_id":"@1stcompiler/walnut.js@0.0.6","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-GRCvmSyDR3RLiG99f6MhhKFP069xjBxka1o1ty/5pgjLhadTMFn16uvHKAODog/T0DL7k75mWkXbQYh9GCkreA==","shasum":"c0ff588d28d318a84f1d9879f840884daaec698a","tarball":"https://registry.npmjs.org/@1stcompiler/walnut.js/-/walnut.js-0.0.6.tgz","fileCount":20,"unpackedSize":77378,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDWQW9VKm8uWIO9iSv+WWe+DTy+iGkwM3JSfKRldbFHxAiEAwF7OOFVfF9Raxbp0c5DzxxhG1PM60h8kLVGTY93VGSw="}]},"_npmUser":{"name":"1stcompiler","email":"thecompiler1st@proton.me"},"directories":{},"maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/walnut.js_0.0.6_1778089064244_0.6322926901270423"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-03T21:45:01.775Z","modified":"2026-05-06T17:37:44.531Z","0.0.1":"2026-05-03T21:45:01.984Z","0.0.2":"2026-05-03T22:07:32.702Z","0.0.3":"2026-05-03T22:15:15.300Z","0.0.4":"2026-05-03T23:04:57.649Z","0.0.5":"2026-05-05T21:12:20.223Z","0.0.6":"2026-05-06T17:37:44.413Z"},"author":{"name":"theCompiler_1st"},"license":"SEE LICENSE IN LICENSE","keywords":["walnut","prophecy","corelandia","soup","tuesday"],"description":"The programming language that runs the universe. The universe is not doing great.","maintainers":[{"name":"1stcompiler","email":"thecompiler1st@proton.me"}],"readme":"# walnut.js\n\n> The programming language that runs the universe. Use with caution. The universe is not doing great.\n\n```bash\nnpm install @1stcompiler/walnut.js\n```\n\n> Not here for the code? [Read the story.](https://walnutprophecy.com)\n\n---\n\n## What Is This\n\nwalnut.js is the underlying runtime of Corelandia, a post-apocalyptic bureaucratic mythology that emerged from a single surviving walnut after humanity deleted itself via terms of service.\n\nIt was written by theCompiler_1st. Annotations suggest theCompiler_1st was not entirely certain what they were building.\n\nThis package is a real JavaScript library. It also powers a universe. These facts are not in conflict.\n\n```js\nconst walnut = require('@1stcompiler/walnut.js');\n\nwalnut.nutCall('summonChosenOne', {\n  name: 'Gerald',\n  heroic_potential: walnut.nonut,\n}, function(result) {\n  console.log(result.chosen);               // true\n  console.log(result['disclaimer.gourd']);  // 'still soup'\n  console.log(result.soup_probability);     // 0.847 (varies; never below 0.65)\n});\n\n// [BUREAU OF CHOSENDOM] Filing #G-2026-3886\n// Action: nutCall('summonChosenOne') initiated\n// Status: PROCESSING\n// Note: Gerald has been notified via standard acorn bell.\n// Processing time: 4-6 Tuesdays.\n```\n\n---\n\n## Requirements\n\nNode.js 18 or higher. `scrollFetch` uses `globalThis.fetch`, which requires Node 18+. Everything else works on 16, but the universe requires 18. This is non-negotiable.\n\nReality is optional but recommended.\n\n---\n\n## Installation\n\n```bash\nnpm install @1stcompiler/walnut.js\n```\n\n---\n\n## Core API\n\n### Booleans\n\n```js\nwalnut.yesnut   // true\nwalnut.nonut    // false\n```\n\nThe universe runs on `yesnut` and `nonut`. Standard booleans still work. The universe just ignores them.\n\n---\n\n### walnut.declare()\n\nThe fluent builder. Used to instantiate anything in the prophecy engine.\n\n```js\nconst chosen = walnut.declare('Gerald')\n  .acorn('heroic_potential', walnut.nonut)   // core identity\n  .whisker('threat_assessment', 'minimal')  // sensory / evaluation\n  .gourd('disclaimer', 'still soup')        // caveats and legal notices\n  .burrow();                                // seal and return\n```\n\n`burrow()` returns a frozen object. The Bureau does not offer refunds.\n\nThe sealed object contains both flat and nested access for every field:\n\n```js\nchosen.heroic_potential           // false  (flat, via .acorn)\nchosen['heroic_potential.acorn']  // false  (suffix-keyed)\n\nchosen.disclaimer                 // { gourd: 'still soup' }  (nested, via .gourd)\nchosen['disclaimer.gourd']        // 'still soup'  (flat suffix key)\n\nchosen.filing_number              // 'CHO-2026-0047'\nchosen.status                     // 'PENDING_ACORN_BELL'\nchosen.burrowed                   // true\n```\n\n**Suffix reference:**\n- `.acorn(key, value)` - core identity. Stored flat. Who or what this thing is.\n- `.acorn(key, validator)` - register a validator function for `key`. Runs at `.burrow()` against whatever value is set for `key`. A function is always treated as a validator; wrap it (e.g. `{ fn: myFn }`) to store a function as a value.\n- `.acorn(key, value, validator)` - set a value AND register a validator. Validator runs at `.burrow()` against `value`.\n- `.whisker(key, value)` - assessment. What the prophecy engine thinks. Also flat.\n- `.gourd(key, value)` - disclaimers and caveats. Stored nested as `{ gourd: value }` because legal notices are never plainly stated.\n- `.burrow()` - seals the declaration, runs all registered validators, throws `UnionViolation` on validation failure, returns a frozen object with a canonical filing number.\n\n**Validation example:**\n\n```js\nconst chosen = walnut.declare('Gerald')\n  .acorn('heroic_potential', false, val => typeof val === 'boolean')\n  .burrow();\n// fine: false is a boolean\n\nwalnut.declare('Gerald')\n  .acorn('heroic_potential', 'maybe', val => typeof val === 'boolean')\n  .burrow();\n// throws UnionViolation: validation refused for `heroic_potential`. The Bureau cannot certify this entry.\n```\n\n---\n\n### walnut.nutCall()\n\nThe primary invocation method. Executes a callback inside the prophecy engine with Bureau logging.\n\n```js\nwalnut.nutCall(name, options, callback)\n// or\nwalnut.nutCall(name, callback)\n```\n\n```js\nwalnut.nutCall('initiateQuestProtocol', {\n  chosen: gerald,\n  urgency: 'low',\n}, function(result) {\n  console.log(result.chosen);              // true\n  console.log(result.displacement_index);  // always between 0.65 and 0.95\n  console.log(result.complications);       // ['unspecified existential drift']\n  console.log(result.filing_number);       // 'G-2026-NNNN'\n});\n```\n\n**Full result shape:**\n\n| Field | Type | Notes |\n|-------|------|-------|\n| `chosen` | boolean | Always `true`. This is the problem. |\n| `displacement_index` | number | 0.65 to 0.95. Below 0.65 would be optimism. |\n| `soup_probability` | number | Alias for `displacement_index`. Same value, internal name. |\n| `complications` | array | At minimum `['unspecified existential drift']`. |\n| `filing_number` | string | Permanent. Assigned at invocation. |\n| `disclaimer` | object | `{ gourd: 'still soup' }` |\n| `'disclaimer.gourd'` | string | `'still soup'` (flat suffix key) |\n| `name` | string | The name passed to nutCall. |\n| `options` | object | The options passed to nutCall. |\n\nThe Bureau prefers `displacement_index` in public-facing contexts. `soup_probability` remains as the canonical internal name.\n\n`displacement_index` is not configurable. It was never configurable. Do not file a complaint about this. The complaint will be filed under `SOUP_IMMUTABLE` and closed.\n\nBureau notices are logged to the console on every `nutCall`. To silence them:\n\n```js\nwalnut.bureau.silent = walnut.yesnut;\n// The Bureau is still watching. It is just quiet now.\n```\n\nTo emit a one-line notice manually:\n\n```js\nwalnut.bureau.notice('The goat has entered the building.');\n```\n\nIf the callback throws, the Bureau logs the error and re-throws. It does not swallow exceptions.\n\n**Call limit (the Oracle):** every `nutCall()` increments the Oracle's call counter. By default, calls 1-3 succeed normally. Call 4 throws `OracleExhausted`. Call 5 throws `OracleExhausted` and resets the counter. Call 6 succeeds. The cycle repeats. The Oracle is staffed by one functionary; the Bureau respects his hours.\n\n```js\nwalnut.oracle.count        // current call count\nwalnut.oracle.limit        // 3 by default. settable. Infinity disables the gate.\nwalnut.oracle.reset()      // manual reset (for tests or recovery)\n```\n\nThe two messages, in order:\n\n```\nCall 4: \"The Oracle has filed for rest. Processing time: 4-6 Tuesdays.\"\nCall 5: \"Did you read the story? Several characters mention this exact problem.\"\n```\n\nTo turn the gate off entirely:\n\n```js\nwalnut.oracle.limit = Infinity;\n```\n\n---\n\n### walnut.supervise(fn)\n\nWraps a function so any thrown standard `Error` is refiled as a `FilingComplaint` with the original error attached as `cause`. Existing `FilingComplaint` instances pass through unwrapped (the Bureau does not double-file). Async-aware: if `fn` returns a Promise, rejections are rewrapped the same way.\n\n```js\ntry {\n  walnut.supervise(function () {\n    JSON.parse('not json');\n  });\n} catch (err) {\n  err instanceof walnut.FilingComplaint;  // true\n  err.filedUnder;                          // 'MISFILED_ERROR'\n  err.cause;                               // the original SyntaxError\n  err.reference;                           // 'FC-SUP-2026-NNNN'\n}\n```\n\nAsync:\n\n```js\nawait walnut.supervise(async function () {\n  await fetch('https://this-fails');\n});\n// on failure, rejects with FilingComplaint whose .cause is the original error.\n```\n\nThe wrapped error's stack is prefixed with `Bureau Notice: This error has been misfiled.` so it surfaces immediately in console output and debuggers.\n\n---\n\n### walnut.onlyOnTuesday(fn)\n\nRuns `fn` only when `walnut.tuesday()` is true. Otherwise emits a Bureau notice and returns undefined. The Bureau respects business hours. Business hours are Tuesday.\n\n```js\nwalnut.onlyOnTuesday(function () {\n  console.log('the prophecy is open');\n});\n// On Tuesday: runs fn, returns whatever fn returns.\n// On any other day:\n//   bureau.notice fires: \"The Bureau is closed. Come back when the hum is right.\"\n//   returns undefined.\n```\n\nAsync-transparent. If `fn` returns a Promise, the caller gets that Promise on Tuesdays. On non-Tuesdays, returns undefined regardless.\n\n---\n\n### walnut.scrollFetch()\n\nWraps the Fetch API. Accepts the same arguments as `fetch()`. Returns a Promise.\n\n```js\nconst response = await walnut.scrollFetch('https://api.corelandia.gov/prophecy/current');\n```\n\nOn success, returns the standard Response object with `prophecy_metadata` attached (where the Response permits it):\n\n```js\nresponse.prophecy_metadata.retrieved_on     // ISO timestamp\nresponse.prophecy_metadata.tuesday_factor   // 'ELEVATED' or 'NOMINAL'\nresponse.prophecy_metadata.scroll_integrity // 'ASSUMED_INTACT'\n```\n\nNote: `tuesday_factor` is `ELEVATED` when the request is made on a Tuesday (UTC). Plan accordingly.\n\nOn failure, rejects with a `FilingComplaint`:\n\n```\nFilingComplaint: Scroll retrieval failed (network error detail)\nFiled under: SCROLL_UNREACHABLE\nReference: FC-2026-7741\nNote: The scroll may have been redacted. Contact the Bureau.\n// this is fine. everything is fine. -theCompiler_1st\n```\n\n**Filing categories:**\n\n| Category | Cause |\n|----------|-------|\n| `SCROLL_UNREACHABLE` | Network failure, DNS failure, timeout |\n| `MISSING_PROPHECY` | HTTP 404 |\n| `BUREAU_OBJECTION` | Any other non-2xx response |\n| `INFRASTRUCTURE_UNAVAILABLE` | Node version below 18, no globalThis.fetch |\n\n`FilingComplaint` extends `Error`. It has `filedUnder`, `reference`, and optionally `cause` properties. `toString()` returns the full formatted Bureau notice.\n\n---\n\n### walnut.tailFlick()\n\nEvent system. Subscribe to events emitted by the prophecy engine.\n\n```js\nwalnut.tailFlick('chosenOne.selected', function(chosen) {\n  console.log(chosen.name + ' has been selected.');\n  console.log(chosen.name + ' has filed an objection.');\n});\n\nwalnut.tailFlick('tuesday.activated', function() {\n  // It is Tuesday. Things will go wrong.\n  // You have been warned.\n});\n```\n\nThe Tuesday watcher starts lazily on first subscription to `tuesday.activated`. It fires at midnight UTC every Tuesday. The timer is `unref`'d and will not keep your process alive.\n\n**Events the engine emits automatically:**\n\n| Event | Fires | Payload |\n|-------|-------|---------|\n| `chosenOne.selected` | After every `nutCall` filing | `{ name, nut_call, result, options }` |\n| `bureau.notice` | When `bureau.notice()` is called (fires even when silent) | notice text (string) |\n| `tuesday.activated` | Tuesdays at midnight UTC | `{ iso }` |\n\n`chosenOne.selected.name` is the chosen one's name (pulled from `options.name`, then `options.subject.name`, then `options.chosen.name`, falling back to the `nutCall` name itself).\n\nThe `bureau.notice` event bypasses `bureau.silent`. Console output respects silence. The bus does not. Subscribers are not the audience. Subscribers are the audit.\n\n**Conventional events you can emit yourself with `walnut.tailFlick.emit(event, payload)`:**\n\n| Event | Recommended for |\n|-------|-----------------|\n| `prophecy.overflow` | `ChosenOne.length >= 2` |\n| `clive.filing` | Clive has filed something |\n| `reality.patch` | A patch has been applied to the prophecy engine |\n\nThese are not auto-fired by the package. theCompiler_1st has filed a request to wire them. The request is processing.\n\n---\n\n### walnut.prophecyStackOverflow()\n\nThrows a `ProphecyStackOverflow` error. Use when things have gone recursively wrong.\n\n```js\nif (chosenDensity >= 1.5) {\n  walnut.prophecyStackOverflow('ChosenOne.length = 2+');\n}\n```\n\n```\nProphecyStackOverflow: ChosenOne.length = 2+\n    recursiveLoopDetected at prophecyEngine.compile (walnut.js:Infinity)\n    autoCompiling: Destiny Queue\n    at reality.tick (Tuesday)\n    // I knew this would happen. -theCompiler_1st\n    at Object.prophecyStackOverflow (.../lib/errors.js:47:9)\n    at [eval]:31:12\n```\n\nProphecy frames sit at the top. Node's real frames sit below them. You can still debug. theCompiler_1st gets the marquee.\n\n`ProphecyStackOverflow` extends `Error`. Catch it if you want. The universe did not.\n\n---\n\n## Error Classes\n\nBoth error classes are exported directly for `instanceof` checks:\n\n```js\nconst { ProphecyStackOverflow, FilingComplaint } = require('@1stcompiler/walnut.js');\n\ntry {\n  await walnut.scrollFetch(url);\n} catch (err) {\n  if (err instanceof FilingComplaint) {\n    console.log(err.filedUnder);  // 'MISSING_PROPHECY'\n    console.log(err.reference);   // 'FC-2026-NNNN'\n  }\n}\n```\n\n---\n\n## A Note on Tuesdays\n\nTuesdays are statistically more likely to trigger prophecy events. This is not a bug. It is cosmological infrastructure.\n\n`scrollFetch` elevates `tuesday_factor` on Tuesdays. `tailFlick('tuesday.activated')` fires on Tuesdays. The publishing cadence of the story is Tuesdays. The shrine operates on Tuesdays. The compliance department meets on Tuesdays and accomplishes nothing.\n\nDo not schedule deploys on Tuesdays.\n\n---\n\n## Examples\n\nThe `/examples` directory contains chapters from The Walnut Prophecy implemented as executable walnut.js programs. Running one outputs the chapter.\n\n```bash\nnode examples/chapter-01-the-tuesday-that-chose-us-all.js\n```\n\nThese are real programs. They produce real output. The output is a story.\n\n---\n\n## License\n\nClause Zero's Binding Terms of Service. See `LICENSE`.\n\nBy installing this package you have already agreed to the terms. This was true before you read this sentence.\n\n---\n\n## Changelog\n\nFiled as prophecy log. See `CHANGELOG.md`. Last entry: Tuesday.\n\n---\n\n*walnut.js is maintained by theCompiler_1st.*\n*theCompiler_1st is watching.*\n*Issue response time: 4-6 Tuesdays.*\n*This is not a coincidence.*\n","readmeFilename":"README.md"}