# Ideas & backlog A living list of potential improvements for opencode-devbox that are **not yet scheduled**. This is intentionally lightweight โ€” a place to park ideas so they aren't lost between sessions. When an item ships, describe it in [`CHANGELOG.md`](CHANGELOG.md) and remove it from here. Rough effort tags: ๐ŸŸข small ยท ๐ŸŸก medium ยท ๐Ÿ”ด large. Status: `idea` (unvetted) ยท `planned` (agreed, not started). --- ## Supply-chain hardening - ๐ŸŸก `planned` โ€” **Pin CI actions to commit SHAs.** The workflows use floating major tags (`actions/checkout@v4`, `docker/build-push-action@v7`, `docker/setup-buildx-action@v4`, `docker/login-action@v3`, `docker/setup-qemu-action@v3`). This is inconsistent with the project's own philosophy of SHA-pinning *content* refs to defeat floating refs. Pin each action to a SHA with a trailing `# vX.Y.Z` comment. Pairs naturally with the renovate item below to keep the pins fresh. - ๐ŸŸก `planned` โ€” **Vulnerability scanning in CI.** No CVE scan runs on the published images today. Add a `trivy image` (or grype) job to `docker-publish-split.yml` after `smoke`. Start non-blocking (report only), then tighten to fail on `HIGH`/`CRITICAL` with an available fix. - ๐ŸŸข๐ŸŸก `planned` โ€” **Standardize build provenance โ†’ buildx SBOM + attestations.** The image already carries hand-rolled provenance (OCI labels + `build-manifest`). `docker/build-push-action` can emit a standard SBOM and SLSA provenance attestation nearly for free (`provenance: mode=max`, `sbom: true`). Makes provenance machine-consumable and pairs well with the trivy item (scan the SBOM). ## Dockerfile hardening - ๐ŸŸก `idea` โ€” **Address hadolint DL4006 properly.** Currently ignored in `.hadolint.yaml`. The clean fix is `SHELL ["/bin/bash", "-o", "pipefail", "-c"]` so piped `RUN`s fail on the first non-zero stage. This changes the default `RUN` shell from `sh` to `bash` for all subsequent layers, so it is base-affecting and needs a careful pass over existing `RUN`s before removing the ignore. ## Developer experience - ๐ŸŸข `idea` โ€” **`Makefile`/`justfile` for local iteration.** Reproducing a CI build locally means hand-assembling many `--build-arg`s. Thin targets (`make build-base`, `make build-variant`, `make smoke`, `make lint`) would make local testing painless and document the canonical invocations. - ๐ŸŸก `idea` โ€” **Dependency-update automation (renovate).** With CI actions SHA-pinned (above), a `renovate.json` keeps those pins โ€” plus the pinned tool versions (`ACTIONLINT_VERSION`, `HADOLINT_VERSION`, gosu, etc.) โ€” current via automated PRs. Requires a renovate runner against the Gitea instance. ## Housekeeping - ๐ŸŸข `idea` โ€” **Registry retention for `base-` tags.** The base-hash caching scheme accumulates `base-` tags over time. Confirm whether the registry prunes old ones, and add a retention/cleanup step if not.