Repository navigation
fix(#237): reject stale change-set bases in check - #238
Conversation
CI's Specification store check accepted a proposed change-set manifest whose base_commit was eight commits behind main, because ears-manager check only validated SHA format and impact equality. A human reviewer had to catch the git-integration freshness rule. check now applies the Source Control Manager publish conditions to every proposed manifest: BASE_NOT_ON_DEFAULT, DEFAULT_MOVED, and BASE_COMMIT_STALE. Approved manifests stay exempt. The workflow already fetches the configured default branch, so no workflow change is required. Updating base_commit alone is not enough: the impact assessment must be re-recorded against the new base. Closes #237
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
|
🤖 Review · Commit: |
|
Risk Assessment: moderate (2/5) DetailsModerate diff size with clean metadata and complete issue coverage balances against elevated churn and regression history in modified CLI state and specification files without a feature flag. |
|
Looks good to me Labels: PR modifies ears-manager CLI and documentation |
|
🤖 Finished Review · ✅ Success · Started 9:50 PM UTC · Completed 10:05 PM UTC Commit: Runtime: pi · Model: google-vertex/gemini-3.8-flash → gemini-3.8-flash · Effort: high · Cost: $5.23 |
|
🤖 Finished Retro · ❌ Failure (agent timed out after 30m0s without completing (timeout: 30m0s)) · Started 1:16 PM UTC · Completed 1:47 PM UTC Commit: Runtime: pi · Model: google-vertex/gemini-3.8-flash → gemini-3.8-flash · Effort: high · Cost: $2.64 |
|
/fs-retro |
Retrospective Summary: PR #238Executive OverviewPull Request #238 (fix(#237): reject stale change-set bases in check) resolved Issue #237, which was originally filed by a retrospective agent on PR #236. The PR implemented change-set The implementation, automated tests ( Autonomy Readiness Assessment
Workflow Lifecycle Analysis & Corroborating EvidenceAnalysis of the workflow runs revealed two operational friction points that are already tracked by existing upstream issues. Per deduplication guidelines, evidence is preserved here rather than in redundant proposals:
Improvement ProposalsTwo new systemic improvement proposals are submitted:
Proposals filed |
|
🤖 Finished Retro · ✅ Success · Started 3:02 PM UTC · Completed 3:28 PM UTC Commit: Runtime: pi · Model: google-vertex/gemini-3.8-flash → gemini-3.8-flash · Effort: high · Cost: $2.38 |
Summary
ears-manager checknow enforces change-setbase_commitfreshness against the project default branch, using the same conditions as Source Control Managerpublish.On PR #236, a proposed manifest whose
base_commitwas eight commits behindmainpassed CI becausecheckonly validated SHA format and impact-assessment equality. A human reviewer had to catch the contract indocs/architecture/git-integration.md.For every proposed change-set manifest (the existing approval-ref rule, not a persisted
statusfield):BASE_NOT_ON_DEFAULT(status 4) whenbase_commitis not a full commit ID reachable from the default-branch headDEFAULT_MOVED(status 5) when that head is not reachable fromHEADBASE_COMMIT_STALE(status 5) when the head is reachable fromHEADbut the normalizedbase_commitdiffers from itApproved manifests remain exempt. The diagnostic names the recorded base and the current default-branch head. Recovery is the complete governed refresh: merge the default branch,
change-set update --base-commit, rerunimpact, record a reviewed assessment, thencheck, commit, and push. Updatingbase_commitalone still fails because it makes the impact assessment stale.The CI
specjob already fetchesrepository.default_branchfromrepository.canonical_remoteand runsears-manager check, so the workflow is unchanged.Testing
go test ./internal/cli/ -count=1andgo test ./... -count=1inears-managergo vet ./...andgofmt -linears-managerpython scripts/lint.py --fileson the changed files (pre-commit could not fetch hook repos in this sandbox)New self-hosting tests cover a proposed manifest behind the fetched default head (
DEFAULT_MOVED), merge without a base update (BASE_COMMIT_STALE), a base that is not on the default branch (BASE_NOT_ON_DEFAULT), the full refresh recovery path, and isolation of approved manifests.Notes
docs/architecture.mdis a registered artifact (artifact put). This PR does not edit it, so the store digest stays valid. The detailedcheckcontract is indocs/architecture/ears-manager-cli.mdanddocs/architecture/components.md.Closes #237
Post-script verification
agent/237-change-set-base-freshness)e693fe93b42f0a5c7ffef101162d810a590047d2..HEAD)