{"id":21026,"plugin_id":"plugins_6aabf17d723481919bf6d18cd917fa77","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:44.738Z","digest":"d22974c52e5edb9fc2a65f8df876a25af7a14a6bfbdf2e997f29b8958dc6cbd6","against":null,"payload":{"description":"Use when creating, editing, testing, auditing, packaging, versioning, releasing, or preparing publication of the Memory Keeper plugin or any of its skills.","included_files":[{"relative_path":"scripts/package_lint.py","size_in_bytes":10939},{"relative_path":"scripts/run_release_tests.py","size_in_bytes":2779},{"relative_path":"tests/pressure-scenarios.md","size_in_bytes":5415},{"relative_path":"tests/test_memory_checker.py","size_in_bytes":1781},{"relative_path":"tests/test_package_contract.py","size_in_bytes":7205},{"relative_path":"tests/test_package_lint_self.py","size_in_bytes":4607}],"name":"maintaining-memory-keeper","skill_md_contents":"---\nname: maintaining-memory-keeper\ndescription: Use when creating, editing, testing, auditing, packaging, versioning, releasing, or preparing publication of the Memory Keeper plugin or any of its skills.\n---\n\n# Maintaining Memory Keeper\n\nThis is developer/self-maintenance discipline, not a user-facing mode.\n\n## Required discipline\n\n- behavior changes require a failing regression/contract test first;\n- each specialist stays focused; `using-memory-keeper` stays concise and trigger-oriented;\n- version and diagnostic marker stay synchronized across manifests/docs/tests;\n- pressure scenarios cover bypass/rationalization, incomplete evidence, recovery, and completion;\n- built ZIPs are inspected/linted, not inferred from the source tree;\n- `verifying-persistent-work` is required before a release-complete claim.\n\n## Official test path\n\nRun `scripts/run_release_tests.py --source <plugin-root>` for source certification. It executes tests in an isolated copy with bytecode disabled, then re-lints the untouched source, preventing tests from creating `__pycache__` and falsely failing their own cleanliness gate. Pass final ZIPs with repeated `--zip <archive>` arguments.\n\n## Release hygiene\n\nReject `__pycache__`, `.pyc/.pyo`, temp/editor debris, nested old releases, stale version/marker strings, missing specialists, malformed/unsafe ZIPs, or MCP declarations. `scripts/package_lint.py` must fail cleanly rather than crash on malformed input.\n\nStatic contracts prove package/skill invariants, not host auto-invocation. Automatic routing must still be pressure-tested on a host where the plugin is actually installed.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}