Skip to content

docs: record the /public path prefix and the release-lane rules in CLAUDE.md - #1469

Merged
olsonanl merged 1 commit into
BV-BRC:alphafrom
olsonanl:docs/claude-md-public-prefix-and-release-lanes
Oct 17, 2026
Merged

olsonanl merged 1 commit into
BV-BRC:alphafrom
olsonanl:docs/claude-md-public-prefix-and-release-lanes

Conversation

@olsonanl

Copy link
Copy Markdown
Contributor

Summary

Two bodies of hard-won knowledge that existed only in an uncommitted working tree and were
one git checkout away from being lost. Documentation only — 96 insertions, 0 deletions,
no code touched.

/public is a UI-only path prefix

Workspace paths display and route as /public/<owner>/<folder>, but the Workspace service
has never heard of /public — the canonical path it accepts is /<owner>/<folder>. The
prefix is added for display and stripped before every outbound call, so a path crossing a
layer boundary is in one of two different forms and you have to know which
.

Tabulates the four strip sites and the inverse re-add, plus two consequences worth holding
onto:

  • Favorites double up unless normalized. A folder favorited from the public view and
    the same folder favorited from its owner's view are the same object; only
    _normalizePath makes them compare equal.
  • The Workshop shortcut stores a literal space, not %20 — correct, because that value
    is an internal path rather than a URL. The same folder appears with %20 in hand-written
    hrefs elsewhere. Don't "fix" either to match the other; they're in different domains.

Release branches, versions, and hotfixes

Why there is no fourth version component, with the specifics:

  • 3.59.12-1 is a prerelease and sorts below 3.59.12
  • 3.59.12+hotfix.1 is build metadata, excluded from precedence — semver.eq() against
    3.59.12 returns true
  • 3.59.12.1 isn't SemVer at all, and npm silently mis-parses it as 3.59.1-2.1 while
    exiting 0

Two npm traps found the hard way:

  • npm version --dry-run is not read-only — it reported a version and wrote the
    manifest
  • node -p prints the final expression's value, so node -p "...write(v)" emitted the
    version and write()'s boolean, producing a literal 3.59.12true version string

Then the lane invariant (master holds the lower line, alpha the higher, a hotfix must be
strictly below alpha's) and the hotfix-tag.yml gotchas — notably that the tag step
succeeds even when everything after it fails
, so checking only that the tag landed checks
nothing.

Verified, not transcribed

Reading these notes against the current tree turned up real drift. Two line references were
stale and are corrected here:

was now
getObject strip site WorkspaceBrowser.js:2787 :2847
breadcrumb splice ContainerActionBar.js:103 :105

The other three strip/re-add sites check out exactly, as do the workflow claims about
hotfix.yml enforcing the lane invariant and hotfix-tag.yml using diff-filter=U.

The "51 prior vX.Y.Z tags" figure was stale — it's 58 now — so it's dated rather than left
to rot.

Worth stating since it's the point: documentation with stale file:line refs is worse than
none. It sends the next person to the wrong place and costs them the time it was meant to
save. Anything here with a line number has been checked against alpha as of this PR.

🤖 Generated with Claude Code

…AUDE.md

Two bodies of hard-won knowledge that existed only in an uncommitted working
tree and were one `git checkout` away from being lost.

**`/public` is a UI-only prefix.** Workspace paths display and route as
`/public/<owner>/<folder>`, but the Workspace service has never heard of
`/public` -- the canonical path it accepts is `/<owner>/<folder>`. The prefix
is added for display and stripped before every outbound call, so a path
crossing a layer boundary is in one of two forms and you have to know which.
Tabulates the four strip sites and the inverse re-add, plus two consequences:
favorites double up unless normalized, and the Workshop shortcut correctly
stores a literal space rather than `%20` because it is an internal path, not
a URL.

**Release branches, versions, and hotfixes.** Why there is no fourth version
component -- `3.59.12-1` sorts *below* `3.59.12`, `3.59.12+hotfix.1` compares
*equal* to it, and `3.59.12.1` is silently mis-parsed by npm as `3.59.1-2.1`
while exiting 0. Two npm traps found the hard way: `npm version --dry-run`
writes the manifest anyway, and `node -p` prints `write()`'s return value,
which once produced a literal `3.59.12true` version string. Then the lane
invariant (master holds the lower line, alpha the higher, a hotfix must be
strictly below alpha's) and the `hotfix-tag.yml` gotchas -- notably that the
tag step succeeds even when everything after it fails, so checking only that
the tag landed checks nothing.

Verified rather than transcribed. Two line references had drifted since the
notes were written and are corrected here:
`WorkspaceBrowser.js:2787 -> :2847` and `ContainerActionBar.js:103 -> :105`.
The other three strip/re-add sites, and the workflow claims about
`hotfix.yml` and `diff-filter=U`, check out against the current tree. The
"51 prior tags" figure was stale (58 now), so it is dated rather than left to
rot.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@olsonanl
olsonanl merged commit cf7fa0d into BV-BRC:alpha Oct 17, 2026
olsonanl added a commit to olsonanl/bvbrc_website that referenced this pull request Oct 17, 2026
Picks up the four commits alpha gained while the previous merge was in
flight: the v3.60.7 release bump and the CLAUDE.md documentation of the
/public path prefix and release-lane rules (BV-BRC#1469).

Clean auto-merge. CLAUDE.md took both sides without duplication -- this
branch's Unified Download Wizard and RQL-in-HTML sections sit alongside
alpha's state.search, /public and release-lane sections. 75 tests pass.

The branch is now current with alpha, so the download-side 429 work lands on
the code it will actually ship with.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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