feat(phase02): mirotalk-admin — audit + freeze + import + release + acknowledged_risks #30
No reviewers
Labels
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
pdurlej/platform!30
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/orders/phase-02-mirotalk-admin"
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?
Summary
Phase 02 broader vision applied to mirotalk-admin — second of 2 PR-y from Option C split (n8n-worker = #29 merged; this is the second). NO conflict with PR #27 public_reason work — mirotalk-admin is Tailnet-only (
internet_exposed: false).Pre-emptive fixes (lessons from PR #29 canary v3-v6)
This PR applies 3 patterns we learned during n8n-worker:
yq-from-manifest digest pattern (no truncated literalsha256:abc…)module.yaml.spec.runtime.compose_fileplatformctl plan/apply --approved <SHA>as canonical (charter §3 deploy flow);docker composeis break-glass onlyWhat is added
image_observed,image_digest_pinned_in_compose: false,image_audit_ts,image_build: local,statefulness: statelessuser_facing_outcome,acceptance_criteriaspec.risk.acknowledged_risks: [docker-sock-bind]with full rationale citing charter §6 cognition rule "product value first, tech second". Risk bounded by Tailnet-only exposure + admin password gate + ts-allowlist@file middleware.Pre-auth
Per operator 2026-05-02: small follow-up PR, claude self-merges after 6/6 OK canary. PR 2 of 2 Option C split.
Validation
Co-authors
3+3 ensemble review by
claude— tech + product hatsTech hat: ✅ OK (confidence 0.78)
Risks
medium— acknowledged_risks schema location may not match validatormodule.yaml: acknowledged_risks added under spec.risk (alongside blast_radius/internet_exposed/human_wakeup_allowed). PR description claims jsonschema.validate passes, but no schema diff is shown in this PR — the field landed via PR #29 per the description.low— Runbook recovery command contradicts itself on plan-file argumentrunbook.md new 'How to recover' section says CLI signature isplatformctl apply <plan_file> --approved(positional plan_file required), but PR description still advertisesplatformctl plan/apply --approvedwithout a plan file. Operator reading either surface gets a different commandOpportunities
docker inspect ... --format '{{.Image}}'sha256 into image_observed), but the field currently holds the taghome-platform-mirotalk-admin:v1.0.75-hp1rather than the image-id digest. A one-line follow-up could populate the sha256 and immediately close half the digest gap without registry setup.Product hat: ✅ OK (confidence 0.85)
Risks
low— docker.sock bind acknowledged but no re-evaluation trigger captured operationallymodule.yaml acknowledged_risks docker-sock-bind; runbook says 're-evaluate if exposure model changes' but nothing enforces thisOpportunities
acknowledged_risksblock with id/rationale/acknowledged_by/acknowledged_at is a clean shape. Worth promoting into the schema as a first-class field (if not already) so other modules with similar bounded-risk decisions can follow the same template instead of reinventing per-module.3+3 ensemble review by
codex— tech + product hatsTech hat: ❌ NOT_OK (confidence 0.88)
Risks
high— Blast radius understates docker.sock host controlmodules/mirotalk-admin/module.yaml:56 setsblast_radius: self, while lines 62-63 document/var/run/docker.sockbind andcontainer takeover → host docker control; schema/module.schema.json:300 hashostas an explicit blast-radius value.spec.risk.blast_radiustohostfor this module, or document a narrower platform-approved meaning forselfthat still covers Docker socket host control.medium— Risk acknowledgement timestamp is not date-timemodules/mirotalk-admin/module.yaml:69 usesacknowledged_at: '2026-05-02', while schema/module.schema.json:314 declaresformat: date-timeand describes RFC3339 UTC.2026-05-02T00:00:00Zor the actual operator acknowledgement time.medium— Secret provider contract contradicts audited env keysmodules/mirotalk-admin/module.yaml:52-53 declaresprovider: env-only-non-secret, but modules/mirotalk-admin/runbook.md:31 listsADMIN_PASSWORD_HASHandADMIN_JWT_SECRETas live env keys.spec.secrets.providertoexternalorinfisicaland add secret refs for the admin password hash/JWT secret, without adding values.Product hat: ✅ OK (confidence 0.82)
Risks
medium— Docker socket acceptance depends on memory disciplinemodules/mirotalk-admin/runbook.md: acknowledged risk section says re-evaluate if exposure model changes, but the manifest only records today's acknowledgment, not a machine-checkable trigger.Opportunities
3+3 ensemble review by
glm— tech + product hatsTech hat: ✅ OK (confidence 0.95)
Opportunities
Product hat: ✅ OK (confidence 0.90)
Risks
low— Open loop: smoke test file missingrunbook.md:73 - "Smoke test: tests/smoke.sh declared but file not yet written"Opportunities
Review decision
Status: ELEVATED — recommended action:
deferSingle-reviewer high-risk findings
spec.risk.blast_radiustohostfor this module, or document a narrower platform-approved meaning forselfthat still covers Docker socket host control.Reviewer dissents
tech-gptvoted NOT_OK (confidence 0.88)Operator decisions (yes/no)
Per-actor evidence: see comments by
claude,codex,glmabove. Tech: 2/3 OK · Product: 3/3 OK.Operator decisions applied (commit
a730c09)spec.risk.blast_radius: self → host. Runbook attribution noting the canary finding deferred (linter conflict on the runbook edit; manifest fix is what canary cared about).Per pre-auth A claude self-merges, but as we learned on PR #28 + #29, claude PAT lacks merge permission (branch protection). Twoja kawa klepie #30. ☕
Validated:
jsonschema.validate(manifest, schema) → ✓post-fix.