Skip to content

chore: separate consumer docs from maintainer docs, and Appoly from the script - #113

Merged
projectdelta6 merged 3 commits into
mainfrom
chore/public-repo-hygiene
Aug 26, 2026
Merged

projectdelta6 merged 3 commits into
mainfrom
chore/public-repo-hygiene

Conversation

@projectdelta6

Copy link
Copy Markdown
Collaborator

Follow-up to the Maven Central move, prompted by a simple observation: this repo is public, and several things were written as though it weren't.

The publish script no longer requires being Appoly

It hard-failed for anyone else — op CLI plus a vault item they can't reach, no alternative. Credentials now resolve in two tiers: environment first (export the five ORG_GRADLE_PROJECT_* vars and 1Password is never invoked), 1Password fallback otherwise. A fork needs no diff against the script.

Supplying some variables is now rejected rather than topped up from the vault. That path silently produced a release signed with one identity and uploaded with another.

Vault coordinates out of version control

Not secrets — knowing an item's name grants nobody access — but reconnaissance: which 1Password account, which vault, which item holds a signing key. Useful for a targeted phish, useless to a forker.

They move to a git-ignored scripts/publish.conf, with a committed publish.conf.example. Maintainers need their own copy — CONTRIBUTING.md covers it. Also scrubbed a colleague's name from the migration doc's dead-ends section.

Git history keeps the old values, deliberately: rewriting public history is disproportionate to recon-level info.

README is consumer-facing again

"Testing an unreleased change" needed vault access to act on, and sat above the BOM section. Moved to CONTRIBUTING.md, which is now the single source of truth for release process — CLAUDE.md points at it rather than restating it.

R8/ProGuard stayed in the README: "you don't need to author keep rules" is a consumer question that pre-empts a release-only crash.

Migration plan deleted

The migration is done; the plan only goes stale from here. Durable parts live in the 1.9.0 release notes — which the README now links, since three consumers still have to move and that's their reference — and the rest is in git history.

Verification

Scenario Result
Appoly, with publish.conf full dry run passes, all gates green
Fork: no config, no env clear error naming both options
Fork: env vars exported skips 1Password entirely
Partial credentials rejected, names what's missing

🤖 Generated with Claude Code

projectdelta6 and others added 3 commits August 26, 2026 15:50
…he script

This repository is public, so three things that were fine while it was effectively
internal are no longer.

The publish script hard-failed for anyone who is not Appoly: it required the 1Password
CLI and a vault item nobody else can reach, with no alternative. It now resolves
credentials from the environment first and only falls back to 1Password, so a fork, a
different secret manager, or CI needs no diff against the script. Supplying only some
of the five variables is now rejected rather than topped up from the vault — mixing
sources silently is how a release gets signed with one identity and uploaded with
another.

The vault coordinates are out of version control. They are not secrets, but they are
reconnaissance: which 1Password account, which vault, which item holds a signing key.
They move to a git-ignored scripts/publish.conf, with publish.conf.example documenting
the shape. Maintainers need their own copy; CONTRIBUTING.md says so.

The README told consumers how to run the release script, which needs vault access and
so is unusable by almost everyone reading it — and it sat above the BOM section. That
moves to CONTRIBUTING.md along with the release process, which CLAUDE.md now points at
instead of restating.

Also deletes the migration plan. The migration is done; a plan document only goes stale
from here. Its durable parts are in the 1.9.0 release notes, which the README now links
for the three consumers still to move, and the rest is in git history.

Verified: the 1Password path passes a full dry run; a fork with no config gets an error
naming both options; environment-supplied credentials skip 1Password entirely.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The first line an agent reads about this project described the publishing setup it
no longer uses. Also notes the repository is public, since that is the assumption
behind the vault coordinates living outside version control.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The config moved out of the public repo with nowhere stated to find it, which
would have left the next person to release guessing.

It lives in the same 1Password item as the credentials it points at. Anyone who
can release already holds that item, so the audience for the config is exactly the
set of people who can read it — no second system to grant access to, and no way for
the pointer to drift from what it points at.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@projectdelta6
projectdelta6 merged commit 71c79c0 into main Aug 26, 2026
1 check passed
@projectdelta6
projectdelta6 deleted the chore/public-repo-hygiene branch August 26, 2026 15:10
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