Skip to content

Retire /internal/portfolio — the inventory has one view - #320

Merged
ProfessorPolymorphic merged 1 commit into
mainfrom
fix/retire-internal-portfolio-view
Jul 27, 2026
Merged

Retire /internal/portfolio — the inventory has one view#320
ProfessorPolymorphic merged 1 commit into
mainfrom
fix/retire-internal-portfolio-view

Conversation

@ProfessorPolymorphic

Copy link
Copy Markdown
Collaborator

The 2026-07-24 amendment to ADR 0005 retired /internal/requests in favour of one public queue. It missed /internal/portfolio, which kept rendering a parallel view of the inventory — the same duplication, one surface over.

It had no exclusive content

Claim Reality
"Internal-only records visible" No project has ever carried the Internal-only tier — 27 Public, 2 Partial. The extra tier the internal audience adds in lib/work.ts matched nothing, so both routes rendered the same 29 projects. The live /internal counts confirm it: "2 embargoed · 0 internal-only".
"Sharper blocker detail (named individuals, contact history)" internal_text held only auto-derived placeholders from scripts/seed-portfolio.ts: "Auto-seeded from … Refine with the actual submission date, the named OIT contact." Notes to ourselves, not withheld institutional detail.

Real cost — a second surface to keep current, and a standing contradiction of the directive. Zero benefit.

Change

/internal/portfolio/portfolio and /internal/portfolio/[slug]/portfolio/<slug>, redirected in proxy.ts ahead of the auth gate so a bookmarked link resolves without a credential prompt. Deep links keep their slug.

Verified in the browser, not just compiled:

  • /internal/portfoliohttp://localhost:3000/portfolio, unauthenticated, no prompt
  • /internal/portfolio/openerahttp://localhost:3000/portfolio/openera, H1 OpenERA
  • /internal renders the new copy, links to /portfolio, and contains zero remaining references to the retired route

The seam stays

audience: "internal" remains in lib/work.ts and blockers.internal_text remains in the schema — both now carrying comments saying no surface reads them. If sharper blocker detail is ever genuinely authored, the path back is intact. What's gone is a surface that existed by default rather than by decision.

Also on /internal

Its lede described the view being retired, so it now says what /internal actually is: ops surfaces only, with the inventory and queue linked out as public.

Its "Coming in Sprint 3" list was stale too — the submitter status page and live similarity both shipped in Sprint 3a. It now names only what's genuinely outstanding, including the honest detail that the named-SLA acknowledgment email has never been sent (there's no mailer in the stack — the named human and SLA render on-page, but nothing is delivered). Worth knowing, given the SLA is the intake surface's main promise.

ADR

ADR 0005 gains an amendment generalising the rule: it is not "one request queue", it is one view of anything the public site shows. /internal is for operating the site, not reading it differently.

Last item from the documentation audit besides the /docs drift (#94/#96/#97), which is next.

🤖 Generated with Claude Code

The 2026-07-24 amendment to ADR 0005 retired /internal/requests in favour
of one public queue. It missed /internal/portfolio, which kept rendering
a parallel view of the inventory — the same duplication, one surface
over.

It had no exclusive content. No project has ever carried the
`Internal-only` visibility tier (27 Public, 2 Partial), so the extra tier
the internal audience adds to the query in lib/work.ts matched nothing
and both routes rendered the same 29 projects; the live /internal counts
confirm it reads "2 embargoed · 0 internal-only". Its one real
difference, internal_text on blockers, held only auto-derived
placeholders from the seed script whose text reads "Auto-seeded from …
Refine with the actual submission date, the named OIT contact" — notes to
ourselves, not withheld institutional detail. Real cost, zero benefit.

Both routes now redirect to their public equivalents in proxy.ts, ahead
of the auth gate, so a bookmarked link resolves without a credential
prompt; deep links keep their slug. Verified in the browser:
/internal/portfolio lands on /portfolio unauthenticated, and
/internal/portfolio/openera lands on /portfolio/openera.

The seam stays. audience:"internal" remains in lib/work.ts and
blockers.internal_text remains in the schema, both with comments saying
no surface reads them. Restoring a reader should be a decision, not a
page that quietly persisted.

/internal now describes itself as ops-only and links out to the public
inventory rather than a private copy of it. Its "Coming in Sprint 3" list
was also stale — the submitter status page and live similarity shipped in
Sprint 3a — so it now names only what is genuinely outstanding, including
the honest detail that the named-SLA acknowledgment email has never been
sent because there is no mailer in the stack.

ADR 0005 gains an amendment generalising the rule: it is not "one request
queue", it is one view of anything the public site shows. /internal is
for operating the site, not reading it differently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Vendored strategic-plan submodule is behind upstream

The vendored submodule pointer at vendor/strategic-plan is pinned to 434de6e, which was committed 117 day(s) ago (threshold: 14 days).

The submodule is pinned at upstream main HEAD, but that HEAD itself is older than the threshold. No action needed in this repo — upstream simply hasn't moved.

This is an advisory comment from strategic-plan-pr-summary.yml. It does not block the build. Threshold is configurable via the STALE_AFTER_DAYS workflow env var (currently 14). This comment is updated in place across pushes.

@ProfessorPolymorphic
ProfessorPolymorphic merged commit 5d488a4 into main Jul 27, 2026
7 checks passed
@ProfessorPolymorphic
ProfessorPolymorphic deleted the fix/retire-internal-portfolio-view branch July 27, 2026 14:21
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