8.2 KiB
8.2 KiB
Task: Marketplace MLM-01 package selection and signature trust
Identity
- Task ID: 20260828-plugin-mlm01-5c8d1e4f
- Mode: Feature
- Branch: codex/20260828-plugin-mlm01-5c8d1e4f-mlm01-package-trust
- Worktree: D:\Datas\OthersProjects\makelore-plugin-marketplace-client-mlm01-5c8d1e4f
- Base commit:
4d8b1fcec0 - Owner: codex-mlm01
- Status: Ready for Integration
Scope
- Implement ticket MLM-01 from the exact Marketplace Release A client frontier: schema-v2 declarative package parsing, bounded hosted/skill-only definitions, fixed release-descriptor serialization, Ed25519 verification, strict SemVer client-range checks, and the code-owned production trust-store seam.
- Own only
shared/coding-plugins.ts,electron/coding-plugins/manifest.ts, the new descriptor/signature/trusted-key modules, focused fixtures/tests for those modules, and this task record. - Do not touch marketplace/network clients, Package Store, account/project services, Pi/Host/Renderer consumers, server/Operations code, hosted runtime, billing, or Release B tickets.
Project Context Loaded
- Concurrent Task Gate passed after
check_project_docs.py;task_context.py startandstatus --jsonmatch this task ID, owner, isolated worktree, branch, mode, and exact base. - Planning Gate passed after reading
AGENTS.md, the mandatory project-memory startup set, relevant architecture/domain/evidence/reflection/commitment/stale records, the Marketplace implementation spec sections 1-6, 10.1, 13.2-13.3, the full ticket graph MLM-01, the accepted Marketplace design sections 6, 11.2-11.5, 14, and 18.3, and peer task records for the coordinator and prior P0 package/policy/runtime work. - Current integrated memory is a historical snapshot and predates Marketplace; the exact implementation spec, ticket graph, design authority, and coordinator frontier are authoritative. The prior P0 parser is the compatibility baseline, not a source branch to merge or modify.
- Other active local owners are the Marketplace client coordinator and historical P0/review tasks in separate worktrees. Their records identify no semantic conflict with this isolated parser/trust scope. The coordinator owns only integration/documentation and later Marketplace tickets; MLM-02 owns the network/Package Store files after this handoff.
Intent And Constraints
- Preserve schema-1 bundled compatibility exactly, including code-owned adapter, settings, and preview privilege allowlists; schema-2 packages cannot name any such privilege and cannot narrow arbitrary strings into code-owned IDs.
- Accept only the closed schema-2 vocabulary:
skill_onlywith empty tools and grants, or declarativeplatform_hostedwith protocolmakelore-hosted.v1, namespaced permissions, closed bounded input/output schemas, andprojectWriteLease=false. Parsing does not execute package files or implement hosted runtime. - Reject unknown object fields/components/paths, malformed or unbounded JSON Schema, duplicate tool/capability mappings, unsupported local execution, invalid identifiers, and schema-v2 adapter/settings/preview claims with stable validation failures.
- Build the exact compact, fixed-order release descriptor bytes from the closed shape and verify descriptor identity, artifact size/SHA-256, Ed25519 signature, known key ID, and MakeLore compatibility range. No generic canonicalizer is introduced.
- Production trust is code-owned and fail-closed when the official public key is absent. No environment/runtime public-key override and no production private key are allowed. Ephemeral keys may be injected only through test/service dependencies.
- Keep parsed definitions immutable and distinguish trusted Package Store provenance from manifest self-assertion. Do not add network, install, index, account, project, registry, Pi, Host, Renderer, billing, or Release B behavior.
Implementation Plan
- Inspect the exact base parser, shared contracts, package-resource path helpers, and existing test conventions; identify compatibility seams without editing.
- Add red focused tests for schema-v2 golden/invalid cases, bounded schema validation, immutable provenance, descriptor byte order/identity and digest, compatibility ranges, key lookup/fail-closed trust, and Ed25519 failure modes.
- Implement the smallest cohesive shared definitions and parser/descriptor/ signature/trusted-key modules within the ownership boundary.
- Run the owned focused suite, relevant existing manifest/package regressions, typecheck, scoped/full lint, and diff/doc gates; investigate only failures attributable to this ticket.
- Update this record with the actual outcome and verification ledger, run
task-aware drift, complete
task_context.py, and return one clean source commit whose sole parent is the exact dispatch base.
Outcome
- Implemented MLM-01 from the exact
4d8b1fcec0a751d2935effc7816c7e59f568ec65frontier. Schema 1 remains bundled/Data Service compatible while schema 2 now parses immutableskill_onlyand declarativeplatform_hosteddefinitions, including the closed bounded JSON Schema subset, hosted permission namespace, tool/operation uniqueness, and trusted package metadata. - Added the fixed compact release descriptor serializer/parser, strict SemVer range comparison, Ed25519 descriptor verifier, and a code-owned fail-closed signing-key loader. Injected key stores remain an explicit test/service seam; no environment key override or production private key was added.
- The official MakeLore Ed25519 public key has not been supplied. Production
signing activation therefore remains an explicit hold represented by the empty
code-owned trust table and
PLUGIN_SIGNING_KEY_ACTIVATION_HOLD; injected-key verification is covered and is not presented as production activation. - No network, Package Store, account/project, registry, Pi/Host, Renderer, billing, hosted runtime, server, Operations, or Release B code was changed.
Verification
- Before each check, the concrete failure and follow-up action were defined:
check_project_docs.py: detect malformed/missing project-docs concurrency assets; PASS before planning and implementation.task_context.py status --json: detect owner/base/worktree/branch drift; PASS for this task and exact dispatch base.- Initial focused red run: detect missing contract modules; it failed as expected before implementation, then became green after the modules landed.
vitest run tests/unit/coding-plugin-marketplace-contract.test.ts: detect schema/descriptor/trust regressions; PASS, 19 tests.- Existing manifest/Data Service/Pi resource suite: detect schema-1 and packaged-resource regressions; PASS, 4 files/46 tests.
- Registry/adapter/Pi extension host/bundle/tool suite: detect shared contract projection regressions; PASS, 5 files/39 tests.
pnpm run typecheck: detect TypeScript contract/import errors; PASS.- Scoped ESLint: one empty-interface error was fixed in the task-owned manifest options type; rerun PASS with no errors.
pnpm run lint:check: detect repository lint errors; PASS with five pre-existing React warnings and zero errors.pnpm run build:vite: detect renderer/Electron build regressions from the shared contract changes; PASS with only the repository's existing chunk and dynamic-import warnings.pnpm test: detect cross-repository client unit regressions; PASS, 202 test files/1713 passed/2 skipped, followed by pressure suite 1/1.git diff --check: detect whitespace/boundary corruption; PASS.
- Final task-aware
check_doc_drift.pyandtask_context.py completeare the remaining handoff gates and will be run before the source commit.
Follow-ups
- Supply the official platform Ed25519 public key through the code-owned release resource before production activation; keep the deployment private key only in the Works Square deployment secret.
- MLM-02 may consume these primitives after this single source commit is merged into the client coordinator frontier; its Package Store must compare requested Release metadata before atomically installing bytes.
Promotion Candidates
- None. This feature task did not modify canonical project memory or accepted decisions.