{
  "ok": true,
  "role": "product",
  "slug": "spectrallock",
  "name": "SpectralLock",
  "version": "0.3.1",
  "one_line": "Preview a 256-pixel overlay, paint membership from the Spectral Harmonic Wheel, and restore faded pigment where the pixels still carry it.",
  "author": "Aziel Eliab",
  "identity": "Aziel Eliab",
  "aka": "Aziel Elroi Eliab",
  "license": "Apache-2.0",
  "github": "https://github.com/AzielEliab/spectrallock",
  "skill_url": "https://aziel-runtime.vibelock.workers.dev/v1/pull/spectrallock/skill",
  "worker_skill": "https://spectrallock-download-tracker.vibelock.workers.dev/v1/skill",
  "skill": "---\nname: SpectralLock\ndescription: Use when calling SpectralLock hosted /v1 or installing the local package. Dual surface: Worker /v1 + catalog MCP. This Worker /v1/mesh/* PROXY to aziel-runtime via AZIEL_RUNTIME. Suite mesh default OFF. QNM-BUILD-1.0 live|locked|isolated. QNS-CD-1.0 hub cite / Worker mesh cross-map only (photon QNS1 packet transfer). No Node Gate. No public qnsd proxy. No auto-heal. Rosetta spectral analysis — same lenses as Aziel Corpus Library OCR (overlays, ink/page). Author Aziel Eliab.\n---\n\n# SpectralLock\n\nRosetta spectral analysis software (RSA-2.0 family). Same SpectralLock lenses as Aziel Corpus Library OCR: overlays plus ink/page targets. LIVE modes: `zero`, `tazel`, `vyrn`, `uv` (aliases `ultraviolet`, `uv-light`, `uvsa`), `rosetta`, `zen`, `chaos`, `balance`, `candle` (aliases `candlelight`, `candle-light`), `indent` (aliases `indentation`, `suppress-ink`, `ink-suppress`, `revealer-indent`), `lemon` (aliases `lemon-ink`, `hidden-lemon`, `invisible-ink-lemon`), `pigment` (aliases `restore-pigment`, `lost-pigment`, `restore-lost-pigment`). Honest unredact family: `unredact` / `lift` / `redact-locate` with ops `locate`, `lift`, `recover`, `refuse`. Locate leftover / historical page bytes and residual only — never invent letters. Opaque rewrite with nothing left refuses `SL-UNREDACT-OPAQUE`. OCR only after structural recovery. Honest handwriting family: `handwriting` / `handwrite` / `ink-hand` / `forgery-scan` with ops `analyze`, `compare`, `side-by-side`, `graph`, `forgery-indicators`, `refuse`. Synthetic scan heuristics of ink on paper. Stub: `spectrometer`, `forensic`, `invent_mark`. Author: **Aziel Eliab**.\n\n**THIS IS:** Rosetta spectral analysis — SpectralLock lenses, overlays, and ink/page modes, aligned with [Aziel Corpus Library OCR](https://www.azielcorpuslibrary.net/ocr).\n\nAlways send `User-Agent: Mozilla/5.0`. Cloudflare Workers may 403 an empty agent.\n\n## Call these URLs\n\n- Worker OpenAPI: https://spectrallock-download-tracker.vibelock.workers.dev/openapi.json\n- Catalog OpenAPI: https://aziel-runtime.vibelock.workers.dev/openapi.json\n- MCP: `POST https://aziel-runtime.vibelock.workers.dev/mcp`\n- Live skill (this markdown): `GET https://spectrallock-download-tracker.vibelock.workers.dev/v1/skill`\n- Suite mesh: `GET https://spectrallock-download-tracker.vibelock.workers.dev/v1/mesh` (PROXY; default OFF; QNS-CD-1.0 cross-map)\n- Corpus OCR (reference): https://www.azielcorpuslibrary.net/ocr\n- llms.txt: `GET https://spectrallock-download-tracker.vibelock.workers.dev/llms.txt`\n- ai.txt: `GET https://spectrallock-download-tracker.vibelock.workers.dev/ai.txt`\n- cite.json: `GET https://spectrallock-download-tracker.vibelock.workers.dev/cite.json`\n\nOps (do **not** increment downloads or views):\n\n| Method | Path | What |\n|--------|------|------|\n| GET | `/v1/health` | Liveness. Does not increment downloads. |\n| GET | `/v1/skill` | This markdown. Does not increment downloads. |\n| GET | `/v1/modes` | List SpectralLock lenses (canonical ids + aliases). |\n| GET | `/v1/lenses` | Alias for `/v1/modes`. |\n| GET | `/v1/targets` | Ink and page targets. |\n| POST | `/v1/overlay` | Rosetta spectral overlay on a posted PNG (base64). Accepts `mode`/`lens`/`lenses`, `target` (`ink`\\|`page`), and `inject` (`true`\\|`false`). ON is false-color membership tint (paint). OFF is gray of the same gate. Zero ignores the switch. Returns `tazel_inband_pct` and `vyrn_inband_pct` before any hit claim. 256 px preview; prefer local `spectrallock_inject.py`. |\n| GET | `/v1/unredact` | Honesty banner + unredact ops (`locate`, `lift`, `recover`, `refuse`). Does not increment downloads. |\n| POST | `/v1/unredact` | Locate leftover / historical page bytes. Body `{b64, op, query, twin_b64?}`. Returns `leftover_bytes`, `recovered_from`, `page_revisions`, `revision_compare`, `revision_graph` (`revisions[]` with tip-cut `copy` `{media_type, filename, b64, sha256, byte_length, source_revision}` plus surviving embeds; `edges[]` with added/replaced/deleted/freed / `page_deltas` / `redaction_ops` classified `replaced` \\| `overlaid` \\| `detached` \\| `sanitized rewrite`; `root_startxref`, `eof_offsets`), `operator_text`, `classifications`, `recovered_characters` (page / object_id / generation / xref_revision / stream_offset / operator / font / decoded_bytes / source_revision / sha256), `ocr` (after structural only; never covered letters from context), `refuse_code` (`SL-UNREDACT-OPAQUE`). Hosted preview may cap copy size (sha256+offset cites; never invents bytes) and has no OCR engine — it does not lie about that. Aliases: `POST /v1/lift`, `POST /v1/redact-locate`. |\n| GET | `/v1/recover` | Universal recover ops + LIVE vs SLOT format matrix. Does not increment downloads. Worker `/v1` present-bytes recovery. |\n| POST | `/v1/recover` | Universal artifact recovery. Body `{b64, op, filename, query, twin_b64?}`. Ops: `locate` · `deep-recover` · `revision-graph` · `cross-compare` · `extract-embedded` · `scan-orphans` · `scan-metadata` · `scan-sidecars` · `scan-history` · `refuse`. Envelope: `{artifact, type, revisions, metadata, embedded, orphans, prior_content, redaction_regions, recovered, refused, provenance, no_lie}`. Present bytes only. Secrets: `secret_material_present` + path/offset; values suppressed. SLOT parsers stay SLOT; LIVE parsers stay LIVE. |\n| GET | `/v1/handwriting` | Handwriting ops + LIVE vs SLOT feature matrix. Does not increment downloads. Worker `/v1` ink-on-paper scan heuristics. |\n| POST | `/v1/handwriting` | Synthetic handwriting analysis of a user-supplied PNG scan/photo of paper. Body `{b64, op, filename, twin_b64?}`. Ops: `analyze` · `compare` · `side-by-side` · `graph` · `forgery-indicators` · `refuse`. Envelope: `{artifact, strokes, features, forgery_indicators, side_by_side, graph, overlays, provenance, refused, warnings, no_lie}`. Indicators / heuristics / candidates — human verification required. Confidence is pixel signal quality. Never invents marks. Heatmaps are residual overlays. Hosted 256 px PNG preview; full pipeline is the local package. |\n| GET | `/v1/pigment` | Restore lost pigment ops (`restore`, `estimate`, `refuse`). Does not increment downloads. |\n| POST | `/v1/pigment` | Restore lost pigment from a posted PNG. Body `{b64, op, inject?}`. Estimates faded signal where pixels still differ from the page in a supported cluster. Refuses `SL-PIGMENT-GONE` when that signal is gone and writes no new marks. `pigment_recovery` is true on this path. Hosted 256 px preview. Alias: `POST /v1/restore-pigment`. |\n| GET | `/v1/mesh` | PROXY suite mesh status. Default OFF. QNM live|locked|isolated. QNS-CD-1.0 cross-map (photon QNS1). Never enables. No public qnsd proxy. |\n| GET | `/v1/mesh/nodes` | PROXY Live Nodes roster (5-minute presence). Peers see the QNS-CD-1.0 cross-map. |\n| POST | `/v1/mesh/{enable,disable,join,heartbeat,leave,broadcast}` | PROXY. Bearer required to enable. No auto-heal. Anon-broadcast issues a SHA-256 receipt. |\n\nWorks with ChatGPT (GPT Actions / OpenAI), Grok (xAI), Venice, Claude (Anthropic), Cursor (MCP), Glama (MCP), Perplexity, Microsoft Copilot / Bing, Google Gemini / Vertex, Mistral, Meta AI, Apple Intelligence surfaces, Amazon Q tooling, DuckAssist, You.com, Cohere, and other MCP/OpenAPI-capable assistants. Import OpenAPI as a custom tool, GPT Action, HTTP tool, or MCP connector. Catalog MCP `mesh_*` + FragGate `slug=mesh`. Suite mesh default OFF. QNM-BUILD-1.0 live|locked|isolated. QNS-CD-1.0 hub cite / Worker mesh cross-map only (photon QNS1 packet transfer; local qnsd in https://github.com/AzielEliab/qnm-node; runtime cites in https://github.com/AzielEliab/aziel-runtime). No Node Gate. No public qnsd proxy. No auto-heal.\n\n## Example\n\n```bash\ncurl -s -A 'Mozilla/5.0' https://spectrallock-download-tracker.vibelock.workers.dev/v1/health\ncurl -s -A 'Mozilla/5.0' https://spectrallock-download-tracker.vibelock.workers.dev/v1/skill\ncurl -s -A 'Mozilla/5.0' https://spectrallock-download-tracker.vibelock.workers.dev/v1/lenses\ncurl -s -A 'Mozilla/5.0' https://spectrallock-download-tracker.vibelock.workers.dev/v1/mesh\n```\n\n## Local (after one-click install)\n\n```bash\ncurl -fsSL https://spectrallock-download-tracker.vibelock.workers.dev/install.sh | bash\nspectrallock ui\nspectrallock doctor\n```\n\nThen open http://127.0.0.1:8861 (loopback only).\n\nCounted download (gzip HTTP 200, no 302): https://spectrallock-download-tracker.vibelock.workers.dev/download?asset=spectrallock-0.3.1.tar.gz\nGitHub: https://github.com/AzielEliab/spectrallock\n\n## Catalog + local UI\n\nAuthor: **Aziel Eliab**. Rosetta spectral analysis. 256px hosted preview; full pipeline is the Python package. Lamb Lens: Service → Clarity → Peace. Never invent marks.\n\n- Catalog product: https://aziel-runtime.vibelock.workers.dev/p/spectrallock/\n- Catalog OpenAPI: https://aziel-runtime.vibelock.workers.dev/openapi.json\n- Catalog MCP: `POST https://aziel-runtime.vibelock.workers.dev/mcp`\n- This Worker skill: `GET https://spectrallock-download-tracker.vibelock.workers.dev/v1/skill`\n- This Worker OpenAPI: https://spectrallock-download-tracker.vibelock.workers.dev/openapi.json\n- Sample payload: `GET https://spectrallock-download-tracker.vibelock.workers.dev/v1/example`\n- Suite mesh: `GET https://spectrallock-download-tracker.vibelock.workers.dev/v1/mesh` PROXY (default OFF; QNS-CD-1.0 cross-map)\n\nLocal UI: **Import JSON file** (`type=file`) and **Export JSON**. Lenses + Ink/Page + inject ON/OFF. Then `spectrallock doctor`. Worker homepage Live Nodes strip polls `GET /v1/mesh` (default OFF). QNS-CD-1.0 is a hub cite / Worker mesh cross-map only.\n\nColor inject (operator lock 19 Sep 2026; wheel paint 2026-09-22): `--inject` / `--no-inject` on every named mode. ON paints membership from the Spectral Harmonic Wheel; OFF is luminance of the same gate; `zero` stays gray. In-band spectral math stays tazel=170° `#1EC9A5`, vyrn=350° `#C00066`, zero `#6F6485`. Wheel paint: ZERO `#325767`, CHAOS `#8D223D`, VYRN `#A22639`, UV `#9F3B2B`, TAZEL `#797A2D`, ROSETTA `#467542`, ZEN `#DFD2B5`. UV is a synthetic 365–400 nm look from an ordinary photograph. Balance never invents marks. Report `tazel_inband_pct` and `vyrn_inband_pct` before claiming a hit. An empty gate is a valid reading. Prefer `python3 spectrallock_inject.py`. Identity: Aziel Eliab. Lamb Lens: Service → Clarity → Peace. NO-LIE.\n\nRestore lost pigment (operator lock 2026-09-22 — NO-LIE): `spectrallock pigment restore|estimate|refuse FILE` and `spectrallock restore-pigment FILE`, plus `GET|POST /v1/pigment` and `POST /v1/restore-pigment`. Estimates faded pigment where pixels still differ from the page in a supported cluster. Visible dark ink stays already-present pigment. When the faded signal is gone the op refuses `SL-PIGMENT-GONE` and writes no new marks. Receipts set `pigment_recovery` true only when this path ran. Overlay and unredact receipts keep `pigment_recovery` false. Catalog door on slug `spectrallock`: ops `pigment` and `restore-pigment` (same engine as the Worker). AMOE stays on the suite project map.\n\nUnredact / lift-overlay (operator lock 2026-09-19 — NO-LIE): `locate` reports text still in the PDF, metadata, attachments, twin-page residual, leftover container bytes, and historical page revisions (stale `/Page` graphs, prior streams, xref/ObjStm, after-EOF, incremental `startxref`/`Prev` revision graph + per-revision tip-cut PDF/embed copies). That is reading bytes that are still present. `lift` is non-opaque residual with `--no-inject` only; heatmaps are residual overlays. Opaque sanitized rewrite with nothing left refuses `SL-UNREDACT-OPAQUE`. If leftover / historical bytes remain, `recover` surfaces them with character provenance. OCR runs only after structural recovery and never reconstructs covered letters from context. Hosted `/v1/unredact` may keep preview limits (copy-size cap cites sha256 + offsets; never invents bytes) and does not lie about capabilities. Never invent letters.\n\nUniversal recover (operator lock 2026-09-19 — NO-LIE): `spectrallock recover …` and `GET|POST /v1/recover`. Search all physically present representations (old streams, tracked changes, thumbnails, JSON/XML tombstones, metadata, attachments, siblings, SQLite freelist, Git objects when `.git` is supplied, shared strings, comments, hidden sheets, archive members) before declaring gone. Confidence is provenance quality. Audit: `docs/audit/UNIVERSAL-RECOVER-AUDIT.md`. Catalog LIVE_OPS stay honest — do not invent a FragGate `recover` door.\n\nHandwriting / ink-hand (operator lock 2026-09-19 — NO-LIE): `spectrallock handwriting analyze|compare|graph FILE` (aliases `handwrite`, `ink-hand`, `forgery-scan`) and `GET|POST /v1/handwriting`. Synthetic image analysis of user-supplied scans/photos of physical ink on paper. Looks for stroke-weight variation, speed cues, density, bleed/feathering, baseline/slant/size shifts, erasures, tracing, and forgery indicators (tremor-copy, unnatural lifts, retouch, dual-ink, clone-stamp, compression paste-up, ductus, style-shift). Side-by-side panes + stroke/feature graph + density/bleed/erasure heatmaps. Spectral helpers (`uv`, `candle`, `indent`, `lemon`) may be cited with inject OFF. Never invents marks. An empty gate is a valid reading. Phrasing: indicator / heuristic / candidate — human verification required. Audit: `docs/audit/HANDWRITING-FORGERY-AUDIT.md`. Catalog LIVE_OPS stay honest — do not invent a FragGate `handwriting` door.\n\nWorks with ChatGPT (GPT Actions / OpenAI), Grok (xAI), Venice, Claude (Anthropic), Cursor (MCP), Glama (MCP), Perplexity, Microsoft Copilot / Bing, Google Gemini / Vertex, Mistral, Meta AI, Apple Intelligence surfaces, Amazon Q tooling, DuckAssist, You.com, Cohere, and other MCP/OpenAPI-capable assistants. Import catalog or Worker OpenAPI as a custom tool, GPT Action, HTTP tool, or MCP connector. MCP clients can use the catalog MCP endpoint. Suite mesh: `GET /v1/mesh` PROXY (default OFF). QNS-CD-1.0 cross-map (photon QNS1 packet transfer). Catalog MCP `mesh_*` + FragGate `slug=mesh`.\n",
  "download": "https://spectrallock-download-tracker.vibelock.workers.dev/download",
  "cite": "https://spectrallock-download-tracker.vibelock.workers.dev/cite.json",
  "llms": "https://spectrallock-download-tracker.vibelock.workers.dev/llms.txt",
  "sitemap": "https://spectrallock-download-tracker.vibelock.workers.dev/sitemap.xml",
  "count": "https://spectrallock-download-tracker.vibelock.workers.dev/count",
  "install": "https://spectrallock-download-tracker.vibelock.workers.dev/install.sh",
  "install_sh": "curl -fsSL -A 'Mozilla/5.0' -o install.sh https://spectrallock-download-tracker.vibelock.workers.dev/install.sh",
  "install_inspect": {
    "url": "https://spectrallock-download-tracker.vibelock.workers.dev/install.sh",
    "downloads": "That product Worker's install.sh. Typical next fetch is the counted /download on the same hostname. Not aziel-runtime. This runtime has no pipe installer.",
    "steps": [
      "curl -fsSL -A 'Mozilla/5.0' -o install.sh https://spectrallock-download-tracker.vibelock.workers.dev/install.sh",
      "Inspect install.sh (URLs, write paths, checksums if present).",
      "bash install.sh"
    ]
  },
  "update_check": "https://aziel-runtime.vibelock.workers.dev/v1/update/check?slug=spectrallock&version=0.3.1",
  "software": "https://aziel-runtime.vibelock.workers.dev/v1/software",
  "openapi": "https://spectrallock-download-tracker.vibelock.workers.dev/openapi.json",
  "runtime_openapi": "https://aziel-runtime.vibelock.workers.dev/openapi.json",
  "in_runtime": false,
  "ops": [
    {
      "op": "health",
      "method": "GET",
      "summary": "Liveness. Does not increment download KV."
    },
    {
      "op": "modes",
      "method": "GET",
      "summary": "List live overlay modes (zero, tazel, vyrn, uv, rosetta, zen, chaos, balance, candle, indent, lemon). Wheel paint is separate from the spectral triad. Reports live pigment / restore-pigment plus leftover-bytes, revision-graph, universal recover, and handwriting metadata. Unredact / recover / handwriting are not FragGate door ops."
    },
    {
      "op": "targets",
      "method": "GET",
      "summary": "List ink/page targets. Same targets as Aziel Corpus Library OCR."
    },
    {
      "op": "overlay",
      "method": "POST",
      "summary": "Simplified overlay preview. PNG b64 in, longest side capped at 256 px. Accepts inject true|false (ON = wheel-paint membership, not recovered pigment; OFF is gray of the same gate; zero ignores the switch). Reports tazel_inband_pct and vyrn_inband_pct. Not the pigment door and not the full Python pipeline."
    },
    {
      "op": "pigment",
      "method": "POST",
      "summary": "Restore lost pigment from a PNG where faded signal remains (listPigment / pigmentFromB64). Ops restore|estimate|refuse. Refuses SL-PIGMENT-GONE when the signal is gone. pigment_recovery is true on this path. 256 px preview."
    },
    {
      "op": "restore-pigment",
      "method": "POST",
      "summary": "Alias of pigment. Restore lost pigment. Same engine as pigmentFromB64."
    },
    {
      "op": "verify",
      "method": "POST",
      "summary": "Recompute overlay metadata hash (mode/target/geometry). Not forensic. Not OCR-from-black-box."
    },
    {
      "op": "doctor",
      "method": "GET",
      "summary": "Richer liveness: 256px preview, not a spectrometer. Wheel paint is separate from the triad. Restore lost pigment is LIVE. AMOE is not a live product. Inject ON is not pigment recovery. Unredact / recover / handwriting are not FragGate door ops."
    },
    {
      "op": "skill",
      "method": "GET",
      "summary": "Return SpectralLock skill markdown. Does not increment download KV."
    }
  ],
  "banner": "Hosted overlay is a 256px preview. SpectralLock 0.3.1. Wheel paint is a membership-tint plane separate from the spectral triad (Tazel #1EC9A5, Vyrn #C00066, Zero #6F6485). Inject ON paints wheel membership, not recovered pigment. Restore lost pigment is LIVE on FragGate ops pigment and restore-pigment and refuses SL-PIGMENT-GONE when the faded signal is gone. AMOE is not a live product. Leftover-bytes recover, universal recover, and handwriting stay on the product Worker and are not FragGate door ops. UV is not a lamp. Balance/lemon/indent never invent marks.",
  "limitations": "Hosted overlay is a 256px preview. SpectralLock 0.3.1. Wheel paint is a membership-tint plane separate from the spectral triad (Tazel #1EC9A5, Vyrn #C00066, Zero #6F6485). Inject ON paints wheel membership, not recovered pigment. Restore lost pigment is LIVE on FragGate ops pigment and restore-pigment and refuses SL-PIGMENT-GONE when the faded signal is gone. AMOE is not a live product. Leftover-bytes recover, universal recover, and handwriting stay on the product Worker and are not FragGate door ops. UV is not a lamp. Balance/lemon/indent never invent marks.",
  "aliases": {
    "catalog_card": "https://aziel-runtime.vibelock.workers.dev/p/spectrallock",
    "catalog_skill": "https://aziel-runtime.vibelock.workers.dev/p/spectrallock/skill",
    "catalog_health": "https://aziel-runtime.vibelock.workers.dev/p/spectrallock/health",
    "invoke_prefix": "https://aziel-runtime.vibelock.workers.dev/p/spectrallock",
    "update_check": "https://aziel-runtime.vibelock.workers.dev/v1/update/check?slug=spectrallock&version=0.3.1",
    "software": "https://aziel-runtime.vibelock.workers.dev/v1/software",
    "worker_home": "https://spectrallock-download-tracker.vibelock.workers.dev/",
    "slugs": [
      "spectrallock"
    ]
  },
  "doi": null,
  "doi_note": "No DOI. Zenodo software deposit needed. Do not invent one.",
  "skill_source": "https://spectrallock-download-tracker.vibelock.workers.dev/v1/skill (service binding)",
  "kv_increment": false
}