chore: sync private v5.6.0 (3c7fb1a) - #48
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
v5.6.0.sync/v5.6.0-3c7fb1a.Release notes
Added
pnpm landing:deploy:staging(per-file upload into astaging/subdomain directory, never the production root),pnpm landing:verify:staging(headless-Chrome acceptance gate, reused asscripts/verify-landing.mjs --url <any URL>), and a Phase-3 HITL gate (operator compares staging against the Claude Design canvas) beforepnpm landing:promotere-deploys the exact staging-validateddist/bytes tomissionkit.io— never rebuilding — withpnpm landing:rollback [release]restoring a prior archived production artifact in one command. Newscripts/lib/hostinger.mjsreimplements the Hostinger REST calls the prior interactive-MCP deploy used, standalone (zero new dependencies). Staging noindex ships as a generatedstaging/.htaccess+robots.txt, not adist/toggle, so promote's identical-bytes invariant can't accidentally noindex production. Live-verified in production 2026-08-23: staged, operator-approved, and promoted tomissionkit.iofor real, byte-identical DOM confirmed on both hosts. Planmissionkit-staging-promote.scripts/build-landing.mjsgains a build-time changelog box injector: it readsCHANGELOG.md's latest public-facing (non-[Unreleased]) release entry and injects a plain-text (markdown decoration stripped, not converted — so truncation can never leak an unclosed token), HTML-escaped preview into a canvas-provided<div data-changelog-content></div>container. The container does not exist in the current Mission Kit Landing canvas export yet, so this step currently no-ops with a logged warning; it is the repo-side half of replacing the Footer CTA's terminal-typer animation with a real changelog box. Canvas-side change (plus the hero eyebrow → live Mission Kit release badge, scoped to the one authorizedimg.shields.iolive-request exception) is a pending hand-off:.cursor/context/landing-missionkit/UPSTREAM-DESIGN-FIX-PROMPT-badge-changelog.md. Confirmed edit route (this account has no owned/shared write access to that canvas) and the scoped self-containment exception are recorded in ADR2026-08-05_landing-external-design-source-of-record.md(2026-08-22 addendum). Planlanding-eyebrow-live-badge-and-changelog-box.registry/registry.json's L0 section is now generated from code (packages/cli/src/lifecycle/l0.ts'sL0_ARTIFACTS) on everyscripts/build-registry.mjsrun, instead of hand-curated — reviving the abandonedarchive/l0-generate-from-codetag against the current pipeline. Newscripts/derive-l0-artifacts.ts+scripts/emit-l0-artifacts.mjs(viapnpm --filter @dadado/agent-kit-cli exec tsx, sincetsxisn't hoisted to the repo root). Verified idempotent (two consecutive rebuilds produce zero diff) and non-regressive on hand-curated L2 entries (readCuratedArtifactsnarrowed tolayer === "L2"only — L0 no longer needs preserving-by-hand). Closed two real drift gaps surfaced along the way:dashboard-broadcast/updatecommands added toL0_ARTIFACTS(existed on disk, were never declared), andinstall.md's Port B table reconciled to match.l0.test.tsdeliberately keeps its portable "legacyonboardabsent" assert rather than a strictregistryL0Paths === canonicalSourcesequality — private-repo parity is already enforced by CI's repo-gated "Registry catalog parity" step, and the public mirror independently ownsregistry/**, so a second unconditional test-level assert would reintroduce the public-CI breakerrors/2026-07-24_public-sync-ci-test-portability.mdalready paid down twice. Planl0-generate-from-code-revival.dashboard/logo.svg, visual-kit palette) plus the CLI's 9-lineHELMET_ASCIIas a monochrome fenced block, a curated 2×2 Mission Control screenshot gallery (assets/production/*.png, newly synced), and a GitHub social preview asset (dashboard/social-preview.svg/.png, 1280×640, helmet on the#0b0e14plate per the marketplace logo spec) with an apply checklist indocs/github-about.md.packages/cli/README.md(the actual npm storefront) gets minimal badge/hero parity. Planreadme-public-hero-badges.dsh) modernization study, docs-only: ADR2026-08-22_deepseek-harness-reject-adapt-concepts-docs.mdranks 12 deepseek-harness concepts against Agent Kit surfaces (/run-plantick contract, Task worker dispatch, HITL Ask questions, memory-loop) — 6 reject, 4 already covered kit-native, 1 adapt-concepts (docs-awareness only: a durable per-step replayable event log is a real gap but stays unadopted to avoid a second state system alongside markdown HANDOFF/memory), 1 thin-adapter note (a second, unrelated ACP surface). Nodsh/Cordis dependency, no plugin-composition runtime, no relaxation of sequential one-Task-per-plan dispatch. No incorporation/modernization work ships from this study; any uptake of the two non-reject items is deferred to a separately-scoped future plan. Plandeepseek-harness-modernization-study(Phase 0/1; Phase 2 is this changelog closeout).Fixed
monitor_wants_advisor()(.cursor/scripts/plan-external-review.sh:1734) used an unanchoredgrep -qFsubstring match on the<!-- audits-advisor-escalate -->sentinel, so any prose mention of it — including a negation like "no<!-- audits-advisor-escalate -->needed" — false-positived and re-spawned a costly Opus advisor pass on every future audit run touching that monitor. Now anchored to a standalone HTML-comment line (grep -qE '^[[:space:]]*<!-- audits-advisor-escalate -->[[:space:]]*$'), matching the prompt template's own "exactly one HTML comment line" contract. Verified against both known false positives (plan-monitor-audits-atomic-wait-reviewer-fallback.md,plan-monitor-deepseek-harness-modernization-study.md:79), which no longer match; a genuine standalone sentinel line still triggers escalation. Regression test added (plan-external-review-model-routing.test.mjs). Found by an Opus advisor pass during the 2026-08-22deepseek-harness-modernization-studyaudit; done-marker suppression (Phase 2) considered and skipped as unsafe — see plan body. Planaudits-advisor-escalate-sentinel-anchor-fix.scripts/deploy-landing-staging.mjs's DNS-record step raced Hostinger's own auto-provisioning: creating a new subdomain already auto-adds anALIASrecord for it, but the script immediately re-checked the zone and, seeing it not yet propagated, tried to add a conflictingCNAME— a realHTTP 422(RRset ... IN ALIAS must not be used with CNAME on the same name) on the first live production run. Now skips the explicit DNS step entirely when this run just created the subdomain; only checks/adds on the branch where the subdomain already existed. Found live 2026-08-23, planmissionkit-staging-promote.check-public-deny-links.mjsfailed closed only on an explicit manifest!exclude; a README/docs link into a path the manifest never mentions at all (neither included nor excluded) passed silently and 404'd on the public mirror. Now checksisPublicSyncedPathdirectly, so "absent from the manifest" fails too. Also fixes two by-products of the stricter check rather than suppressing them: template{placeholder}interpolations (isPlaceholderTarget, matching the existingcheck-markdown-links.mjsconvention) and a real folder link in a.mdcrule file whose trailing-slash target needs restoring before it matches thegit-hooks/**glob. Broad Intake 2026-08-16 error finding, planreadme-public-hero-badges.sync-public.mjs's content-denylist scan read every synced file viareadFileSync(path, "utf8")and relied on a try/catch to skip binaries — but that read never throws on binary bytes in Node, so the intended binary exemption never actually applied. Latent since the manifest never included a binary file before; surfaced as a false positive (a private-client-name denylist term coincidentally present in a screenshot's compressed PNG bytes) the momentassets/production/*.pngwas added. Fixed with a real binary check (NUL byte in the first 8000 bytes, the same heuristicgit/grep -Iuse) ahead of the UTF-8 decode + regex scan.Source
3c7fb1async/v5.6.0-3c7fb1a