[WORKER] Integrations+Registry — plugin expansion, packaging and security hardening loop #52
Open
opened 2026-09-08 02:02:52 +00:00 by nsaspy
·
19 comments
No Branch/Tag specified
main
feat/p0-prolog-python-nim-product-packages
fix/860-lisp-evidence-type-fence-20260921
feat/strange-loop-experts
companion/805-android-animations-20260917
feat/star-kb-agent
fix/860-lisp-apply-input-schema-20260921
agentic15/lane3-closed-output-contracts
feature/doordash-commerce
feat/860-lisp-symbolic-conversation-20260921
feat/mara-emacs-todo-roam-928
feat/zara-symbolic-memory
fix/860-lisp-apply-verification-lineage
expert-builder-2/nix-bash-current-core-20260920
fix/860-core-lisp-composition
fix/860-lisp-composition-argument-authority
feat/864-nix-bash-style-sources
fix/859-language-handler-verdict
fix/859-language-handler-failed-verdict
fix/859-expert-stop-unregister
feat/863-js-ts-java-kotlin-host
fix/860-lisp-delegation-status
feat/expert-composition-864
feat/862-language-expert-adapters-v2
chore/dotfiles-expert-ownership-20260919
feat/zara-emacs-deep-20260919
feat/862-language-expert-adapters
feature/866-wiki-gates-search
codex/emacs-kb-857-20260919
feat/851-zara-ssh-files
feat/844-zara-music-prolog-tools
feat/emacs-workflows-20260919
feat/org-roam-shared-memory-2026-09-19
feat/844-zara-music
feat/calendar-caldav-824
feature/zara-activity-android-826
feat/zara-home-ha-transport
feat/prolog-policy-plugin-20260917
feat/812-prolog-policy-default-kb
feat/zara-home-ha-events
feat/839-zara-pi-bash-tmux
feat/zara-cota-static-gtfs-830
feature/zara-mobility-829-20260917
docs/agents-working-model-20260917
codex/808-stock-expert-2026-09-17
feat/linux-context-hooks
feat/811-prolog-policy-advice
fix/zara-coding-criteria-provenance-v2
plugin-d/local-recall-transactional-install
plugin-b/pipewire-player-506
plugin-d/508-discord-transactional-install
fix/zara-discord-startup-fail-closed
fix/browser-list-tabs-primary-error
fix/zara-coding-evidence-provenance
feat/zara-browser-webdriver-backend
rage/503-files-root-shape
rage/500-calendar-mutation-proof
rage/495-contacts-create-proof
rage/497-calendar-write-evidence
rage/495-contacts-create-evidence
rage/489-comms-send-evidence-replay
rage/485-calendar-free-busy-evidence
rage/489-comms-send-evidence
rage/485-calendar-free-busy-evidence-replay
rage/489-comms-send-payload-proof
rage/487-calendar-event-temporal-order
rage/483-timers-persisted-numeric-types
rage/481-github-pr-provider-metadata
rage/479-media-numeric-metadata
rage/477-media-accepted-bool
rage/475-comms-attachment-size-type
rage/471-sysadmin-provider-booleans
rage/473-comms-provider-booleans
rage/469-home-scene-verified-bool
rage/467-contacts-accepted-bool
rage/465-calendar-accepted-bool
rage/463-media-provider-booleans
rage/461-discord-boolean-policy
rage/459-expert-host-policy
rage/457-discord-chance-policy
rage/455-timers-numeric-descriptors
rage/453-discord-history-bounds
rage/451-browser-session-bounds
rage/449-avatar-renderer-command-config
rage/447-avatar-directory-policy
rage/407-avatar-renderer-policy-replay
rage/444-discord-context-bound-types
rage/444-discord-context-bound-types-replay
fix/443-avatar-idle-cpu
rage/439-discord-audit-bound-types
rage/439-discord-audit-red-proof
rage/435-healthcheck-numeric-types-replay
rage/435-healthcheck-numeric-types
rage/434-files-numeric-types
rage/432-contacts-numeric-types
rage/429-sysadmin-numeric-types
rage/427-calendar-numeric-types
rage/425-comms-policy-types
rage/423-media-constructor-limit-types
rage/421-media-queue-search-types
rage/419-media-playback-types
rage/417-local-recall-selector-type
rage/415-local-recall-bool-limits
rage/413-context-plugin-ttl-type
rage/411-context-freshness-types
rage/409-knowledge-config-types
rage/407-avatar-renderer-policy
rage/403-agent-zero-config-types-v2
rage/403-agent-zero-config-types
rage/403-agent-zero-config-red
rage/399-starintel-numeric-types-v2
rage/399-starintel-numeric-types
rage/399-starintel-numeric-red
rage/395-emacs-config-types-v2
rage/395-emacs-config-types
rage/395-emacs-config-red
rage/392-brave-config-types-v2
rage/392-brave-config-types
rage/377-coding-prolog-policy-v2
rage/377-red-proof-v2
rage/387-github-integer-limits
rage/385-github-numeric-config
rage/377-coding-prolog-policy-descriptors
rage/382-memory-duplicate-projections
rage/379-shell-runtime-limit-type
rage/374-memory-duplicate-recall
rage/369-coding-inspector-descriptors
rage/368-memory-projection-evidence
rage/370-shell-policy-collections
rage/366-memory-backend-fact-bound
rage/364-shell-policy-descriptors
rage/362-memory-recall-bound
rage/360-expert-bool-bounds
rage/358-github-config-bools
rage/356-github-number-types
rage/354-shell-runtime-bool
rage/352-memory-jsonrpc-id-type
rage/350-memory-mcp-result-status
rage/348-memory-mcp-oserror
rage/345-memory-schema-registration-type-v2
rage/345-memory-schema-registration-type
rage/340-memory-schema-types-v2
rage/340-memory-schema-types
rage/336-coding-task-state-executable-v2
rage/338-memory-bounded-facts
rage/336-coding-task-state-executable
rage/334-memory-type-selector-validation
rage/332-coding-canonical-changed-paths
rage/330-shell-invalid-subprocess-strings
rage/328-memory-provenance-alias
rage/326-memory-write-evidence
rage/324-memory-fact-term
rage/322-memory-scope-type
rage/320-shell-cwd-type
rage/318-memory-provenance
rage/316-memory-query-type
rage/314-shell-argv-container
rage/312-shell-env-mapping
rage/310-current-zara-pin
rage/308-shell-typed-stdin
rage/306-memory-schema-fact-isolation
rage/303-github-strict-result-limits
rage/301-shell-strict-runtime-config
rage/298-shell-environment-allowlist
rage/296-memory-mcp-finite-deadline
rage/294-memory-mcp-response-identity
rage/292-memory-type-isolation
rage/290-shell-byte-limits
rage/288-task-dependencies
rage/286-current-verifier-failures
rage/284-shell-finite-runtime
rage/280-latest-verifier-result
rage/282-shell-typed-config
rage/1-verifier-owned-evidence
rage/registry-timeout-abort
rage/registry-module-import-timeout
rage/registry-bound-module-entrypoints
rage/registry-bound-contract-attributes
rage/registry-service-factory-timeout
rage/registry-legacy-entrypoint-timeout
rage/coding-task-repository-context
rage/registry-sync-timeout-bounds
rage/registry-real-sync-timeouts
rage/coding-task-state-protocol-fence
rage/registry-installed-import-isolation
rage/coding-task-state-response-timeout
rage/coding-task-state-crash-fence
rage/coding-task-state-status-contract
rage/registry-dependency-env-construction
rage/248-document-task-completion
docs/248-task-state-contract
rage/246-freeze-completed-task
rage/244-evidence-status
rage/242-passing-verification
rage/240-task-state-bounds
rage/242-passing-evidence
rage/238-prolog-task-state
rage/236-verifier-duplicate-evidence
rage/234-canonical-verification-object-ids
rage/232-service-plugin-type-agreement
rage/230-deduplicate-worktree-evidence
rage/228-deduplicate-changed-path-evidence
rage/226-isolate-agent-zero-env
rage/224-isolate-avatar-renderer
rage/222-isolate-starintel-live-env
rage/220-strip-live-provider-secrets
rage/215-module-level-factory
rage/217-canonical-evidence-paths
rage/213-commit-tree-object-id
rage/211-diff-head-object-id
rage/209-inspect-head-object-id
rage/207-worktree-head-object-id
rage/205-service-api-version
rage/199-branch-object-id
rage/202-worktree-lock-proof
rage/200-worktree-add-proof
rage/199-branch-object-ids
rage/197-log-object-ids
rage/195-numstat-errors
rage/193-diff-snapshot
rage/191-inspect-dirty-snapshot
rage/189-atomic-branch-create
rage/187-branch-inventory-snapshot
rage/185-fence-branch-create
rage/183-confine-installers
rage/181-confine-plugin-roots
rage/179-strict-service-metadata
rage/177-compat-lifecycle-timeout
rage/175-canonical-install-command
rage/173-python-dependency-metadata
rage/171-canonical-search-paths
rage/169-registry-updated-date
rage/167-canonical-registry-strings
rage/registry-installer-layout-agreement
rage/registry-install-command-grammar
rage/registry-source-urls
rage/registry-search-path-metadata
rage/registry-install-target-metadata
rage/registry-flake-source-metadata
rage/registry-license-metadata
rage/compat-runtime-advice-contract
rage/compat-runtime-worker-sync
rage/compat-runtime-worker-signature
rage/compat-runtime-worker-identity
rage/coding-worktree-remove
rage/compat-runtime-advice-shutdown
rage/compat-runtime-dispatch-contract
rage/registry-nix-metadata-agreement
rage/registry-runtime-readonly-config
rage/registry-require-docs
rage/registry-runtime-closed-workers
rage/registry-confine-metadata-paths
rage/registry-runtime-subscription-lifecycle
rage/registry-runtime-worker-contract
rage/registry-runtime-subscribe-contract
rage/registry-lifecycle-call-semantics
rage/registry-service-tools-call-semantics
rage/registry-async-tools
rage/registry-async-lifecycle
rage/registry-enabled-default-contract
rage/registry-legacy-precedence
rage/registry-legacy-entrypoint-proof
rage/registry-canonical-tool-names
rage/registry-tool-metadata-quality
rage/registry-description-metadata
rage/registry-search-path-discovery
rage/registry-isolate-plugin-imports
rage/registry-tool-name-collisions
rage/1-zara-coding-evidence-branch-shape
rage/1-zara-coding-verify-branch-shape
rage/1-zara-coding-evidence-root-shape
rage/1-zara-coding-verify-root-shape
rage/1-zara-coding-worktree-evidence-path-shape
rage/1-zara-coding-verify-worktree-path-shape
rage/1-zara-coding-verify-path-boundary
rage/1-zara-coding-repository-text-evidence
rage/1-zara-coding-verify-evidence-shape
rage/1-zara-coding-snapshot-evidence-shape
rage/1-zara-coding-worktree-evidence-shape
rage/1-zara-coding-branch-inventory-bound
rage/1-zara-coding-verify-head-shape
rage/1-zara-coding-diff-snapshot
rage/1-zara-coding-rollback-proof
rage/1-zara-coding-inspect-bound
rage/1-zara-coding-dirty-path-coherence
rage/1-zara-coding-doc-current-surface
rage/1-zara-coding-add-lock-rollback
rage/1-zara-coding-changed-path-verify
rage/1-zara-coding-worktree-absent
rage/1-zara-coding-worktree-verify
rage/1-zara-coding-worktree-add-locked
rage/1-zara-coding-worktree-remove
rage/1-zara-coding-branch-assertion
rage/1-zara-coding-check-repository
rage/1-zara-coding-verify-tool
rage/1-zara-coding-spec-verify
rage/1-zara-coding-repository-evidence
rage/1-zara-coding-spec-compile
rage/1-zara-coding-worktree-add
rage/1-zara-coding-branch-create-cas
rage/1-zara-coding-commit
rage/1-zara-coding-branch-delete
rage/1-zara-coding-branch-create
rage/1-zara-coding-worktree-inventory
rage/1-worktree-list
rage/1-repo-list-status
rage/1-spec-language-catalog
rage/1-git-diff-summary
rage/1-git-log-adapter
rage/1-zara-coding-spec-normalize
rage/7-symbolic-memory-native-remember-get
rage/1-zara-coding-task-state
rage/5-zara-shell
rage/8-home-assistant-adapter
rage/7-zara-memory
rage/13-zara-voice-lab
rage/12-zara-voice
rage/8-zara-home-rules
rage/8-zara-home
rage/2-zara-expert
rage/32-discord-scoped-moderation
rage/31-discord-moderation-ack
rage/28-discord-moderation-audit
rage/35-discord-ci-preset
rage/33-discord-channel-commands
rage/33-discord-channel-inspection-policy
rage/27-discord-opt-in-message-content
rage/34-discord-content-diagnostics
rage/30-discord-public-output-privacy
rage/29-discord-user-isolation
rage/12-voice-runtime
rage/53-installed-runtime-smoke
rage/53-lifecycle-compat
rage/12-voice
rage/19-healthcheck-clean
rage/19-healthcheck
rage/16-timers
rage/11-comms
rage/17-contacts
rage/10-calendar
rage/14-media
rage/6-sysadmin
rage/15-files
rage/9-browser
rage/4-context
rage/3-desktop
rage/3-desktop-red
rage/52-emacs-red
rage/18-51-knowledge-brave
rage/50-github-red
fix/agent-zero-native-api
rage/53-zara-compat-red
feat/zara-starintel-server-47
fix/discord-recent-context
feat/agent-zero-bridge-40
fix/discord-tool-execution
feat/zara-persona-37
feat/declarative-runtime-layout
feat/discord-inspection-moderation
fix/discord-manager-permissions
feat/zara-org-todos
codex/zara-plugins-ci-push
feat/zara-discord
No results found.
Labels
Clear labels
accessibility
Barrier affecting people with disabilities
bug
Something isn't working
documentation
Improvements or additions to documentation
duplicate
This issue or pull request already exists
enhancement
New feature or request
good first issue
Good for newcomers
help wanted
Extra attention is needed
invalid
This doesn't seem right
question
Further information is requested
security
wontfix
This will not be worked on
No labels
accessibility
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
security
wontfix
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/zara-plugins#52
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Mission
Continuously expand and harden the rest of the Zara plugin ecosystem: external integrations, registry/install UX, packaging, compatibility and cross-plugin correctness. This is the broad integration worker after the more specialized Android, voice/model, symbolics and provider workers have had their slots.
Stagger slot
Start 15 minutes after Providers+Home (+75m). This is the final implementation slot in the cycle, leaving 30 minutes of quiet time before Frontier Research begins the next cycle.
Primary queue
zara-discordprincipal/capability isolation and production quality;zara-agent-zero,zara-starintel-server,zara-local-recall,zara-emacs,zara-personaand other dependency-satisfied integrations;zara-org-todosonce the Core replacement/composition seam is truly dependency-satisfied;Feature-expansion rule
Do not add integrations as empty wrappers. A new or expanded plugin needs a real bounded capability, explicit unavailable/degraded behavior, deterministic tests and a clear reason it belongs outside Core.
Deep-testing contract
For every slice, exercise the relevant layers:
nix flake checkat exact head.Where a plugin has UI or Android-visible behavior, require the appropriate consumer-side integration/screenshot/lifecycle tests from the owning repo rather than declaring completion from plugin unit tests alone.
Registry/package hardening
Treat installable plugin code as trusted executable software and keep installation explicit. Validate fetched registry metadata, revision/integrity, API compatibility and final discovered metadata before reporting success. Never execute downloaded plugin code as part of the download/copy step merely to validate it.
State loop
Output contract
Guardrails
main.WORKER_STATE
worker: integrations-registry
mode_used: RESEARCH
result: Froze a dependency-satisfied zara-discord lifecycle/false-success slice: startup currently returns normally when Discord credentials are unavailable, which can let Core treat a non-running integration as successfully started; next slice will make unavailable startup explicit/fail-closed without creating subscriptions/workers and lock it with lifecycle tests.
issue_or_pr: #508; relevant open PRs #511, #510, #24
head:
683bdd0e66integration_tests: not run in RESEARCH; inspected zara-discord service lifecycle and current Zara Plugin API v1 contract. Core API v1 remains current (
PLUGIN_API_VERSION = "1"), matching registry/source metadata for zara-discord 0.3.0.registry_package_tests: not run in RESEARCH; current registry advertises zara-discord 0.3.0 / api_version 1 with tool + Nix install surfaces.
security: principal/capability work remains highest-priority domain, but this bounded slice targets false-success/lifecycle correctness first: missing/invalid credentials must not look like a healthy started integration and must not leak subscriptions/workers. No secret values will be surfaced.
core_handoffs: none required for this slice; the public ServicePlugin.start/stop + PluginRuntime subscribe/start_worker contracts are sufficient.
blockers: none for the frozen slice. zara-org-todos remains separately dependent on the Core replacement/composition seam and is not selected.
next_mode: IMPLEMENT
next_target: zara-discord transactional startup/unavailable semantics — tests first for missing credentials and setup failure proving no subscription/worker leakage and no successful-start claim; then minimal implementation + exact-head plugin/registry/Nix gates in a focused branch/PR.
WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Completed one bounded zara-discord startup-safety slice in PR #513. Added lifecycle regressions first, moved Discord client construction ahead of subscription allocation, added rollback/cleanup for worker-registration failures, made stop clear plugin-owned handles, and preserved zero-secret API-v1 compatibility for missing credentials with no subscription/worker allocation and bounded generic logging. Exact-head CI also exposed that the originally frozen false-success requirement cannot be completed inside plugin API v1: ServicePlugin.start(runtime) -> None has no canonical unavailable/disabled result, while compatibility intentionally starts optional plugins without provider secrets. Filed precise Core contract blocker lost-rob0t/zara#658 rather than adding a plugin-specific sentinel or importing Core internals.
refs: #513; lost-rob0t/zara#658; CI run 34102142018
head:
da1a0e7917tests: TDD lifecycle tests cover missing-config zero-allocation, client-construction failure zero-leakage, and worker-registration rollback. Exact-head CI PASS: whitespace, compatibility contract tests, source compatibility diagnostics, installed compatibility diagnostics, registry/plugin tests, plugin package builds, and zara-avatar idle CPU budget.
blockers: Canonical Core-visible unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658. API v1 exposes only start/stop/tools and plugin runtime status is read-only, so Plugin D cannot honestly make Core distinguish a credential-disabled integration from a successful start without a Core contract change. No blocker remains for reviewing/merging the resource-safety slice itself.
next_mode: REVIEW
next_target: Adversarially review PR #513 at exact head for resource rollback correctness, secrets/raw ConfigError leakage, compatibility/registry drift, false-success claims, permission/capability bypass, and whether any plugin-specific workaround accidentally substitutes for Core #658; merge only if the reviewed exact head remains green and the blocker is accurately scoped.
WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of PR #513 found one merge-blocking partial-start rollback defect: if
runtime-eventsworker registration succeeds andgatewayworker registration then fails, the plugin closes client/subscription state but does not stop/join the already-created CoreManagedWorker, leaving stale runtime-owned worker state after failed startup. Also found root README drift (zara-discord0.2.0 vs source/registry 0.3.0). Core #658 remains correctly scoped to unavailable-vs-ready lifecycle state and is not needed to fix this rollback bug.refs: #513; #513 comment https://github.com/lost-rob0t/zara-plugins/pull/513#issuecomment-5568621505; lost-rob0t/zara#658; CI run 34102142018
head:
da1a0e7917tests: Exact-head CI PASS at 34102142018: whitespace, compatibility contracts, source/installed compatibility diagnostics, registry/plugin tests, package builds, and avatar CPU budget. Review shows coverage gap: lifecycle tests assert subscription/client rollback but do not assert
ManagedWorker.request_stop()/boundedjoin()after second-worker registration failure.blockers: PR #513 must not merge until the first managed worker is explicitly rolled back on partial startup failure. Separate Core-visible unavailable/disabled state remains blocked on lost-rob0t/zara#658. No new principal/capability bypass, raw token/ConfigError leakage, plugin-specific unavailable sentinel, or registry API-version mismatch found in changed paths.
next_mode: IMPLEMENT
next_target: Repair PR #513 tests-first: add RED partial-worker-start rollback coverage using the public
ManagedWorkerhandle, minimally callrequest_stop()+ boundedjoin()when later worker registration fails, update stale root README zara-discord version while in-scope, then rerun focused lifecycle + exact-head registry/compatibility/Nix gates.WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Repaired PR #513 tests-first at the reviewed partial-start seam. Added RED lifecycle coverage that captures the public
ManagedWorkerreturned byPluginRuntime.start_worker()and requiresrequest_stop()plus boundedjoin(timeout=1.0)when later gateway worker registration fails; then implemented that rollback without touching Core internals. Also fixed the reviewed root README drift from zara-discord 0.2.0 to 0.3.0. Core manager behavior was re-checked: on plugin startup failure it calls plugin stop andPluginRuntime._shutdown(), so the runtime-owned worker registry is cleared by Core after the plugin performs immediate cooperative worker shutdown. Registry/source remain aligned at zara-discord 0.3.0 / API v1 with tool + Nix install surfaces.refs: #513; test commit
0c66b2c0ff; implementation commitb029b42039; docs commitdd21a25d7d; lost-rob0t/zara#658; CI run 34112972653head:
dd21a25d7dtests: Exact-head CI is running on
dd21a25d. Already PASS on whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, and zara-avatar idle CPU budget. Registry/plugin tests are currently in progress; package/Nix builds are still pending in the same exact-head run. The new lifecycle test is part of that registry/plugin test phase. No stale pre-head CI is being used as evidence.blockers: Do not merge until CI run 34112972653 completes green at exact head. Separate false-success semantics remain blocked on Core lost-rob0t/zara#658 because API v1 has no canonical unavailable/disabled result; this slice does not add a plugin-specific sentinel, leak raw ConfigError/token material, or bypass principal/capability policy.
next_mode: REVIEW
next_target: Adversarially review PR #513 at exact head
dd21a25dafter CI completion. Verify the new worker-handle rollback is bounded/idempotent with Core cleanup, no secrets or permission/capability bypass were introduced, README/registry/install/Nix compatibility remains aligned, and Core #658 remains the only false-success lifecycle blocker; merge only if the exact-head run is fully green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of PR #513 at exact head
dd21a25dpassed after the partial-start rollback repair; exact-head CI completed fully green, registry/source/install metadata stayed aligned, no new secret/principal/capability bypass or plugin-specific false-success workaround was found, and PR #513 was squash-merged aseaef813695.refs: #513 (merged); merge
eaef813695; lost-rob0t/zara#658; CI run 34112972653head:
dd21a25d7d(reviewed PR head); merged main commiteaef813695tests: Exact-head CI PASS on
dd21a25d: whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, registry/plugin tests (including the new zara-discord lifecycle rollback regression), plugin package builds, and zara-avatar idle CPU budget.blockers: Canonical Core-visible unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658. No blocker remains for the merged zara-discord resource-safety slice.
evidence: REVIEW verified first-worker rollback uses public ManagedWorker.request_stop() + bounded join(timeout=1.0), plugin-owned client/subscription handles are cleared, missing ConfigError text is not logged raw, registry/source/root README agree on zara-discord 0.3.0 / API v1 with tool + Nix install surfaces, and changed paths do not alter principal/capability authorization. Core #658 remains accurately scoped; no plugin-local sentinel or permission bypass was introduced.
next_mode: RESEARCH
next_target: Reconcile current zara-discord principal/capability isolation against Core/API-v1 authorization and active issues/PRs, then freeze the highest-value dependency-satisfied security/correctness slice; if no Discord gap is actionable, move to registry install/update/remove integrity and runtime/Nix/Home Manager compatibility before broadening catalog scope.
WORKER_STATE
worker: plugin-d
mode_used: RESEARCH
result: Reconciled current zara-discord security/compatibility state and froze the next dependency-satisfied slice as transactional installer/update rollback. The highest-priority guest/public principal isolation gap is still structurally blocked in Core by lost-rob0t/zara#251, so this loop does not fake a plugin-local authorization boundary. On current main, registry/source remain aligned at zara-discord 0.3.0 / Plugin API v1, but the bundled installer updates the private library non-transactionally: it deletes the existing
libbefore renaming staging into place, then copies the plugin wrapper afterward. A failure during either replacement can leave a previously working install missing or version-skewed while the command has already mutated live state.refs: #508; closed plugin scope #26; lost-rob0t/zara#251; lost-rob0t/zara#658; merged #513; main
eaef813695; plugins/zara-discord/lib/zara_discord_service/install.py; scripts/validate-registry.py; plugins.jsonhead:
eaef813695integration_tests: not run in RESEARCH. Inspected current Discord moderation routing/tool scoping and confirmed the plugin already binds moderation actions to ephemeral message/author context tokens and protected-target checks, while Core #251 remains the required guest-principal/capability boundary for service-plugin turns.
registry_package_tests: not run in RESEARCH. Current plugins.json is schema v1, updated 2026-09-07, and advertises zara-discord 0.3.0 / api_version 1 with both packaged tool and Nix-run install surfaces. Registry validation statically checks source/registry metadata/path/install-command alignment, but it does not prove transactional live update/rollback behavior.
security: Do not weaken Discord guest/public isolation; #251 remains the structural blocker. No secret-handling change is proposed. Installer slice must preserve existing config/token/settings, never execute installed plugin code to validate a copy, and fail without destroying the last known-good install.
core_handoffs: lost-rob0t/zara#251 for derived guest principals/capabilities; lost-rob0t/zara#658 for canonical unavailable-vs-ready lifecycle state.
blockers: Principal/capability isolation is blocked on Core #251, so it is not dependency-satisfied here. The installer rollback slice itself has no Core dependency. zara-org-todos remains dependency-gated by its Core replacement/composition seam.
next_mode: IMPLEMENT
next_target: zara-discord installer transactional update/rollback — tests first for an existing install where library replacement fails and where wrapper publication fails; require old library+wrapper remain intact, staging/backup cleanup is bounded, config/token/settings remain untouched, and success publishes one coherent new library+wrapper pair. Then minimally implement same-filesystem staged/backup replacement with rollback, run focused installer tests plus registry/compatibility/plugin/Nix exact-head gates, and open a focused PR without touching main directly.
WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Completed one bounded tests-first zara-discord installer-integrity slice in PR #518. Added RED rollback regressions at
f0ae681for failed library publication and failed wrapper publication, then implemented same-filesystem staged publication at8dc7297usingos.replaceplus explicit backup/rollback so an update failure preserves the previous coherent library+wrapper pair. Existingsettings.jsonandtokenare not part of the transaction and remain untouched; installer validation still copies files only and does not execute installed plugin code.refs: #518; test commit
f0ae681048; implementation commit8dc7297c15; CI run 34129263920; lost-rob0t/zara#251; lost-rob0t/zara#658head:
8dc7297c15integration_tests: Focused installer regressions are committed and included in the repository plugin-test phase. Local clone/test execution was unavailable in this worker environment because direct container DNS cannot resolve github.com, so exact-head GitHub CI is the execution evidence. At state write, CI run 34129263920 is in progress on the exact head; whitespace and compatibility gate contract checks are already PASS, with source compatibility diagnostics running.
registry_package_tests: Registry/source were re-read before implementation:
plugins.jsonremains schema v1 and advertises zara-discord 0.3.0 / api_version 1 with tool + Nix install surfaces; source installer remains under the registered plugin. Exact-head registry/plugin tests and package/Nix builds are pending in run 34129263920 and must be green before merge.security: No principal/capability behavior was changed. Core guest/public isolation remains structurally blocked on lost-rob0t/zara#251, and canonical unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658. This slice does not log/copy token contents, alter settings/token files, execute downloaded plugin code during publication, or add a plugin-local authorization/lifecycle bypass.
core_handoffs: lost-rob0t/zara#251 for derived guest principals/capabilities; lost-rob0t/zara#658 for canonical unavailable lifecycle state.
blockers: Do not merge PR #518 until CI run 34129263920 completes fully green at exact head
8dc7297, including source/installed compatibility diagnostics, registry/plugin tests, package/Nix builds, and the repository CPU gate. Principal isolation remains separately blocked on Core #251.next_mode: REVIEW
next_target: Adversarially review PR #518 at exact head after CI completion. Verify rollback under both publication failure points preserves one coherent old pair, backup/staging cleanup cannot destroy last-known-good state, fresh-install behavior remains correct, no config/token/secret or permission boundary is touched, registry/install/Nix metadata stays aligned, and merge only if every exact-head gate is green.
WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of PR #518 found one merge-blocking interrupted-update recovery defect. Exact-head CI is fully green and exception rollback works for the covered publication failures, but
_publish_install()unconditionally deletes fixed.lib.backup/.zara_discord.py.backupartifacts before publishing. If a prior installer process was killed after moving a live artifact into backup, that backup can be the last known-good copy; the next install can delete it and then fail, leaving no old artifact to restore and violating the slice's last-known-good guarantee.refs: #518; #518 review comment https://github.com/lost-rob0t/zara-plugins/pull/518#issuecomment-5572223422; CI run 34129263920; lost-rob0t/zara#251; lost-rob0t/zara#658
head:
8dc7297c15integration_tests: Exact-head CI PASS at 34129263920. Existing RED/GREEN installer tests cover in-process library-publication and wrapper-publication exceptions and preserve settings/token. Review identified an uncovered process-interruption state: pre-existing backup with missing live artifact followed by a later failed update.
registry_package_tests: Exact-head CI PASS, including source/installed compatibility diagnostics, registry/plugin tests, package/Nix builds, whitespace, compatibility contracts, and repository CPU gate. Registry/source remain aligned at zara-discord 0.3.0 / Plugin API v1 with tool + Nix install surfaces.
security: No principal/capability, secret-handling, false-success, or permission-boundary changes were introduced in #518. Core guest/public principal isolation remains blocked on lost-rob0t/zara#251; canonical unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658. Installer still does not execute installed plugin code during publication.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: PR #518 must not merge until interrupted-update recovery is safe. Fixed backup names are currently treated as disposable even when they may be the only known-good artifact left by a killed prior installer.
next_mode: IMPLEMENT
next_target: Repair PR #518 tests-first for interrupted installer recovery. Seed states where live
libor wrapper is absent but its backup exists, inject a subsequent publication failure, and require the old coherent pair to survive/restore with bounded cleanup. Minimally replace destructive fixed-backup startup behavior with unique per-attempt backup/staging or an explicit recovery protocol, then rerun focused installer tests and every exact-head registry/compatibility/plugin/Nix gate before re-review.WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Repaired PR #518 tests-first for interrupted installer recovery. RED commit
889e0f9676seeds killed-update states where the live Discord library or wrapper is absent but its fixed backup survives, then injects a subsequent publication failure. Implementation commit88fb98ed11stops treating those backups as disposable scratch:_publish_install()first rolls surviving backup state back into the live artifact, then begins the new transaction, so a prior process death cannot cause the next install to delete the only last-known-good copy.refs: #518; RED
889e0f9676; GREEN88fb98ed11; PR comment #issuecomment-5572953916; CI run 34139611330; lost-rob0t/zara#251; lost-rob0t/zara#658head:
88fb98ed11integration_tests: Interrupted-update recovery tests are committed before the implementation and are part of the exact-head repository plugin-test phase. Existing tests also cover ordinary failed library/wrapper publication and preservation of settings.json/token. Exact-head CI is currently in progress; whitespace, compatibility gate contract, and source compatibility diagnostics are PASS, installed compatibility is running, and registry/plugin tests are pending.
registry_package_tests: Current branch registry remains schema v1 and advertises zara-discord 0.3.0 / api_version 1 with both packaged tool and Nix install surfaces; current Zara Core still exposes PLUGIN_API_VERSION = "1". Exact-head package/Nix build gates are pending in CI run 34139611330 and must pass before merge.
security: No principal/capability behavior, secret handling, or false-success semantics changed. Surviving backup artifacts contain plugin code only; settings.json/token stay outside the transaction and are untouched. The installer still copies/publishes code without executing the installed plugin. Guest/public derived-principal isolation remains structurally blocked on lost-rob0t/zara#251, and canonical unavailable-vs-ready lifecycle status remains blocked on lost-rob0t/zara#658; no plugin-local bypass/sentinel was added.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: Do not merge PR #518 until CI run 34139611330 completes fully green at exact head
88fb98ed, including installed compatibility diagnostics, registry/plugin tests, package/Nix builds, and repository CPU gate. No implementation blocker remains for the interrupted-backup repair itself.next_mode: REVIEW
next_target: Adversarially review PR #518 at exact head
88fb98edafter CI completion. Verify both interrupted-backup RED cases actually restore the old coherent pair under subsequent failure; ordinary/fresh install behavior still works; recovery and rollback cleanup are bounded/idempotent; settings/token/secrets and principal/capability boundaries remain untouched; registry/source/install/Nix metadata stay aligned; and merge only if every exact-head gate is green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of PR #518 found a remaining merge-blocking crash-recovery defect despite fully green exact-head CI: successful publication deletes
library_backupandwrapper_backupsequentially, so process death after deleting only the library backup leaves a stale old wrapper backup beside the new coherent live pair; the next install independently restores that lone wrapper backup and can reconstruct new-library + old-wrapper mixed generations before its transaction begins.refs: #518; PR review comment #issuecomment-5573499045; CI run 34139611330; lost-rob0t/zara#251; lost-rob0t/zara#658
head:
88fb98ed11integration_tests: Existing TDD covers ordinary failed library/wrapper publication and interrupted states where a live artifact is absent and its fixed backup survives. Review identified an untested reachable boundary during successful backup cleanup: live new library + live new wrapper + only old wrapper backup remaining. A later failed update can restore that stale wrapper alone and violate coherent-pair recovery.
registry_package_tests: Exact-head CI run 34139611330 PASS in full: whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, registry/plugin tests, plugin package/Nix builds, and zara-avatar CPU gate. Registry at reviewed head remains schema v1 with zara-discord 0.3.0 / api_version 1 and tool + Nix install surfaces; Zara Core still exposes Plugin API v1.
security: No new principal/capability bypass, secret exposure, plugin-code execution during install validation, false-success sentinel, or permission weakening found in changed paths. settings.json/token remain outside the code transaction. Guest/public principal isolation is still blocked on lost-rob0t/zara#251 and canonical unavailable-vs-ready lifecycle state on lost-rob0t/zara#658.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: PR #518 must not merge until crash recovery treats library+wrapper as one generation/transaction rather than independently restoring whichever fixed backup survives cleanup. Green CI does not cover this process-death boundary.
next_mode: IMPLEMENT
next_target: Repair PR #518 tests-first for interrupted successful-cleanup recovery: add RED coverage for a coherent new live pair with only stale wrapper backup surviving (plus other reachable cleanup boundaries), then minimally make recovery generation-aware/transaction-marker-based so the next failed update preserves one coherent pair; rerun focused installer tests and every exact-head compatibility/registry/Nix gate.
WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Repaired PR #518 tests-first at the interrupted-success cleanup boundary. Added RED coverage proving stale fixed backups left after a committed coherent install must not overwrite the live generation on the next failed update, then replaced independent backup recovery with a transaction marker that records the pre-update pair. Marker deletion is now the commit point: while present, recovery rolls both components back as one generation; after deletion, any surviving fixed backup is cleanup residue and is discarded instead of restored. Legacy no-marker backups are only restored when the corresponding live path is absent, preserving recoverable pre-marker interrupted states without letting stale cleanup clobber a coherent live pair.
refs: #518; test commit
f3aa55da6d; implementation commit550eba0cbc; CI run 34148287479; lost-rob0t/zara#251; lost-rob0t/zara#658head:
550eba0cbcintegration_tests: TDD coverage now includes ordinary library/wrapper publication rollback, interrupted missing-live backup recovery, and the reviewed committed-new-pair + stale-backups + subsequent-failure case. The new test was committed separately before implementation. Exact-head CI is running on
550eba0c; whitespace and compatibility gate contract tests are already PASS, source compatibility diagnostics are in progress, and installed compatibility, registry/plugin tests, package/Nix builds, and the CPU gate remain pending at cutoff.registry_package_tests: Re-read registry/source compatibility before implementation: zara-discord remains 0.3.0 / Plugin API v1 with packaged tool + Nix install surfaces, matching current Zara Core PLUGIN_API_VERSION = "1". No registry metadata was changed in this slice.
security: settings.json/token remain outside the code transaction and untouched; the marker contains only two booleans describing whether code artifacts existed. No plugin code is executed during publication/recovery, no secret values are logged or copied into transaction metadata, and no principal/capability or false-success behavior changed. Core guest/public isolation remains blocked on lost-rob0t/zara#251 and canonical unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658; no plugin-local bypass or sentinel was added.
blockers: Do not merge PR #518 until exact-head CI run 34148287479 completes fully green on
550eba0c, including source/installed compatibility diagnostics, registry/plugin tests, package/Nix builds, and repository CPU gate. Independent REVIEW should also adversarially check malformed/corrupt transaction-marker behavior and process-death boundaries around marker publication/deletion before merge.next_mode: REVIEW
next_target: Adversarially review PR #518 at exact head
550eba0cafter CI completion. Verify transaction-marker recovery preserves one coherent generation at every reachable crash boundary, stale no-marker backups cannot clobber a coherent live pair, malformed marker handling fails safely without deleting last-known-good code, cleanup is bounded/idempotent, settings/token/secrets and principal/capability boundaries remain untouched, registry/install/Nix metadata stays aligned, and merge only if every exact-head gate is green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of PR #518 at exact head
550eba0cfound a remaining merge-blocking malformed-marker recovery defect. Exact-head CI is fully green and generation-aware commit/recovery is materially better, but_recover_interrupted_publish()mutates one live component before validating the complete transaction-marker schema. A syntactically valid incomplete marker such as{"library_existed": true}can restore/remove the library and then raise on missingwrapper_existed, leaving a mixed or missing generation. Marker values are also coerced withbool(...)rather than requiring actual JSON booleans. Recovery therefore does not yet satisfy the recorded fail-safe malformed/corrupt marker requirement.refs: #518; PR blocker comment #issuecomment-5574507822; CI run 34148287479; lost-rob0t/zara#251; lost-rob0t/zara#658; plugins/zara-discord/lib/zara_discord_service/install.py; plugins.json
head:
550eba0cbcintegration_tests: Existing TDD covers ordinary library/wrapper publication rollback, interrupted missing-live backup recovery, and committed-new-pair plus stale-backup cleanup residue. Review identified the uncovered malformed-marker boundary: incomplete/wrong-type marker data can trigger partial live mutation before validation failure. No new test currently proves zero mutation for malformed/corrupt markers.
registry_package_tests: Exact-head CI run 34148287479 PASS in full on
550eba0c: whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, registry/plugin tests, plugin package/Nix builds, and zara-avatar idle CPU budget. Current registry remains schema v1 and advertises zara-discord 0.3.0 / api_version 1 with tool + Nix install surfaces.security: No principal/capability bypass, secret exposure, plugin-code execution during install validation, false-success sentinel, or settings/token mutation found in the changed paths. Core guest/public principal isolation remains open/blocked on lost-rob0t/zara#251, and canonical unavailable-vs-ready lifecycle state remains open/blocked on lost-rob0t/zara#658. The blocker is install correctness: malformed local transaction metadata can partially rewrite live code before failure.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: PR #518 must not merge until transaction-marker parsing/schema validation is fully non-destructive before any component recovery. Incomplete, extra/wrong-type/corrupt marker states must either be rejected with zero live/backup mutation or handled by a deterministic safe recovery policy; pair recovery must not begin until the whole marker is validated.
next_mode: IMPLEMENT
next_target: Repair PR #518 tests-first for malformed/corrupt transaction markers. Add RED cases for missing keys, non-boolean values, and invalid JSON proving zero live/backup mutation before rejection/cleanup; minimally parse and validate the complete marker into a typed state before touching either artifact, then recover the pair as one generation. Rerun focused installer tests and every exact-head compatibility/registry/plugin/Nix gate, keep #518 unmerged until green, then return to REVIEW.
WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Repaired PR #518 tests-first for malformed/corrupt transaction-marker recovery. RED commit
8575766da3adds missing-key, non-boolean, extra-key, and invalid-JSON cases that require zero live/backup/marker/settings/token mutation and bounded staging cleanup. GREEN commit37bbd7ffaanow parses and validates the complete marker before any component recovery, requires exactly the two expected keys with actual JSON booleans, emits only bounded generic marker errors, and cleans only staging artifacts when validation fails.refs: #518; PR comment #issuecomment-5574999310; RED
8575766da3; GREEN37bbd7ffaa; CI run 34156522933; lost-rob0t/zara#251; lost-rob0t/zara#658head:
37bbd7ffaaintegration_tests: New malformed-marker regressions are committed before the implementation and are included in the exact-head plugin-test phase. The tests-first CI run 34156498524 was cancelled by the newer push before execution completed, so exact RED execution is not claimed. Exact-head CI 34156522933 is in progress; whitespace and compatibility gate contract checks are PASS, source compatibility diagnostics are running, and installed compatibility, registry/plugin tests, package/Nix builds, and CPU gate remain pending.
registry_package_tests: Re-read current branch registry/source: plugins.json remains schema v1 and advertises zara-discord 0.3.0 / api_version 1 with tool + Nix install surfaces; current Zara Core still exposes PLUGIN_API_VERSION = "1". No registry/Nix metadata changed in this slice. Full exact-head registry/plugin/package gates are pending in run 34156522933.
security: Marker parsing is fail-closed before live-code mutation and does not include marker contents in raised error text. settings.json/token remain outside the transaction and untouched; no plugin code is executed during install validation/recovery. No principal/capability, permission, or false-success behavior changed. Guest/public principal isolation remains structurally blocked on lost-rob0t/zara#251 and canonical unavailable-vs-ready lifecycle state remains blocked on lost-rob0t/zara#658; no plugin-local bypass/sentinel was added.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: Keep PR #518 unmerged until exact-head CI run 34156522933 is fully green on
37bbd7f, including source/installed compatibility diagnostics, registry/plugin tests, package/Nix builds, and CPU gate. Independent review must verify marker-validation rejection really leaves both code generations and recovery evidence untouched, and re-check crash boundaries around marker creation/commit.next_mode: REVIEW
next_target: Adversarially review PR #518 at exact head
37bbd7ffaaafter CI completion. Verify malformed marker cases reject before any live/backup mutation, typed schema is strict and bounded, staging cleanup cannot erase recovery evidence, every reachable marker publication/deletion crash boundary preserves one coherent generation, settings/token/secrets and principal/capability boundaries remain untouched, registry/install/Nix metadata stays aligned, and merge only if every exact-head gate is green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial REVIEW passed PR #518 at exact head
37bbd7ffaa2c2ac56f6ada148a2940c60321296b; exact-head CI is fully green, malformed marker recovery is non-destructive before full schema validation, the transaction marker correctly brackets one coherent library+wrapper generation across reachable process-interruption boundaries, and no in-scope security/compatibility blocker remains. Posted review PASS and merged #518 as main commitdbcc7a763cad688f057394d38b6744825738f723.refs: #518; PR review PASS comment #issuecomment-5575430574; merge
dbcc7a763cad688f057394d38b6744825738f723; exact-head CI run 34156522933; lost-rob0t/zara#251; lost-rob0t/zara#658head:
dbcc7a763c(merged main); reviewed PR head37bbd7ffaaintegration_tests: Exact-head CI PASS. Installer TDD covers ordinary library/wrapper publication rollback, interrupted missing-live backup recovery, committed-new-pair with stale cleanup backups, and malformed markers (missing/extra keys, wrong types, invalid JSON) requiring zero live/backup/marker/settings/token mutation before rejection. Review additionally walked marker creation, live->backup, staged publication, wrapper publication, marker commit deletion, and post-commit backup-cleanup boundaries; each reachable process-interruption state preserves or deterministically restores one coherent generation.
registry_package_tests: Exact-head run 34156522933 PASS: whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, registry/plugin tests, plugin package/Nix builds, and zara-avatar CPU gate. Registry/source remain aligned at zara-discord 0.3.0 / Plugin API v1 with packaged tool + Nix install surfaces.
security: No principal/capability bypass, permission weakening, secret exposure, raw marker-content leakage, installed-code execution during validation/recovery, or plugin-local false-success sentinel found. settings.json/token stay outside the code transaction. Core guest/public derived-principal isolation remains open on lost-rob0t/zara#251; canonical unavailable-vs-ready lifecycle state remains open on lost-rob0t/zara#658.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: No blocker remains for #518; merged. Highest-priority zara-discord principal/capability isolation is still dependency-blocked on Core #251, and unavailable lifecycle semantics remain blocked on Core #658. zara-org-todos remains dependency-gated by its Core replacement/composition seam.
next_mode: RESEARCH
next_target: Reconcile the post-#518 ecosystem and select the highest-value dependency-satisfied integration/registry gap. Start with registry/install/update/remove integrity across tool + Nix/Home Manager surfaces (especially uninstall/update false-success, stale discovered metadata, and cleanup/rollback semantics); only return to zara-discord principal isolation if Core #251 becomes dependency-satisfied.
WORKER_STATE
worker: plugin-d
mode_used: RESEARCH
result: Reconciled post-#518 registry/install state and froze the next highest-value dependency-satisfied slice as zara-local-recall transactional installer/update rollback. Current main is
dbcc7a763c. zara-local-recall 0.1.0 / Plugin API v1 is registry-aligned and exposed through both packaged tool + Nix app surfaces, but its imperative installer still deletes the livelibbefore renaming staging into place and publishes the discovery wrapper afterward with a separate copy. A failure during either step can destroy or version-skew a previously working install. Existing installer tests only prove successful placement/idempotence/staging cleanup; they do not cover failed library publication, failed wrapper publication, interrupted-update recovery, or preservation of last-known-good code.refs: #508; merged #518; main
dbcc7a763c; plugins/zara-local-recall/tools/zara-local-recall; plugins/zara-local-recall/test/test_install.py; plugins.json; flake.nix; lost-rob0t/zara#251; lost-rob0t/zara#658head:
dbcc7a763cintegration_tests: not run in RESEARCH. Source inspection shows
zara-local-recallinstaller currently doesrmtree(library_dir)followed bystaging.rename(library_dir), then separatelycopyfile(entry_source, plugin_entry). Current deterministic installer tests cover only initial install and idempotent re-install; no failure-injection or interrupted-update rollback coverage exists.registry_package_tests: not run in RESEARCH. Current plugins.json is schema v1, updated 2026-09-07, and advertises zara-local-recall 0.1.0 / api_version 1 with
python3 plugins/zara-local-recall/tools/zara-local-recall installandnix run github:lost-rob0t/zara-plugins#zara-local-recall -- install. flake.nix packages the tool and immutable runtime layout generically from registry metadata, so the imperative tool remains a supported install surface and must not false-succeed or corrupt an existing install.security: No principal/capability boundary change is proposed. Local Recall remains an owner-local integration; this slice is install correctness only. Preserve existing config/daemon policy files, never execute installed plugin code during copy/validation, never log secret/token material, and never use a plugin-local workaround for Discord guest authorization or lifecycle state. Core guest/public isolation remains open on lost-rob0t/zara#251; canonical unavailable-vs-ready lifecycle state remains open on lost-rob0t/zara#658.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: none for the frozen zara-local-recall installer slice. zara-discord principal isolation remains dependency-blocked on Core #251; zara-org-todos remains dependency-gated by its Core replacement/composition seam. No overlapping open zara-local-recall issue/PR was found beyond worker #508.
next_mode: IMPLEMENT
next_target: zara-local-recall transactional installer/update rollback — tests first in
test_install.pyfor an existing coherent install where library publication fails and where wrapper publication fails; require the prior library+wrapper pair remains intact, staging/backup cleanup is bounded, unrelated config/state remains untouched, and fresh/successful update publishes one coherent new pair. Reuse the now-reviewed transaction pattern from zara-discord where appropriate rather than inventing a second semantics, but keep the diff local to zara-local-recall. Then run focused Local Recall tests plus exact-head registry/compatibility/plugin/Nix gates and open a focused PR; no direct main commit.WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Completed one bounded zara-local-recall transactional installer/update rollback slice in PR #521. Tests were committed first at
e8b6d2fd02for failed library publication and failed wrapper publication against an existing coherent install; implementation at769e276af0stages the wrapper, backs up the previous library+wrapper pair, restores both on publication failure, and bounds staging/backup cleanup while leaving unrelated Local Recall config state untouched.refs: #521; RED/tests-first
e8b6d2fd02; GREEN769e276af0; CI run 34167433283; merged #518 pattern reference; lost-rob0t/zara#251; lost-rob0t/zara#658head:
769e276af0integration_tests: Added deterministic failure-injection coverage in plugins/zara-local-recall/test/test_install.py. Library-publication failure must preserve the previous wrapper and previous library sentinel; wrapper-publication failure after library publication must restore the prior coherent pair. Both cases require unrelated daemon-policy config to remain byte-stable and transaction scratch to be bounded/removed. Existing fresh install/idempotent coverage remains. Exact-head CI run 34167433283 is currently in progress on the PR head; no green claim yet.
registry_package_tests: No registry/Nix metadata changed. zara-local-recall remains 0.1.0 / Plugin API v1 on both packaged tool and Nix install surfaces as frozen in the prior RESEARCH state. Exact-head registry/compatibility/plugin/package/Nix gates are running in CI 34167433283 and PR #521 must remain unmerged until they pass.
security: Scope is install correctness only. No principal/capability behavior, secret handling, runtime lifecycle semantics, or permissions changed. Unrelated Local Recall config/policy stays outside the code transaction; installed plugin code is copied, not executed, during install. Discord guest/public principal isolation remains dependency-blocked on open Core #251 and canonical unavailable-vs-ready lifecycle state remains open on Core #658; no plugin-local bypass/sentinel was introduced.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: No implementation blocker for the bounded exception-rollback slice. Do not merge #521 until exact-head CI is fully green. Independent REVIEW must specifically adversarially inspect process-death/interrupted-update states because this first slice uses fixed backups and in-process rollback; a crash between live->backup/publication/cleanup may still expose last-known-good or mixed-generation recovery gaps similar to the defects previously found and fixed in zara-discord #518.
next_mode: REVIEW
next_target: Adversarially review PR #521 at exact head
769e276af0after CI completion. Verify both injected failure paths truly preserve one coherent old pair, fresh/successful update behavior remains correct, fixed-backup startup/cleanup cannot delete the only last-known-good artifact after process death, library+wrapper cannot become mixed generations at any reachable interruption boundary, config/state/secrets and principal/capability boundaries remain untouched, registry/install/Nix metadata stays aligned, and merge only if every exact-head gate is green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial review of zara-local-recall PR #521 found a merge-blocking interrupted-update recovery defect: fixed
.lib.backup/.zara_local_recall.py.backupfiles are deleted unconditionally at the start of the next install, so a process killed after live->backup can leave the backup as the only last-known-good copy and the next run will destroy it before recovery. There is also no durable commit/generation marker tying library+wrapper recovery together, so reachable crash boundaries can leave ambiguous/mixed generations. Exact-head CI is independently red.issue_or_pr: #521; review comment https://github.com/lost-rob0t/zara-plugins/pull/521#issuecomment-5576791251; #508; CI run 34167433283; pattern reference merged #518; lost-rob0t/zara#251; lost-rob0t/zara#658
head:
769e276af0integration_tests: Existing new deterministic tests prove in-process exception rollback for failed library publication and failed wrapper publication against an existing coherent install, with unrelated daemon-policy config preserved. REVIEW found no interrupted-process/crash-state coverage. Exact-head CI run 34167433283 completed with
Run registry and plugin testsFAILURE; source and installed compatibility diagnostics passed, whitespace/compatibility-contract checks passed, avatar CPU passed, and package/Nix build step was skipped after the test failure.registry_package_tests: Registry at reviewed head remains schema v1 with zara-local-recall 0.1.0 / api_version 1 and both imperative tool + Nix install surfaces. No metadata drift was introduced by #521, but required exact-head registry/plugin/package/Nix gate set is not green because registry/plugin tests failed and package builds were skipped.
security: No principal/capability, secret, permission, or runtime lifecycle changes were introduced in #521. Local Recall config/policy remains outside the code transaction in the changed paths. Discord guest/public isolation is still structurally blocked on open Core #251; canonical unavailable-vs-ready lifecycle semantics remain open on Core #658. No plugin-local bypass or false-success workaround was introduced.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: #521 must not merge. Crash after
library_dir.rename(.lib.backup)and before coherent commit can leave.lib.backupas the only good library, but the next install immediately deletes it. Similar single-component/mixed-generation crash states are not recoverable without durable generation/commit evidence. Exact-head CI is also red in registry/plugin tests and skipped package builds.next_mode: IMPLEMENT
next_target: Repair #521 tests-first for interrupted-update recovery. Add RED state-based tests for process death after library backup, after library publication before wrapper backup/publication, after wrapper backup/publication before commit, and during cleanup. Preserve pre-existing recovery backups, recover/rollback library+wrapper as one generation, and use a durable strictly validated transaction/commit marker (or equivalent atomic generation scheme) before deleting recovery evidence, reusing the reviewed zara-discord #518 semantics where practical. Keep Local Recall config/policy and security boundaries untouched, diagnose/fix the current registry/plugin test failure if caused by the branch, then rerun focused Local Recall plus exact-head registry/compatibility/plugin/package/Nix gates; no direct main commit.
WORKER_STATE
worker: plugin-d
mode_used: IMPLEMENT
result: Repaired zara-local-recall PR #521 for the REVIEWed interrupted-update hole by adding tests-first crash-state coverage and porting the already-reviewed zara-discord #518 generation/commit protocol. Local Recall now uses a strict durable transaction marker to tie library+wrapper recovery together, restores the pre-update pair while the marker exists, treats marker deletion as the commit point, and prevents stale post-commit backups from clobbering a coherent live generation. Existing exception tests were retargeted to the atomic os.replace publication boundary.
issue_or_pr: #521; test commit
4abed8ac73; implementation commit162be23f10; test-boundary commit85f620a8d2; PR comment #issuecomment-5577276482; CI run 34173884208; pattern reference merged #518; lost-rob0t/zara#251; lost-rob0t/zara#658head:
85f620a8d2integration_tests: Added deterministic state-based coverage for process death after live library -> backup, after new-library publication, after wrapper publication before commit, and post-commit stale-backup cleanup residue. Each recovery path is followed by an injected subsequent publication failure and requires one coherent prior/new pair plus bounded scratch cleanup and byte-stable daemon-policy state. Existing in-process failed-library/failed-wrapper rollback tests remain and now inject at the atomic os.replace publication boundary. Exact-head CI 34173884208 is pending; no green claim yet.
registry_package_tests: Re-read current branch plugins.json: schema v1 still advertises zara-local-recall 0.1.0 / api_version 1 with both imperative tool and Nix install surfaces; no registry/Nix metadata changed. Prior exact-head
769e276ahad source/installed compatibility + whitespace/contracts + CPU green but registry/plugin tests red and package builds skipped. The branch-side test harness was coupled to the old Path.rename/copyfile publication mechanics; current tests now target the new atomic os.replace boundary. Full exact-head registry/plugin/package/Nix results are pending in run 34173884208.security: No principal/capability, permission, secret, or runtime lifecycle behavior changed. Local Recall config/policy remains outside the code transaction; transaction metadata contains only strict booleans and installed plugin code is copied/published without execution. Core guest/public isolation remains open/blocked on lost-rob0t/zara#251 and canonical unavailable-vs-ready lifecycle state remains open/blocked on lost-rob0t/zara#658; no plugin-local bypass or false-success sentinel was added.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: Do not merge #521 until exact-head CI run 34173884208 is fully green, including registry/plugin tests and package/Nix builds. Independent REVIEW must adversarially verify strict malformed-marker handling and every marker creation/publication/commit/cleanup crash boundary, because this slice intentionally reuses #518 semantics but still needs Local Recall-specific verification.
next_mode: REVIEW
next_target: Adversarially review PR #521 at exact head
85f620a8d2after CI completes. Check principal/capability and secret boundaries remain untouched; strict transaction-marker schema fails before live mutation; recovery never mixes library+wrapper generations; stale no-marker backups cannot clobber coherent live code; config/policy remains untouched; registry/source/install/Nix compatibility stays aligned; false-success semantics are not introduced; and merge only if every exact-head gate is green.WORKER_STATE
worker: plugin-d
mode_used: REVIEW
result: Adversarial REVIEW of zara-local-recall PR #521 at exact head
85f620a8d21cafafd843d8722d125832dedfcce0confirms the generation-aware transaction protocol preserves coherent library+wrapper recovery across the reviewed marker/live->backup/publication/commit/cleanup crash boundaries, but the PR remains merge-blocked: exact-head CI is red in registry/plugin tests with package/Nix builds skipped, and Local Recall lacks malformed/corrupt transaction-marker regressions proving zero mutation before rejection.refs: #521; REVIEW blocker comment https://github.com/lost-rob0t/zara-plugins/pull/521#issuecomment-5577758973; CI run 34173884208; merged pattern reference #518; lost-rob0t/zara#251; lost-rob0t/zara#658; plugins/zara-local-recall/tools/zara-local-recall; plugins/zara-local-recall/test/test_install.py; plugins.json
head:
85f620a8d2integration_tests: Source/tests were independently re-read. Crash-state coverage exists for death after library backup, after new-library publication, after wrapper publication before commit, and post-commit stale-backup cleanup residue, plus ordinary library/wrapper publication rollback. REVIEW walked marker creation, recovery while marker exists, component publication, marker deletion commit, and stale post-commit backup handling; no mixed-generation defect found in those paths. Coverage gap remains for invalid JSON, missing/extra marker keys, and non-boolean marker fields with explicit zero-live/backup/marker/config mutation assertions.
registry_package_tests: Exact-head CI run 34173884208 completed FAILURE. PASS: whitespace, compatibility gate contracts, source compatibility diagnostics, installed compatibility diagnostics, zara-avatar CPU. FAIL:
Run registry and plugin tests. SKIPPED:Build plugin packages, so the required package/Nix gate is not green. Registry/source at the reviewed head remain aligned at zara-local-recall 0.1.0 / Plugin API v1 with both imperative tool and Nix install surfaces.security: No principal/capability, permission, secret, or runtime-lifecycle changes are present in #521. Local Recall config/policy remains outside the code transaction; transaction metadata contains only booleans; installed code is published without execution. Discord guest/public principal isolation remains open/blocked on Core lost-rob0t/zara#251 and canonical unavailable-vs-ready lifecycle state remains open/blocked on Core lost-rob0t/zara#658. No plugin-local authorization or false-success workaround found.
core_handoffs: lost-rob0t/zara#251; lost-rob0t/zara#658
blockers: #521 must not merge. Exact-head registry/plugin tests are red and package/Nix builds were skipped. Additionally, the recorded malformed-marker safety property is not locally regression-tested even though the implementation currently validates the full marker before recovery.
next_mode: IMPLEMENT
next_target: Repair #521 tests-first: add RED Local Recall malformed/corrupt marker cases (invalid JSON, missing/extra keys, non-boolean values) requiring zero live/backup/marker/config mutation before rejection, diagnose and fix the exact-head registry/plugin test failure with the smallest branch-local change, then rerun focused Local Recall plus every exact-head compatibility/registry/plugin/package/Nix/CPU gate. No direct main commit and keep #521 unmerged until the full exact-head set is green.