Problem
Dependency maintenance is half automated, and the half that is missing is the one that keeps the
repo current rather than merely unbreached.
Dependabot security updates are enabled on the repository, so a published advisory against
something in package-lock.json raises a pull request. Nothing covers the rest:
- No version updates. There is no
.github/dependabot.yml, so ordinary upgrades happen only
when somebody thinks to run them. A dependency tree that only ever moves under advisory pressure
drifts until an upgrade is a project rather than a pull request, and Caroline pins itself to Node
24 and a specific MCP protocol revision, which makes drift consequential.
- The Actions are not covered at all. The CI workflow uses
actions/checkout@v4 and
actions/setup-node@v4, floating tags that move under the workflow. Security updates do not
watch Actions, so nothing raises a pull request when one of them changes or is deprecated, and
nothing pins what is actually run.
This is a repository that handles Google OAuth refresh tokens, GitHub tokens and LLM provider API
keys, and whose CI runs on every pull request.
Expected outcome
Staying current is routine and visible rather than remembered.
- Ordinary dependency upgrades arrive as pull requests on a schedule, for the npm manifest and for
the GitHub Actions, without anybody asking for them.
- The volume is manageable rather than noise. A wall of individual patch bumps every morning gets
ignored, and an ignored update stream is the same as no update stream.
- What CI actually runs is pinned to something immutable rather than to a tag that can be moved,
and updating that pin is an ordinary reviewed change.
- The existing hardening in the workflow survives the change: least-privilege
permissions and
persist-credentials: false, both of which are there deliberately and have their reason written
down.
- CI stays the gate. An upgrade is merged because lint, typecheck, the suite and both builds
passed, not because a bot proposed it.
Problem
Dependency maintenance is half automated, and the half that is missing is the one that keeps the
repo current rather than merely unbreached.
Dependabot security updates are enabled on the repository, so a published advisory against
something in
package-lock.jsonraises a pull request. Nothing covers the rest:.github/dependabot.yml, so ordinary upgrades happen onlywhen somebody thinks to run them. A dependency tree that only ever moves under advisory pressure
drifts until an upgrade is a project rather than a pull request, and Caroline pins itself to Node
24 and a specific MCP protocol revision, which makes drift consequential.
actions/checkout@v4andactions/setup-node@v4, floating tags that move under the workflow. Security updates do notwatch Actions, so nothing raises a pull request when one of them changes or is deprecated, and
nothing pins what is actually run.
This is a repository that handles Google OAuth refresh tokens, GitHub tokens and LLM provider API
keys, and whose CI runs on every pull request.
Expected outcome
Staying current is routine and visible rather than remembered.
the GitHub Actions, without anybody asking for them.
ignored, and an ignored update stream is the same as no update stream.
and updating that pin is an ordinary reviewed change.
permissionsandpersist-credentials: false, both of which are there deliberately and have their reason writtendown.
passed, not because a bot proposed it.