Carter Perez
540a1dfcd7
Merge pull request #246 from CarterPerez-dev/dependabot/go_modules/PROJECTS/intermediate/secrets-scanner/github.com/go-git/go-git/v5-5.19.1
...
chore(deps): bump github.com/go-git/go-git/v5 from 5.19.0 to 5.19.1 in /PROJECTS/intermediate/secrets-scanner
2026-05-23 06:43:21 -04:00
Carter Perez
6c2c40119f
Merge pull request #249 from CarterPerez-dev/dependabot/uv/PROJECTS/beginner/keylogger/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/beginner/keylogger
2026-05-22 14:19:22 -04:00
Carter Perez
871f18d9fe
Merge pull request #245 from CarterPerez-dev/dependabot/go_modules/PROJECTS/beginner/canary-token-generator/backend/github.com/redis/go-redis/v9-9.7.3
...
chore(deps): bump github.com/redis/go-redis/v9 from 9.7.0 to 9.7.3 in /PROJECTS/beginner/canary-token-generator/backend
2026-05-22 14:19:03 -04:00
Carter Perez
ac9ed2c0d4
Merge pull request #247 from CarterPerez-dev/dependabot/uv/PROJECTS/advanced/ai-threat-detection/backend/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/advanced/ai-threat-detection/backend
2026-05-22 14:18:49 -04:00
Carter Perez
2aa8efeb85
Merge pull request #248 from CarterPerez-dev/dependabot/uv/PROJECTS/advanced/api-rate-limiter/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/advanced/api-rate-limiter
2026-05-22 14:18:36 -04:00
Carter Perez
bab3440788
Merge pull request #250 from CarterPerez-dev/dependabot/uv/PROJECTS/advanced/bug-bounty-platform/backend/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/advanced/bug-bounty-platform/backend
2026-05-22 14:18:22 -04:00
Carter Perez
b5f3f726f4
Merge pull request #251 from CarterPerez-dev/dependabot/uv/PROJECTS/foundations/http-headers-scanner/idna-3.15
...
chore(deps): bump idna from 3.13 to 3.15 in /PROJECTS/foundations/http-headers-scanner
2026-05-22 14:18:08 -04:00
Carter Perez
46231c15ed
Merge pull request #252 from CarterPerez-dev/dependabot/uv/PROJECTS/advanced/encrypted-p2p-chat/backend/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/advanced/encrypted-p2p-chat/backend
2026-05-22 10:13:38 -04:00
Carter Perez
c1c4241638
Merge pull request #254 from CarterPerez-dev/dependabot/uv/PROJECTS/beginner/c2-beacon/backend/idna-3.15
...
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/beginner/c2-beacon/backend
2026-05-22 10:13:20 -04:00
Carter Perez
688df30682
Merge pull request #255 from CarterPerez-dev/dependabot/uv/PROJECTS/advanced/ai-threat-detection/backend/mlflow-3.11.1
...
chore(deps): bump mlflow from 3.9.0 to 3.11.1 in /PROJECTS/advanced/ai-threat-detection/backend
2026-05-21 21:06:20 -04:00
dependabot[bot]
3474d7711b
chore(deps): bump mlflow
...
Bumps [mlflow](https://github.com/mlflow/mlflow ) from 3.9.0 to 3.11.1.
- [Release notes](https://github.com/mlflow/mlflow/releases )
- [Changelog](https://github.com/mlflow/mlflow/blob/master/CHANGELOG.md )
- [Commits](https://github.com/mlflow/mlflow/compare/v3.9.0...v3.11.1 )
---
updated-dependencies:
- dependency-name: mlflow
dependency-version: 3.11.1
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-21 20:33:21 +00:00
dependabot[bot]
15a9429d0f
chore(deps): bump idna in /PROJECTS/beginner/c2-beacon/backend
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-21 20:32:07 +00:00
dependabot[bot]
1e44bf6384
chore(deps): bump idna in /PROJECTS/advanced/encrypted-p2p-chat/backend
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 16:30:52 +00:00
dependabot[bot]
d43054c523
chore(deps): bump idna in /PROJECTS/foundations/http-headers-scanner
...
Bumps [idna](https://github.com/kjd/idna ) from 3.13 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.13...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 16:23:33 +00:00
dependabot[bot]
3897a542e6
chore(deps): bump idna in /PROJECTS/advanced/bug-bounty-platform/backend
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 16:19:13 +00:00
dependabot[bot]
341d04a160
chore(deps): bump idna from 3.11 to 3.15 in /PROJECTS/beginner/keylogger
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 16:08:43 +00:00
dependabot[bot]
360df54954
chore(deps): bump idna in /PROJECTS/advanced/api-rate-limiter
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 15:59:27 +00:00
dependabot[bot]
9b4b6f7772
chore(deps): bump idna in /PROJECTS/advanced/ai-threat-detection/backend
...
Bumps [idna](https://github.com/kjd/idna ) from 3.11 to 3.15.
- [Release notes](https://github.com/kjd/idna/releases )
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md )
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15 )
---
updated-dependencies:
- dependency-name: idna
dependency-version: '3.15'
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 15:56:13 +00:00
dependabot[bot]
c9fda34256
chore(deps): bump github.com/go-git/go-git/v5
...
Bumps [github.com/go-git/go-git/v5](https://github.com/go-git/go-git ) from 5.19.0 to 5.19.1.
- [Release notes](https://github.com/go-git/go-git/releases )
- [Changelog](https://github.com/go-git/go-git/blob/main/HISTORY.md )
- [Commits](https://github.com/go-git/go-git/compare/v5.19.0...v5.19.1 )
---
updated-dependencies:
- dependency-name: github.com/go-git/go-git/v5
dependency-version: 5.19.1
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 15:38:06 +00:00
dependabot[bot]
3250ddbbe3
chore(deps): bump github.com/redis/go-redis/v9
...
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis ) from 9.7.0 to 9.7.3.
- [Release notes](https://github.com/redis/go-redis/releases )
- [Changelog](https://github.com/redis/go-redis/blob/master/RELEASE-NOTES.md )
- [Commits](https://github.com/redis/go-redis/compare/v9.7.0...v9.7.3 )
---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
dependency-version: 9.7.3
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 14:18:33 +00:00
Carter Perez
b514050fac
Merge pull request #244 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/intermediate/api-security-scanner/frontend/ws-8.20.1
...
chore(deps): bump ws from 8.18.3 to 8.20.1 (via audit fix) in /PROJECTS/intermediate/api-security-scanner/frontend
2026-05-19 10:15:49 -04:00
dependabot[bot]
05ef94cc93
chore(deps): bump ws (via audit fix)
...
Bumps [ws](https://github.com/websockets/ws ) from 8.18.3 to 8.20.1.
- [Release notes](https://github.com/websockets/ws/releases )
- [Commits](https://github.com/websockets/ws/compare/8.18.3...8.20.1 )
---
updated-dependencies:
- dependency-name: ws
dependency-version: 8.20.1
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 21:10:02 +00:00
Carter Perez
03491c9b73
Merge pull request #239 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/picomatch-4.0.4
...
chore(deps): bump picomatch from 2.3.1 to 4.0.4 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 15:34:23 -04:00
Carter Perez
069a3eb4a7
Merge pull request #243 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/postcss-8.5.14
...
chore(deps): bump postcss from 8.5.6 to 8.5.14 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 15:34:11 -04:00
Carter Perez
cad4abf19a
Merge pull request #241 from CarterPerez-dev/dependabot/go_modules/PROJECTS/beginner/canary-token-generator/backend/github.com/go-viper/mapstructure/v2-2.4.0
...
chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.4.0 in /PROJECTS/beginner/canary-token-generator/backend
2026-05-18 15:34:04 -04:00
Carter Perez
f76faab1d9
Merge pull request #240 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/immutable-5.1.5
...
chore(deps): bump immutable from 5.1.4 to 5.1.5 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 15:33:29 -04:00
Carter Perez
905ec1bc27
Merge pull request #242 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/react-router-7.15.1
...
chore(deps): bump react-router from 7.10.1 to 7.15.1 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 15:33:14 -04:00
Carter Perez
b25e61b070
Merge pull request #238 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/flatted-3.4.2
...
chore(deps): bump flatted from 3.3.3 to 3.4.2 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 15:33:01 -04:00
dependabot[bot]
d8a6266acf
chore(deps): bump postcss
...
Bumps [postcss](https://github.com/postcss/postcss ) from 8.5.6 to 8.5.14.
- [Release notes](https://github.com/postcss/postcss/releases )
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md )
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.14 )
---
updated-dependencies:
- dependency-name: postcss
dependency-version: 8.5.14
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:03:49 +00:00
dependabot[bot]
d8e88d2750
chore(deps): bump react-router
...
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router ) from 7.10.1 to 7.15.1.
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.15.1/packages/react-router )
---
updated-dependencies:
- dependency-name: react-router
dependency-version: 7.15.1
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:03:32 +00:00
dependabot[bot]
7623b8f557
chore(deps): bump github.com/go-viper/mapstructure/v2
...
Bumps [github.com/go-viper/mapstructure/v2](https://github.com/go-viper/mapstructure ) from 2.2.1 to 2.4.0.
- [Release notes](https://github.com/go-viper/mapstructure/releases )
- [Changelog](https://github.com/go-viper/mapstructure/blob/main/CHANGELOG.md )
- [Commits](https://github.com/go-viper/mapstructure/compare/v2.2.1...v2.4.0 )
---
updated-dependencies:
- dependency-name: github.com/go-viper/mapstructure/v2
dependency-version: 2.4.0
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:03:28 +00:00
dependabot[bot]
c264943205
chore(deps): bump immutable
...
Bumps [immutable](https://github.com/immutable-js/immutable-js ) from 5.1.4 to 5.1.5.
- [Release notes](https://github.com/immutable-js/immutable-js/releases )
- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.4...v5.1.5 )
---
updated-dependencies:
- dependency-name: immutable
dependency-version: 5.1.5
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:03:05 +00:00
dependabot[bot]
4fad1011ce
chore(deps): bump picomatch
...
Bumps [picomatch](https://github.com/micromatch/picomatch ) from 2.3.1 to 4.0.4.
- [Release notes](https://github.com/micromatch/picomatch/releases )
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md )
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...4.0.4 )
---
updated-dependencies:
- dependency-name: picomatch
dependency-version: 4.0.4
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:02:44 +00:00
dependabot[bot]
adf26769a9
chore(deps): bump flatted
...
Bumps [flatted](https://github.com/WebReflection/flatted ) from 3.3.3 to 3.4.2.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.2 )
---
updated-dependencies:
- dependency-name: flatted
dependency-version: 3.4.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 14:02:41 +00:00
Carter Perez
33b2c7a8d9
Merge pull request #236 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/axios-1.15.2
...
chore(deps): bump axios from 1.13.2 to 1.15.2 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 10:01:04 -04:00
Carter Perez
c1f5322ea2
Merge branch 'main' into dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/axios-1.15.2
2026-05-18 10:00:49 -04:00
Carter Perez
77ce3a2fdf
Merge pull request #237 from CarterPerez-dev/dependabot/npm_and_yarn/PROJECTS/beginner/canary-token-generator/frontend/fast-uri-3.1.2
...
chore(deps): bump fast-uri from 3.1.0 to 3.1.2 in /PROJECTS/beginner/canary-token-generator/frontend
2026-05-18 10:00:00 -04:00
dependabot[bot]
a71926ca09
chore(deps): bump fast-uri
...
Bumps [fast-uri](https://github.com/fastify/fast-uri ) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases )
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2 )
---
updated-dependencies:
- dependency-name: fast-uri
dependency-version: 3.1.2
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:48:05 +00:00
dependabot[bot]
edf66fb576
chore(deps): bump axios
...
Bumps [axios](https://github.com/axios/axios ) from 1.13.2 to 1.15.2.
- [Release notes](https://github.com/axios/axios/releases )
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md )
- [Commits](https://github.com/axios/axios/compare/v1.13.2...v1.15.2 )
---
updated-dependencies:
- dependency-name: axios
dependency-version: 1.15.2
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:47:56 +00:00
Carter Perez
fa70d35345
Update README.md
2026-05-18 00:46:55 -04:00
Carter Perez
b247504c35
Update README.md
2026-05-18 00:46:31 -04:00
Carter Perez
79ca7006b3
Merge pull request #235 from CarterPerez-dev/project/canary-token-generator
...
Project/canary token generator
2026-05-18 00:44:30 -04:00
CarterPerez-dev
615efe051d
update
2026-05-18 00:41:25 -04:00
CarterPerez-dev
de6ac71954
chore(canary): drop stray /healthcheck binary + ignore cmd build artifacts
...
go build ./cmd/healthcheck (run for verification, not via the bin/ recipe)
drops the binary in the working dir. Untracked previously; landed in the
last commit by accident. Gitignore now lists each cmd binary explicitly so
the same mistake can't recur for canary, healthcheck, or the two pdf/docx
template builders.
2026-05-18 00:03:20 -04:00
CarterPerez-dev
10321a9a61
fix(canary): prod compose can actually start
...
Three things that all blocked tunnel-start:
1. justfile: dropped set dotenv-load / set export — they pulled
.env.development into every recipe shell, where empty values
beat docker compose --env-file .env per shell-env precedence
(POSTGRES_PASSWORD was the visible casualty). Dev recipes now
pass --env-file .env.development explicitly so they're not
affected by the change.
2. canary image is distroless/static, so the wget-based healthcheck
had no binary to run and every check failed → nginx/tunnel never
started. Added cmd/healthcheck (tiny Go HTTP probe of /healthz),
built alongside canary, swapped compose healthcheck to /healthcheck.
3. Added tunnel-build and tunnel-rebuild recipes so the next person
doesn't have to remember which compose files the tunnel overlay
needs.
2026-05-18 00:02:51 -04:00
CarterPerez-dev
9655120ebe
chore(canary): phase B audit fixes + frontend asset rename + gitignore
...
Audit Phase B (backend): F5 trusted-proxy gate wiring, F7 ErrValidation
sentinel, F8 dedup unique-IP semantic via SCard, F9 notify worker pool +
graceful Shutdown, F12 token ID collision retry.
Frontend: public/asset/ → public/assets/ rename + index.html paths.
Housekeeping: .npmrc strict-dep-builds=false (pnpm fix), .gitignore now
excludes all .env.* except .env.example.
2026-05-17 23:34:42 -04:00
CarterPerez-dev
d96de872b0
chore(canary): halve webbug pixel.jpg dimensions (736→368)
2026-05-17 22:58:53 -04:00
CarterPerez-dev
159c942551
feat(canary): webbug serves a real (visible) image instead of 1x1 GIF
...
Operator request: give the webbug some personality. Trigger response is now
a small JPEG embedded into the binary via //go:embed, served from
backend/internal/token/generators/webbug/asset/pixel.jpg. Default is a
545-byte 32x32 yellow placeholder I generated with imagemagick — replace
the file with any image (same path, same filename, doesn't matter what
size or content) and the next backend rebuild picks it up. No other code
needs to change.
Scope: ONLY webbug. The docx, pdf, and envfile generators keep their own
Trigger functions that still call pixel.Clone() for the canonical
invisible 1x1 GIF — those types embed the trigger URL inside their
respective artifact bytes (a Word footer, a PDF /AA action, a fake .env
INTERNAL_METRICS_ENDPOINT line) and need the response to stay invisible
so the attacker doesn't notice they pinged us. Stealth preserved where
it matters.
The pixel package itself is untouched (still has the 43-byte GIF
constant); only webbug stops importing it.
Tradeoff baked in: a webbug whose response is a visible image is
*technically* less stealthy than the canonical 1x1 — the attacker can
see "huh there's a small image here." But the visible mechanism is real
too (think Mailchimp / SendGrid email-open tracking, which use sized
"social proof" images, not just 1x1s), so this is a legitimate variant.
For an operator who wants strict 1x1-invisible behavior in prod, the
revert is a 3-line change in webbug/generator.go (swap embed for
pixel.Clone() again).
Tests updated: webbug/generator_test.go no longer asserts gifByteLength
or pixel.Clone() equality; it now asserts the body starts with the JPEG
SOI marker (0xff 0xd8) + ContentType is image/jpeg. The
"independent-copy-per-call" invariant test still passes (bytes.Clone in
the Trigger ensures each Body slice is a fresh allocation).
Cache headers unchanged (no-store / no-cache / must-revalidate) so every
fetch hits the trigger handler.
2026-05-17 22:55:47 -04:00
CarterPerez-dev
4b54c1b825
chore(canary): align e2e + handler tests with mysqlEnabled signature
...
Upstream 8d2599c0 added a mysqlEnabled parameter to token.NewHandler and
took a long line over the limit in handler_test. Pass the parameter from
the e2e stack (true: integration test exercises mysql token creation) and
reflow the long handler_test return so golines is happy.
2026-05-17 22:55:28 -04:00
CarterPerez-dev
8d2599c01a
feat(canary): mark MySQL type as disabled when mysql.enabled=false
...
Operator request: when MYSQL_FAKE_ENABLED=false (the dev default + the only
viable setting behind Cloudflare Tunnel since CF Tunnel doesn't carry raw
TCP), surface that in the UI so users can see the species but understand
they can't deploy it on this instance. Avoids the silent-broken case where
someone creates a mysql token, gets a connection_string artifact, points
their MySQL client at it, and just times out with no clue why.
Backend (3-line change):
- TypeDescriptor gains `Enabled bool` + optional `DisabledReason string`
- TypeDescriptors() now takes `mysqlEnabled bool`; mysql is the one whose
Enabled tracks the flag, all others are always true (they don't need
any deployment-level infra beyond HTTP)
- Handler stores mysqlEnabled, passes to descriptors call; main.go wires
cfg.MySQL.Enabled in. Handler tests updated to pass false explicitly.
Frontend (matching schema + visual treatment):
- typeDescriptorSchema picks up `enabled` (default true for backward compat)
and `disabled_reason` (optional string)
- TypeCard reads descriptor.enabled, sets `data-disabled` on the label,
disables the radio input, replaces the blurb with the disabled_reason
when present (so the user sees WHY rather than guessing), and renders
a small "disabled" pill in the top-right corner of the card
- SCSS: dashed border, muted palette, opacity 0.55, glyph faded, cursor
not-allowed, hover effect suppressed — reads as "shelf is here but the
specimen is checked out" rather than a broken button
In the operator UI: mysql card renders ghosted with the explanatory text
"Requires direct TCP exposure (port 3306). Not reachable via Cloudflare
Tunnel — only enable on a VPS with raw TCP access." Selecting it is
mechanically impossible (input is disabled), no form-level guard needed.
Flip MYSQL_FAKE_ENABLED=true in env when you stand up a VPS later and the
card re-enables with no other code changes.
Backend builds clean + token-package tests pass.
Frontend gates green: typecheck + biome + lint:scss + build (431ms).
2026-05-17 22:45:53 -04:00