Prepare the v1.4.0 release and stop stale completions projecting complete - #959
Prepare the v1.4.0 release and stop stale completions projecting complete#959devin-ai-integration[bot] wants to merge 16 commits into
Conversation
…lete Bump the current release to 1.4.0 across source, materialized templates, current docs, install pins, and release hygiene, including the committed package manifest that had drifted to a stale beta version. Release readiness and release hygiene now fail when that manifest disagrees with pyproject.toml or src/code_mower/__init__.py. Add v1.4.0 release notes, changelog, and release-history entries covering the whole v1.3.1..v1.4.0 delta: optional Devin peer participation and the hosted work-order lifecycle, the bounded optional Graphify provider, and the Slack command and ingress foundation, described as a foundation for later worker delivery rather than a completed integration. DevinWorkOrders no longer projects a finished session while a persisted completion rejection stands: when the remote projection reports complete, the returned logical projection is running / result_not_ready / status. The authoritative rejection block, the durable remote record, RemoteSessions result precedence, and exact-round and PR/head verification are unchanged. Correct the Devin peer-support qualification record to separate the local round-0 build/Twine result from GitHub CI coverage, state the exact matrix scope, record the completed Board and cloud evidence from #911, and describe the PACKAGE_FILES materialization effect. Co-Authored-By: bot_apk <apk@cognition.ai>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Co-Authored-By: bot_apk <apk@cognition.ai>
Co-Authored-By: bot_apk <apk@cognition.ai>
…fest equality Co-Authored-By: bot_apk <apk@cognition.ai>
… uploads Co-Authored-By: bot_apk <apk@cognition.ai>
…nfirmation Require the post-create Release asset check, fail-closed Devin permission owner confirmation, a fully isolated fresh-source install, port-to-repository Board binding, and schema/identity-bound assertions for Board doctors, campaign watch/status/upload and Board snapshot evidence. Reject repeated JSON object keys in the committed manifest so a duplicated key cannot normalize into apparent exactness. Co-Authored-By: bot_apk <apk@cognition.ai>
Validate raw campaign provider rows and Board doctor check rows before building dictionaries, bind adoption results to their provider and the cold_install context, bind the Board snapshot bundle and event to the release repository with exact preview correlation, gate both cloud uploads behind a parsed cloud doctor probe, allow only a queued owner warning in Board doctor release semantics, standardize pip isolation across all eight post-merge package-source sites, and replace literal cloud identifiers with private variables. Co-Authored-By: bot_apk <apk@cognition.ai>
Make ordered runbook bash blocks fail fast, bind the GitHub Release body to the exact release checkout notes, bind every workflow run to the v1.4.0 tag branch, prove the rehearsed CLI version equals the installed distribution and requested candidate version, and bind private cloud identities to the selected install profile. Co-Authored-By: bot_apk <apk@cognition.ai>
… and make the nested snapshot doctor contract exact Co-Authored-By: bot_apk <apk@cognition.ai>
…s and docs Co-Authored-By: bot_apk <apk@cognition.ai>
… release commit - use one defined RELEASE_CHECKOUT in the ordered runbook and test variable data flow - document source-exclusive TestPyPI qualification and scan that doc for unsafe indexes - resolve the stored install profile with ambient cloud token/endpoint excluded - return manifest digest, event ids and type counts from board-snapshot and cloud upload - record and enforce source git provenance while the board snapshot is collected - gate workflow_dispatch builds and publishes on an expected_sha identity job - treat the PyPI-verified artifact map as immutable release evidence - bind board repository paths to their slugs before the boards restart Co-Authored-By: bot_apk <apk@cognition.ai>
Co-Authored-By: bot_apk <apk@cognition.ai>
Co-Authored-By: bot_apk <apk@cognition.ai>
Codex audit (merge-authority lane)Head SHA: Codex Audit: BLOCKED Summary: The executable release runbook aborts during the Board restart stage because its fresh clone never receives the newly created release tag. Findings:
|
Claude audit (merge-authority lane)Head SHA: Claude Audit: PASS Summary: Large v1.4.0 release-prep PR (Devin-authored, not a Claude branch, so independence guard does not apply). Reviewed the core runtime change (DevinWorkOrders stale-completion projection fix), cloud_client manifest/identity/provenance hardening, release workflow SHA-binding gate, and version-consistency tooling. The stale-completion fix correctly persists the rejection before releasing the compare-bound result (verified against the added KeyboardInterrupt-interruption test), and the new cloud upload/identity/checkout-provenance checks are defensive improvements with matching test coverage. No correctness, security, or data-loss regressions found in the reviewable diff. Findings: none. |
Co-Authored-By: bot_apk <apk@cognition.ai>
|
Codex P2 ( Step 15 now fetches the published tag into the fresh clone before asserting its target: git -C "$RELEASE_CHECKOUT" fetch --no-tags origin "+refs/tags/v1.4.0:refs/tags/v1.4.0"
test "$(git -C "$RELEASE_CHECKOUT" rev-list -n 1 v1.4.0)" = "$RELEASE_SHA"Both commands are now required release-readiness assertions, with tests that the fetch precedes the |
…mmit Board collection Co-Authored-By: bot_apk <apk@cognition.ai>
Codex audit (merge-authority lane)Head SHA: Codex Audit: BLOCKED Summary: Strict Board snapshots fail from repository subdirectories because the clone source is not normalized to the repository root. Findings:
|
Claude audit (merge-authority lane)Head SHA: Claude Audit: PASS Summary: Large v1.4.0 release-prep PR (Devin-authored, branch devin/912-release-v1.4.0). Core behavioral fix in devin_work_orders.py (stale-completion rejection no longer projects a "complete" session) is correctly implemented, ordered for crash-safety, and covered by targeted tests. Extensive new cloud-upload identity/provenance verification (bundle manifest digest binding, cloud profile identity checks, git checkout provenance) is defense-in-depth, consistently applied across cloud.py/operations.py/release_campaigns.py, and backed by substantial new tests. The bulk of the diff is documentation/version-bump churn and an elaborate self-verifying release runbook (release_readiness.py doc-lint assertions), which is unusual but not functionally risky since it only gates CI/release readiness, not runtime behavior. No P0/P1/P2 correctness, security, or data-loss issues found in the shipped code paths. Findings:
|
Co-Authored-By: bot_apk <apk@cognition.ai>
|
Codex P2 The two Claude P3 notes are left as-is: the hardcoded |
Closes #912. Part of #901. Depends on #911.
Summary
Current release becomes
1.4.0inpyproject.toml,src/code_mower/__init__.py, materializedbuilder-provenance.yml.j2templates, current install pins and release claims across the docs, and the release-hygiene assertions. v1.3.1 release notes, qualification records, and other historical statements stay historical.The committed
code-mower-package-manifest.jsonis a current package surface, so its stalepackage.version(0.5.0b53) becomes1.4.0. Release hygiene andrelease-readinessnow fail when it disagrees with either source version:New
docs/v140-release-notes.mdplusCHANGELOG.mdanddocs/release-history.mdentries covering the wholev1.3.1..v1.4.0delta: optional Devin peer participation with the local/hosted setup, readiness, lifecycle, work-order, context-delivery, review-evidence, and recovery work; the bounded optional Graphify provider with its revision-bound local graph and no default dependency; and the Slack command and authenticated-ingress foundation, described as a foundation for later worker delivery rather than a completed Slack integration. README anddocs/current-state-and-roadmap.mdposture rows follow. Claude + Codex remain the first-run default and Devin stays optional.Release hardening in
DevinWorkOrders: a persisted completion rejection no longer coexists with acompletesession projection, which could make an orchestrator stop polling an active fix round.Only the returned logical projection is copied. The authoritative rejection block (
state: rejected, a bounded reason such asstale_completion,next_action: collect_after_provider_update), the durable remote record, sharedRemoteSessionsresult precedence, and exact-round, issue, repository, branch, author, PR, head-SHA, and base-branch verification are unchanged; no raw structured output is inspected or exposed and no provider work is retried or created. A later valid exact-round collection clears the rejection and returns verified PR evidence.docs/devin-peer-support-qualification.mdcorrections found after Add Devin peer-support qualification scorecard #958 merged: the round-0 localbuild/twine checkresult is separated from GitHub CI; CI coverage is stated exactly (editable installs on 3.12/3.13/3.14; release readiness, regular base install, easy-mode smoke, fresh-clone rehearsal, and package-install rehearsal on 3.12 only; PR CI does not run Twine), so no fresh-wheel or Twine claim spans every matrix version; the Board/cloud section moves from pending to the completed trusted-orchestrator evidence on Devin: peer-support qualification and public scorecard #911 (exact-mainBoard privacy/gate inspection passed; one zero-reportboard_snapshotevent with no report text); and thePACKAGE_FILESentry is described as changing generated standalone package materialization while docs stay outside the built wheel. The v1.4.0 hardening item above is recorded there too.Post-merge release steps (tag,
release.ymlruns, TestPyPI/PyPI publication and rehearsals, artifact SHA-256 comparison and GitHub Release, local installation, published-package campaign, Board restart, CodeMower.com metadata upload) are documented in the release notes with their expected evidence and left to the orchestrator.Validation
From this clean release checkout on Python 3.12:
unittest discover -s tests: 3253 tests, 18 skipped, OK.ruff check .,privacy_scan.py,compileall -q src scripts,smoke_easy_mode.py --json: clean.release-readiness --json:pass, 15/15 checks, version1.4.0, speccode-mower==1.4.0, tagv1.4.0.package-install-rehearsal --package-spec . --work-dir /tmp/code-mower-v140-local-rehearsal --json: pass, reportedcode-mower 1.4.0.python -m buildthentwine check dist/*: sdist and wheel PASSED (local result; PR CI does not run Twine).fresh_clone_rehearsal.pyat this exact head:pass;doctor --adoption --jsonfrom that fresh clone: 56 checks, 0 failures.CI, the package matrix, and
code-mower/gaterun on the exact head; their results are the authoritative record.Risk / Rollback
Data Or Secret Exposure
Link to Devin session: https://app.devin.ai/sessions/b67c789defa644749e1396ab6900244e
Open in Devin Desktop: https://app.devin.ai/desktop/session/b67c789defa644749e1396ab6900244e?variant=devin