diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 6a16835..9f973f1 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "tree-ring-memory", - "version": "0.3.0", + "version": "0.3.1", "description": "Local-first memory lifecycle and receipt-backed harness guidance for coding agents using Tree Ring Memory v0.14+.", "author": { "name": "TerminallyLazy", @@ -43,11 +43,6 @@ ], "brandColor": "#2F7D5C", "composerIcon": "./assets/tree-ring-memory-logo.png", - "logo": "./assets/tree-ring-memory-logo.png", - "screenshots": [ - "./assets/screenshot-dashboard.png", - "./assets/screenshot-recall.png", - "./assets/screenshot-evidence.png" - ] + "logo": "./assets/tree-ring-memory-logo.png" } } diff --git a/README.md b/README.md index 1de2bf1..1a668ca 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,14 @@ This plugin packages one Codex skill that teaches agents when to recall, write, audit, consolidate, and forget project memory using the open-source [Tree Ring Memory](https://github.com/TerminallyLazy/Tree-Ring-Memory) CLI. -Plugin `0.3.0` requires Tree Ring Memory CLI **>= 0.14.0**. The minimum is +Plugin `0.3.1` requires Tree Ring Memory CLI **>= 0.14.0**. The minimum is intentional: v0.14 adds receipt-backed harness readiness on top of the v0.13 schema-v3, coordinated-write, and idempotency contracts used by this guidance. +The public ZIP is a skills-only package. It intentionally omits +`interface.screenshots`, which OpenAI's ZIP ingestion does not accept for this +package type; the logo and composer icon remain available. + It does not run a background service, scrape chats, or capture transcripts. The active agent chooses when a memory action is useful, source-linked, and privacy-safe. diff --git a/SUBMISSION.md b/SUBMISSION.md index 2e3c640..32e3514 100644 --- a/SUBMISSION.md +++ b/SUBMISSION.md @@ -77,11 +77,13 @@ Long description: ## Release Notes -Initial OpenAI submission of the v0.14-compatible skills-only package. It adds -runtime preflight, receipt-backed harness readiness, exact non-active states, -same-host coordination rules, and explicit privacy-safe fallback when local -execution is unavailable. The plugin has no MCP server, hosted service, -credentials, telemetry, or reviewer account requirement. +Version 0.3.1 of the v0.14-compatible skills-only package removes +`interface.screenshots`, which OpenAI ZIP ingestion does not allow for +skills-only plugins. It retains runtime preflight, receipt-backed harness +readiness, exact non-active states, same-host coordination rules, the logo and +composer icon, and explicit privacy-safe fallback when local execution is +unavailable. The plugin has no MCP server, hosted service, credentials, +telemetry, or reviewer account requirement. ## Review Note diff --git a/assets/screenshot-dashboard.png b/assets/screenshot-dashboard.png deleted file mode 100644 index 500a907..0000000 Binary files a/assets/screenshot-dashboard.png and /dev/null differ diff --git a/assets/screenshot-evidence.png b/assets/screenshot-evidence.png deleted file mode 100644 index 9863f34..0000000 Binary files a/assets/screenshot-evidence.png and /dev/null differ diff --git a/assets/screenshot-recall.png b/assets/screenshot-recall.png deleted file mode 100644 index 52da30e..0000000 Binary files a/assets/screenshot-recall.png and /dev/null differ diff --git a/scripts/validate-plugin.sh b/scripts/validate-plugin.sh index e6a1bf1..ef39b54 100755 --- a/scripts/validate-plugin.sh +++ b/scripts/validate-plugin.sh @@ -30,8 +30,8 @@ root = Path(".") manifest = json.loads((root / ".codex-plugin/plugin.json").read_text()) if manifest.get("name") != "tree-ring-memory": raise SystemExit("plugin name must remain tree-ring-memory") -if manifest.get("version") != "0.3.0": - raise SystemExit("wrapper version must be 0.3.0") +if manifest.get("version") != "0.3.1": + raise SystemExit("wrapper version must be 0.3.1") interface = manifest.get("interface", {}) prompts = interface.get("defaultPrompt", []) @@ -45,9 +45,8 @@ for key in ("composerIcon", "logo"): if not path or not (root / path).is_file(): raise SystemExit(f"missing interface asset: {key}") -screenshots = interface.get("screenshots", []) -if len(screenshots) != 3 or any(not (root / path).is_file() for path in screenshots): - raise SystemExit("three real screenshots are required") +if "screenshots" in interface: + raise SystemExit("skills-only ZIP manifests must not declare interface.screenshots") for required in ("PRIVACY.md", "TERMS.md", "SUBMISSION.md"): if not (root / required).is_file():