Skip to content

feat(infra): put a door in front of UAT so the Tracker can run the only way it runs - #640

Merged
beyondnetPeru merged 1 commit into
mainfrom
feat/uat-perimeter-auth
Aug 22, 2026
Merged

feat(infra): put a door in front of UAT so the Tracker can run the only way it runs#640
beyondnetPeru merged 1 commit into
mainfrom
feat/uat-perimeter-auth

Conversation

@beyondnetPeru

Copy link
Copy Markdown
Contributor

The problem this fixes

UAT looked healthy and could not be used. Measured on the live environment:

Endpoint Result
/api/v1/health 200
/api/v1/initiatives 401
/api/v1/sdlc/executions 404

Every screen rendered an error card while the health check stayed green.

Cause

This file set ASPNETCORE_ENVIRONMENT: Staging, on the reasoning that DevBypass belongs on a laptop. That reasoning is right and the outcome is unusable, because AuthenticationExtensions.cs:66 is explicit:

Refusing to register the 'DevBypass' authentication scheme in the '{env}' environment. The development bypass authenticates every request as a full-permission administrator and is only ever wired in Development. Configure Ums:Authority to use the UMS JWT bearer provider.

No identity provider is deployed. So outside Development the Tracker authenticates nobody, and the UAT client sees a wall of errors.

The change, which is two halves of one mechanism

  1. Back to Development, because it is the only mode the Tracker leaves available without UMS.
  2. A basic-auth middleware on tracker-web's router, so an unauthenticated request is refused by the proxy and never reaches a service that would treat it as an administrator.

Neither half is sufficient alone:

  • Development without the door is an open admin console on the public internet.
  • The door without Development protects a service that was going to reject the request anyway.

Remove either and the protection disappears silently — nothing errors, the environment still looks fine. The compose comments say this at both sites for that reason.

Why the hash is not in this file

The middleware is referenced as uat-basicauth@file and defined in the proxy's dynamic configuration. This repository is public; a bcrypt hash committed here is a hash handed to everyone who can read it.

Lifetime

This is scaffolding with a stated end. When Tracker ADR T-053 (consume UMS identity) lands, this returns to Staging and the middleware can be dropped.

🤖 Generated with Claude Code

…ly way it runs

The Tracker was set to Staging here on the reasoning that DevBypass is for
laptops. Correct in principle, unusable in fact: `AuthenticationExtensions.cs:66`
refuses to register DevBypass outside Development and demands a UMS authority
instead, and no identity provider is deployed. Measured on the live environment:
`/api/v1/health` 200, `/api/v1/initiatives` 401 — every screen an empty error
card while the health check stayed green.

So the choice the Tracker offers today is Development or nothing, and Development
authenticates every request as a full-permission administrator. Rather than ship
that to a host anyone can reach, the guard moves to the perimeter: tracker-web's
router carries an HTTP basic-auth middleware, so a request without the credential
is refused by the proxy and never reaches a service that would trust it.

The two halves are one mechanism. Development alone is an open admin console on
the internet; the middleware alone protects a service that would have rejected
the request anyway. Removing either one silently removes the protection, which is
why the compose comment says so at both sites.

The middleware is referenced as `uat-basicauth@file` and DEFINED in the proxy's
dynamic configuration, deliberately not here. A bcrypt hash committed to a public
repository is a hash published to everyone who can read it, and this repository is
public.

Reverts to Staging when Tracker ADR T-053 (consume UMS identity) lands.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@beyondnetPeru
beyondnetPeru requested a review from a team as a code owner August 22, 2026 03:27
@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.

@github-actions

Copy link
Copy Markdown

📊 Bilingual Coverage Impact

PR Changes

  • Paired EN/ES files modified: 0
  • New EN files needing ES translation: 0

Repository Coverage

Metric Value
Total EN files 525
Total ES files 495
Paired files 0
Coverage 0%

Good: All EN changes have ES counterparts.


Generated by GitHub Actions

@beyondnetPeru
beyondnetPeru merged commit 87163a9 into main Aug 22, 2026
35 checks passed
@beyondnetPeru
beyondnetPeru deleted the feat/uat-perimeter-auth branch August 22, 2026 03:50
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