Skip to content

Validate and stage tenant dependency workspaces for artifact publish #80

Description

@shiny-code-bot

Finish Line

Devkit validates tenant dependency workspaces and emits immutable v2 artifact provenance.

Current Status

State: In progress/Now. PR #84 is open, mergeable, and green at commit 9777313c3b7fbb68186f6d9e9d1e6ee66df2d62a. The implementation includes the typed tenant/shared workspace checker, exact committed-blob staging, Git-root/remote/replace-ref protections, digest-pinned base provenance, a dedicated two-lock artifact Dockerfile, immutable post-push evidence extraction, and Launchplane schema-v2 emission.

Validation is complete: all 214 repository tests pass with 1 skip; Ruff, package build, CLI smoke, live Launchplane schema validation, PyCharm changed/whole-project inspections, focused security/provenance review, and all four PR checks pass. Synthetic CM and OPW dependency-workspace proofs pass exact combined membership, lock-currentness, and committed-byte staging.

The final safe Linux arm64 smoke used the real refreshed enterprise runtime digest sha256:2b71d24892ffd22599c4491d7072d9a39481892c3df3429352ca5cb88b42ea8e, pushed a synthetic tenant/shared artifact to a disposable local registry, and re-read evidence from immutable artifact digest sha256:fd829bbce1b12124397a79a9ffb12ddb0c3295c0afe1aac05f40cd5050ac7a5a. Launchplane accepted the schema-v2 manifest, including support lock path/hash, tenant lock path/hash, platform identity, and distinct tenant/shared package attribution. No live deployment or production mutation occurred.

The actual CM and OPW inspections correctly expose tenant-owned migration work: both lack root lock pairs and retain legacy workspace metadata; OPW also retains a mutable VCS declaration. Those are pilot inputs, not devkit fallbacks.

Next action: merge PR #84, verify post-merge gates, close this plan, and promote cbusillo/odoo-tenant-cm#105 to the first live tenant pilot.

Blocked by: none.

Waiting for: final independent pre-merge review only; no operator input.

Last verified: July 17, 2026.

Scope

  • Add a typed dependency inspection/check command for tenant manifests.
  • Validate that every owned addon pyproject is a member of the tenant root uv workspace, workspace members use package = false, the root lock is current, and direct VCS requirements use full commits.
  • Require a tenant root pyproject/lock when owned runtime dependency declarations exist; allow pure-addon tenants with no Python runtime dependencies to remain lockless.
  • Stage devkit runtime metadata under /opt/runtime and tenant workspace metadata under /opt/project.
  • Preflight clean tenant/devkit/shared commits before copying or building.
  • Resolve base image references to immutable digests before buildx and pass digest-form references into the Dockerfile.
  • Hash the exact staged lock/input bytes before build.
  • Ingest odoo-docker's platform evidence and emit artifact-manifest schema v2, including existing base-image/build-tool provenance that the current devkit payload omits.

Acceptance Criteria

  • Missing workspace members, stale locks, mutable VCS refs, dirty source repos, changed staged inputs, and non-digest base images fail before image push.
  • The build uses the same source commits, lock bytes, and base-image digests recorded in the manifest.
  • Shared-addon dependency declarations are included in tenant workspace validation without moving shared addon ownership into the tenant repo.
  • Artifact manifests include support/runtime and tenant lock evidence, platform package evidence, external compatibility descriptors, base-image provenance, and devkit build-tool provenance.
  • No secret value, authenticated URL, local absolute path, or operator-local override is persisted.
  • Tests cover local and non-local publish, no-dependency tenants, missing/stale lock pairs, workspace-member drift, mutable VCS refs, staged-input tampering, base-image tag races, and v2 manifest output.
  • Docs and generated workspace guidance describe the contract.

Relationships

  • Subissue of cbusillo/odoo-devkit#25.
  • Depends on the Launchplane dependency-provenance schema and odoo-docker two-lock installer.
  • Blocks the CM and OPW artifact pilots.

Validation

  • Use .github/github.json gates.
  • Run synthetic CM and OPW workspace lock/export proofs.
  • Run a safe single-platform artifact build smoke before tenant live pilots.

Decisions

  • Use uv commands as the lock authority; do not parse uv's lock internals as a stable public schema.
  • Source selectors may remain repo-owned intent, but build and manifest identities are exact commits/digests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    planDurable planning issueplan:doneCompleted plan

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions