Skip to content

docs(changelog): draft [Unreleased] section for post-rc.1 release cut#145

Merged
EffortlessSteven merged 1 commit into
mainfrom
chore/changelog-unreleased
Apr 19, 2026
Merged

docs(changelog): draft [Unreleased] section for post-rc.1 release cut#145
EffortlessSteven merged 1 commit into
mainfrom
chore/changelog-unreleased

Conversation

@EffortlessSteven

Copy link
Copy Markdown
Member

Summary

Drafts an [Unreleased] section in CHANGELOG.md aggregating the 29 commits since v0.3.0-rc.1. This is editorial prep for the release cut — no version bump, no tag. Version decision (rc.2 vs 0.3.0 stable) and tagging remain your call.

What the draft captures

Grouped by the nine-competency roadmap so the release reads as narrative, not a commit log:

Not in this PR

  • Version bump (leave as 0.3.0-rc.1 until you pick rc.2 vs 0.3.0)
  • Git tag
  • crates.io publish
  • Any code change

Test plan

  • git diff shows CHANGELOG.md only
  • No dangling references to unmerged PRs (PRs referenced are all closed on main)
  • You review narrative grouping and edit wording to taste before tagging

…nce v0.3.0-rc.1

Aggregates the nine-competency roadmap work that landed since the last
tag: Reconcile (#99), Prove (#97), Remediate (#98), Harden (#96),
Narrate (#91), Survive (#94), Recover (#90), plus consistency
enforcement (#93), preflight slimming (#92), and the three-crate
packaging split (#95).

Version number decision (rc.2 vs 0.3.0 stable) is intentionally
left open — this is editorial prep for the release cut, not a tag.

Install story updated: cargo install shipper --locked is the new
recommended path; cargo install shipper-cli --locked remains
backward-compatible.
@coderabbitai

coderabbitai Bot commented Apr 18, 2026

Copy link
Copy Markdown

Summary by CodeRabbit

  • New Features

    • Ambiguity reconciliation for publishing with distinct outcomes
    • Rehearse preflight flow with production dispatch gating
    • Package yank capability
    • Remediation and repair commands
    • Trusted Publishing (OIDC) support
    • Enhanced retry visibility with structured events
  • Bug Fixes

    • Fixed resume behavior for terminal package states
  • Documentation

    • Updated installation and setup documentation

Walkthrough

CHANGELOG.md receives a new Unreleased section documenting completion of a nine-competency roadmap (Reconcile, Prove, Remediate, Harden, Narrate, Survive, Recover, Ergonomics) with functional updates including ambiguity reconciliation, rehearsal workflows, package yank operations, remediation commands, trusted publishing support, and a three-crate packaging split.

Changes

Cohort / File(s) Summary
Changelog Documentation
CHANGELOG.md
Added comprehensive Unreleased section documenting roadmap completion, new features (ambiguity reconciliation, rehearsal gates, yank operations, remediation), trusted publishing (OIDC), improved retry visibility, and three-crate split (shipper-core, shipper-cli, shipper). Updated installation instructions and entry point guidance.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 Nine competencies hop the way,
Reconcile, Prove, and Harden the day,
Three crates split clean, a trusty design,
The changelog dances—now isn't that fine?
Thump-thump! The roadmap is done! ✨

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the primary change: drafting a CHANGELOG.md [Unreleased] section for post-rc.1 release preparation.
Description check ✅ Passed The description is well-related to the changeset, providing clear context about the CHANGELOG.md draft, grouped by the nine-competency roadmap with specific issue references.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/changelog-unreleased

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@CHANGELOG.md`:
- Around line 77-88: The changelog contains a non-standard "Install" section;
move or mirror this content under the standard "Changed" category as a
"Packaging" subsection (or add a short entry in "Changed" referencing a detailed
INSTALL/README note) so it follows Keep a Changelog conventions—update the
"Changed" section to include a "Packaging" note that mentions the new
recommended install command (`cargo install shipper --locked`), the
backward-compatible command (`cargo install shipper-cli --locked`), and the
guidance about `shipper-core` for clap-free embedders.
- Line 73: The phrase "Roadmap aligned" is passive and unclear; update the
CHANGELOG entry containing the text "Roadmap aligned" to use an active, specific
wording such as "Roadmap documentation aligned with mission/steering docs" or
"Aligned roadmap with mission/steering docs; Diátaxis reorganization (tutorials,
how-to, reference, explanation)" so the agent and action are explicit and the
meaning is unambiguous.
- Line 55: Update the CHANGELOG entry for `shipper` to avoid overly specific
wording about implementation size: replace "3-line binary forwarding to
`shipper_cli::run()`" with a more maintainable phrase such as "minimal binary
forwarding to `shipper_cli::run()`" or "lightweight binary forwarding to
`shipper_cli::run()`"; keep references to `shipper` and `shipper_cli::run()` so
readers still know the binary forwards to that function and retain the
recommended install sentence unchanged.
- Line 68: The "Resume:" bullet in the Fixed section uses a colon and
inconsistent formatting; update that line so "Resume" is bolded and uses the
same pattern as other entries (bold term + em dash). Replace the current "-
**Resume:** `PackageSkipped` event now emits correctly when resume finds a
package already in terminal state." with a line like "- **Resume —**
`PackageSkipped` event now emits correctly when resume finds a package already
in terminal state." to match the existing style.
- Line 74: Replace the terse changelog line "Docs demote cargo stdout to hint"
with an expanded, clearer phrasing such as "Documentation now treats cargo
stdout as a hint; registry truth is authoritative for safety-critical decisions"
in CHANGELOG.md so the intent is immediately readable; locate the existing line
containing the exact string "Docs demote cargo stdout to hint" and update it to
the expanded sentence.
- Line 10: The intro competency list in CHANGELOG.md is out of order compared to
the subsections; update the sentence listing "Prove, Survive, Reconcile,
Narrate, Remediate, Harden, Ergonomics" so the sequence matches the
document/subsection order (e.g., start with "Reconcile" then "Prove" then
"Remediate" ... or reorder the subsections to match the intro), ensuring the
competency names (Reconcile, Prove, Remediate, Survive, Narrate, Harden (Trusted
Publishing), Ergonomics) appear in the same order in both places for consistency
and easier scanning.
- Line 16: The long changelog sentence under "Ambiguous-publish reconciliation
against registry truth." should be split into 2–3 shorter sentences to improve
readability: first state that when `cargo publish` exits ambiguously Shipper now
polls the registry (sparse index + API per config) instead of blind-retrying;
next list the three possible outcomes (`Published` — skip retry, `NotPublished`
— safe retry, `StillUnknown` — halt for operator); finally add a short sentence
noting that cargo stdout is now a fast-path hint and the registry is
authoritative and that the resume-path reconciles `Ambiguous` state before
re-entering the retry loop. Use the exact labels `Published`, `NotPublished`,
`StillUnknown`, `Ambiguous`, and the phrase `cargo publish` so readers can
quickly scan for those concepts.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1bb40354-cbec-4152-be02-436b0b1d191e

📥 Commits

Reviewing files that changed from the base of the PR and between 4898df2 and 53a5b60.

📒 Files selected for processing (1)
  • CHANGELOG.md

Comment thread CHANGELOG.md

## [Unreleased]

Nine-competency roadmap ([#109](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Prove**, **Survive**, **Reconcile**, **Narrate**, **Remediate**, **Harden** (Trusted Publishing), **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider reordering competencies to match document structure.

The competency order in the intro ("Prove, Survive, Reconcile...") differs from the subsection order below (Reconcile #99, Prove #97, Remediate #98...). For consistency and easier scanning, consider matching the intro order to the document structure.

📝 Suggested reordering
-Nine-competency roadmap ([`#109`](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Prove**, **Survive**, **Reconcile**, **Narrate**, **Remediate**, **Harden** (Trusted Publishing), **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.
+Nine-competency roadmap ([`#109`](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Reconcile**, **Prove**, **Remediate**, **Harden** (Trusted Publishing), **Narrate**, **Survive**, **Recover**, **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 10, The intro competency list in CHANGELOG.md is out of
order compared to the subsections; update the sentence listing "Prove, Survive,
Reconcile, Narrate, Remediate, Harden, Ergonomics" so the sequence matches the
document/subsection order (e.g., start with "Reconcile" then "Prove" then
"Remediate" ... or reorder the subsections to match the intro), ensuring the
competency names (Reconcile, Prove, Remediate, Survive, Narrate, Harden (Trusted
Publishing), Ergonomics) appear in the same order in both places for consistency
and easier scanning.

Comment thread CHANGELOG.md

#### Reconcile ([#99](https://github.com/EffortlessMetrics/shipper/issues/99))

- **Ambiguous-publish reconciliation against registry truth.** When `cargo publish` exits ambiguously, Shipper now polls the registry (sparse index + API per config) instead of blind-retrying. Outcomes: `Published` (skip retry), `NotPublished` (safe retry), `StillUnknown` (halt for operator). Cargo stdout is demoted to a fast-path hint; registry is authoritative. Resume-path reconciles `Ambiguous` state before re-entering the retry loop.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider breaking the long sentence for better readability.

The first bullet under Reconcile is a 97-word sentence that packs multiple concepts (polling, outcomes, cargo stdout demotion, registry authority, resume path). Breaking it into 2-3 shorter sentences would improve scannability.

✂️ Suggested restructuring
-- **Ambiguous-publish reconciliation against registry truth.** When `cargo publish` exits ambiguously, Shipper now polls the registry (sparse index + API per config) instead of blind-retrying. Outcomes: `Published` (skip retry), `NotPublished` (safe retry), `StillUnknown` (halt for operator). Cargo stdout is demoted to a fast-path hint; registry is authoritative. Resume-path reconciles `Ambiguous` state before re-entering the retry loop.
+- **Ambiguous-publish reconciliation against registry truth.** When `cargo publish` exits ambiguously, Shipper now polls the registry (sparse index + API per config) instead of blind-retrying. Three outcomes: `Published` (skip retry), `NotPublished` (safe retry), `StillUnknown` (halt for operator). Cargo stdout is treated as a fast-path hint; registry is authoritative. Resume reconciles any `Ambiguous` state before re-entering the retry loop.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Ambiguous-publish reconciliation against registry truth.** When `cargo publish` exits ambiguously, Shipper now polls the registry (sparse index + API per config) instead of blind-retrying. Outcomes: `Published` (skip retry), `NotPublished` (safe retry), `StillUnknown` (halt for operator). Cargo stdout is demoted to a fast-path hint; registry is authoritative. Resume-path reconciles `Ambiguous` state before re-entering the retry loop.
- **Ambiguous-publish reconciliation against registry truth.** When `cargo publish` exits ambiguously, Shipper now polls the registry (sparse index + API per config) instead of blind-retrying. Three outcomes: `Published` (skip retry), `NotPublished` (safe retry), `StillUnknown` (halt for operator). Cargo stdout is treated as a fast-path hint; registry is authoritative. Resume reconciles any `Ambiguous` state before re-entering the retry loop.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 16, The long changelog sentence under
"Ambiguous-publish reconciliation against registry truth." should be split into
2–3 shorter sentences to improve readability: first state that when `cargo
publish` exits ambiguously Shipper now polls the registry (sparse index + API
per config) instead of blind-retrying; next list the three possible outcomes
(`Published` — skip retry, `NotPublished` — safe retry, `StillUnknown` — halt
for operator); finally add a short sentence noting that cargo stdout is now a
fast-path hint and the registry is authoritative and that the resume-path
reconciles `Ambiguous` state before re-entering the retry loop. Use the exact
labels `Published`, `NotPublished`, `StillUnknown`, `Ambiguous`, and the phrase
`cargo publish` so readers can quickly scan for those concepts.

Comment thread CHANGELOG.md

- **`shipper-core`** (new) — engine library with no CLI dependencies. Stable embedding surface: `plan`, `preflight`, `publish`, `resume`, `reconcile`, `rehearsal`, `remediate`, state/events/receipts, policy/readiness.
- **`shipper-cli`** — promoted from placeholder to real CLI adapter. Owns `clap` parsing, subcommand dispatch, help text, progress rendering. Exposes `pub fn run() -> anyhow::Result<()>` as the embedding entry point.
- **`shipper`** — shrunk to install façade. 3-line binary forwarding to `shipper_cli::run()`, plus a library re-exporting a curated subset of `shipper-core`. **This is the recommended install path:** `cargo install shipper --locked`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Consider less specific wording for binary size.

The phrase "3-line binary forwarding" is very specific and might become inaccurate with minor implementation changes. Consider "minimal binary forwarding" or "lightweight binary forwarding" for more maintainable documentation.

📝 Suggested rewording
-- **`shipper`** — shrunk to install façade. 3-line binary forwarding to `shipper_cli::run()`, plus a library re-exporting a curated subset of `shipper-core`. **This is the recommended install path:** `cargo install shipper --locked`.
+- **`shipper`** — shrunk to install façade. Minimal binary forwarding to `shipper_cli::run()`, plus a library re-exporting a curated subset of `shipper-core`. **This is the recommended install path:** `cargo install shipper --locked`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **`shipper`** — shrunk to install façade. 3-line binary forwarding to `shipper_cli::run()`, plus a library re-exporting a curated subset of `shipper-core`. **This is the recommended install path:** `cargo install shipper --locked`.
- **`shipper`** — shrunk to install façade. Minimal binary forwarding to `shipper_cli::run()`, plus a library re-exporting a curated subset of `shipper-core`. **This is the recommended install path:** `cargo install shipper --locked`.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 55, Update the CHANGELOG entry for `shipper` to avoid
overly specific wording about implementation size: replace "3-line binary
forwarding to `shipper_cli::run()`" with a more maintainable phrase such as
"minimal binary forwarding to `shipper_cli::run()`" or "lightweight binary
forwarding to `shipper_cli::run()`"; keep references to `shipper` and
`shipper_cli::run()` so readers still know the binary forwards to that function
and retain the recommended install sentence unchanged.

Comment thread CHANGELOG.md

### Fixed

- **Resume:** `PackageSkipped` event now emits correctly when resume finds a package already in terminal state.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Inconsistent formatting in Fixed section.

The bullet uses "Resume:" as a prefix label, which differs from the pattern in other sections where the term is bolded (e.g., **Term** — description). Consider bolding "Resume" or restructuring for consistency.

🎨 Suggested formatting
-- **Resume:** `PackageSkipped` event now emits correctly when resume finds a package already in terminal state.
+- **Resume behavior:** `PackageSkipped` event now emits correctly when resume finds a package already in terminal state.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Resume:** `PackageSkipped` event now emits correctly when resume finds a package already in terminal state.
- **Resume behavior:** `PackageSkipped` event now emits correctly when resume finds a package already in terminal state.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 68, The "Resume:" bullet in the Fixed section uses a
colon and inconsistent formatting; update that line so "Resume" is bolded and
uses the same pattern as other entries (bold term + em dash). Replace the
current "- **Resume:** `PackageSkipped` event now emits correctly when resume
finds a package already in terminal state." with a line like "- **Resume —**
`PackageSkipped` event now emits correctly when resume finds a package already
in terminal state." to match the existing style.

Comment thread CHANGELOG.md
### Documentation

- **Operator-trust pack:** `not_proven` explainer, stalled-run triage, state-files cheat sheet.
- **Roadmap aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Clarify passive construction.

The phrase "Roadmap aligned" uses passive voice without a clear agent. Consider "Roadmap documentation aligned with..." or "Aligned roadmap with..." for clarity.

📝 Suggested rewording
-- **Roadmap aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).
+- **Roadmap documentation aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Roadmap aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).
- **Roadmap documentation aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 73, The phrase "Roadmap aligned" is passive and
unclear; update the CHANGELOG entry containing the text "Roadmap aligned" to use
an active, specific wording such as "Roadmap documentation aligned with
mission/steering docs" or "Aligned roadmap with mission/steering docs; Diátaxis
reorganization (tutorials, how-to, reference, explanation)" so the agent and
action are explicit and the meaning is unambiguous.

Comment thread CHANGELOG.md

- **Operator-trust pack:** `not_proven` explainer, stalled-run triage, state-files cheat sheet.
- **Roadmap aligned** with mission/steering docs; Diátaxis reorganization (tutorials, how-to, reference, explanation).
- **Docs demote cargo stdout to hint**; registry truth is authoritative for safety-critical decisions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Expand telegraphic phrasing for clarity.

"Docs demote cargo stdout to hint" is very terse. Consider expanding to "Documentation now treats cargo stdout as a hint" or similar for better readability.

📝 Suggested expansion
-- **Docs demote cargo stdout to hint**; registry truth is authoritative for safety-critical decisions.
+- **Documentation clarifies cargo stdout as hint**; registry truth is authoritative for safety-critical decisions.

or

-- **Docs demote cargo stdout to hint**; registry truth is authoritative for safety-critical decisions.
+- **Cargo stdout demoted to hint in documentation**; registry truth is authoritative for safety-critical decisions.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- **Docs demote cargo stdout to hint**; registry truth is authoritative for safety-critical decisions.
- **Documentation clarifies cargo stdout as hint**; registry truth is authoritative for safety-critical decisions.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` at line 74, Replace the terse changelog line "Docs demote cargo
stdout to hint" with an expanded, clearer phrasing such as "Documentation now
treats cargo stdout as a hint; registry truth is authoritative for
safety-critical decisions" in CHANGELOG.md so the intent is immediately
readable; locate the existing line containing the exact string "Docs demote
cargo stdout to hint" and update it to the expanded sentence.

Comment thread CHANGELOG.md
Comment on lines +77 to +88
### Install

```bash
# New recommended path
cargo install shipper --locked

# Backward-compatible (same code path)
cargo install shipper-cli --locked
```

Embedders who want a clap-free library surface should depend on `shipper-core` directly.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Non-standard changelog section (acceptable for major packaging change).

The "Install" section is not a standard Keep a Changelog category (typical: Added, Changed, Deprecated, Removed, Fixed, Security). However, given the significant packaging restructuring, this placement is reasonable and user-friendly. Alternatively, this content could live under the "Packaging" subsection in "Changed" or be referenced with a note pointing to README.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CHANGELOG.md` around lines 77 - 88, The changelog contains a non-standard
"Install" section; move or mirror this content under the standard "Changed"
category as a "Packaging" subsection (or add a short entry in "Changed"
referencing a detailed INSTALL/README note) so it follows Keep a Changelog
conventions—update the "Changed" section to include a "Packaging" note that
mentions the new recommended install command (`cargo install shipper --locked`),
the backward-compatible command (`cargo install shipper-cli --locked`), and the
guidance about `shipper-core` for clap-free embedders.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the CHANGELOG.md to document the completion of the nine-competency roadmap, including features like registry reconciliation, rehearsal publishing, and the three-crate architectural split. Feedback focuses on correcting competency names (Profile, Survive, and Ergonomics) in headers and summaries to ensure alignment with the project's official roadmap.

Comment thread CHANGELOG.md

## [Unreleased]

Nine-competency roadmap ([#109](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Prove**, **Survive**, **Reconcile**, **Narrate**, **Remediate**, **Harden** (Trusted Publishing), **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The summary list of competencies should be updated to include Profile (registry-aware backoff, #94) and ensure the names align with the headers in the body and the project roadmap in ROADMAP.md. Currently, line 41 uses Survive for #94, which the roadmap defines as Profile (Competency 7).

Suggested change
Nine-competency roadmap ([#109](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Prove**, **Survive**, **Reconcile**, **Narrate**, **Remediate**, **Harden** (Trusted Publishing), **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.
Nine-competency roadmap ([#109](https://github.com/EffortlessMetrics/shipper/issues/109)) landed end-to-end on `main` since `v0.3.0-rc.1`: **Prove**, **Survive**, **Reconcile**, **Narrate**, **Remediate**, **Harden** (Trusted Publishing), **Profile** (registry-aware backoff), **Ergonomics** (three-crate split), plus consistency enforcement and operator-trust docs.

Comment thread CHANGELOG.md

- **Retry visibility** — structured `RetryBackoff` events and live CLI narration so operators can see what the engine is waiting on and why.

#### Survive ([#94](https://github.com/EffortlessMetrics/shipper/issues/94))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This header should be renamed to Profile to align with the nine-competency roadmap defined in ROADMAP.md (Competency 7). #94 describes registry-aware backoff, which is the core of the Profile competency. Survive (Competency 2) is associated with interruption-resume behavior (#90).

Suggested change
#### Survive ([#94](https://github.com/EffortlessMetrics/shipper/issues/94))
#### Profile ([#94](https://github.com/EffortlessMetrics/shipper/issues/94))

Comment thread CHANGELOG.md

- **crates.io-aware backoff** — registry-aware rate-limit detection uses `crate_exists` to distinguish new-crate throttling from transient failures.

#### Recover ([#90](https://github.com/EffortlessMetrics/shipper/issues/90))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This header should be renamed to Survive to align with the nine-competency roadmap in ROADMAP.md (Competency 2). #90 describes interruption-resume behavior, which is the core of the Survive competency. Recover is the name of the corresponding pillar (Pillar 4), but the changelog uses competency names for other sections.

Suggested change
#### Recover ([#90](https://github.com/EffortlessMetrics/shipper/issues/90))
#### Survive ([#90](https://github.com/EffortlessMetrics/shipper/issues/90))

Comment thread CHANGELOG.md

### Changed

#### Packaging — three-crate product shape ([#95](https://github.com/EffortlessMetrics/shipper/issues/95))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This header should be renamed to Ergonomics to align with the summary in line 10 and the roadmap in ROADMAP.md (Competency 9, #108), which specifically references the three-crate split (#95).

Suggested change
#### Packaging — three-crate product shape ([#95](https://github.com/EffortlessMetrics/shipper/issues/95))
#### Ergonomics — three-crate product shape ([#95](https://github.com/EffortlessMetrics/shipper/issues/95))

@codecov

codecov Bot commented Apr 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@EffortlessSteven EffortlessSteven merged commit cb73536 into main Apr 19, 2026
20 checks passed
@EffortlessSteven EffortlessSteven deleted the chore/changelog-unreleased branch April 19, 2026 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant