Skip to content

feat(release): resolve @unerp/* from the public npm registry - #1

Merged
kannan19302 merged 3 commits into
mainfrom
feat/npm-registry
Aug 7, 2026
Merged

feat(release): resolve @unerp/* from the public npm registry#1
kannan19302 merged 3 commits into
mainfrom
feat/npm-registry

Conversation

@kannan19302

Copy link
Copy Markdown
Owner

Phase A01 — @unerp/* now resolves from the public npm registry.

Why this repo changed

.npmrc pointed @unerp at http://localhost:4873/, a self-hosted Verdaccio reachable from one machine only. No CI runner could resolve @unerp/* at all — and the previous cutover was reverted because every pnpm install --frozen-lockfile on a runner resolved the scope against the runner’s own localhost. Eighteen repositories carried that line; ROADMAP.md calls it "the one thing that blocks the rest".

Not GitHub Packages — it cannot host this scope

GitHub Packages requires the npm scope to equal the account or organisation owning the repository. These repos are owned by the user kannan19302; the packages are @unerp/*. There is no unerp organisation, and the unierp one that does exist still would not match. ROADMAP.md recommended GitHub Packages for its existing OIDC tokens — that was wrong, and is corrected there.

The public registry is also better on its merits: a self-hoster runs npm install @unerp/kernel with no authentication, which is what a claim to be self-hostable in full under AGPL-3.0 actually requires.

No token, anywhere

Publishing uses npm trusted publishing — OIDC mints a short-lived credential from the workflow’s own identity, so there is no long-lived secret to leak, rotate, or commit. That matters here specifically: fourteen registry tokens were committed once, in fourteen public repositories at the same time.

Where this repo publishes a library, publish.yml declares which gate applies and contains no publish logic. That lives once, in unierp-workspace/.github/workflows/publish-library.yml — the invariant unierp-workspace’s README claims to own, and which D019 found was true of nothing in this family (grep -l workflow_call returned zero across all 30 repos).

Still outstanding

The unerp npm organisation, and a first publish. A01 stays WIP until a clean install resolves — configuration that looks complete is not the same thing.

🤖 Generated with Claude Code

Phase A01. This repo's .npmrc pointed @unerp at http://localhost:4873/, a
self-hosted Verdaccio reachable only from one machine — so no CI runner could
resolve @unerp/* at all, and the previous cutover was reverted because every
`pnpm install --frozen-lockfile` on a runner resolved the scope against the
runner's own localhost. Eighteen repositories carried that line.

Not GitHub Packages, and not for preference: it requires the npm scope to equal
the account or organisation owning the repository, and these repos are owned by
the user `kannan19302` while the packages are @unerp/*. No `unerp` organisation
exists, and the `unierp` one that does still would not match. ROADMAP.md had
recommended it for its existing OIDC tokens; that was wrong.

The public registry is also the better answer on its merits — a self-hoster runs
`npm install @unerp/kernel` with no authentication, which is what a claim to be
self-hostable in full under AGPL-3.0 actually requires.

Where this repo publishes a library, publish.yml declares which gate applies and
contains no publish logic. That lives once, in
unierp-workspace/.github/workflows/publish-library.yml — the invariant
unierp-workspace's README claims to own, and which D019 found was true of nothing
in this family. Publishing uses npm trusted publishing, so no long-lived token
exists to leak or commit; fourteen were committed once, here and in thirteen
sibling repositories at the same time.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

kannan19302 and others added 2 commits August 7, 2026 22:27
Phase A14/D015. This repository either had no agent entrypoint at all, or had one
telling every coding agent that the master documents live in ERPSys/docs/ai/ —
the retired monorepo. Fifteen such files existed across five repositories, so the
first thing any vendor agent read there was an instruction to go somewhere that
does not exist, and the other twenty-five repositories gave it no orientation,
no layer statement, and no knowledge that a development plan exists.

Same defect class as D005: a pointer that outlived its target.

AGENTS.md is the emerging cross-vendor convention; CLAUDE.md and GEMINI.md are
read automatically by their respective tools and are pointers to it here. All
three are generated by unierp-workspace/scripts/sync-agent-entrypoints.mjs, and
deliberately short: fifteen hand-maintained copies of the same guidance had
already drifted from each other, so one canonical file lives in
unierp-workspace/AGENTS.md and every repo gets a pointer plus its own layer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Regenerated by unierp-workspace/scripts/sync-agent-entrypoints.mjs after A30 was
added (D024 — main's CI has been red since extraction). Generated, not
hand-edited, which is the point: fifteen hand-maintained copies had already
drifted from each other.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@kannan19302
kannan19302 merged commit 4e3c8f2 into main Aug 7, 2026
1 check failed
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