docs(guide): add technical.feedback — the last uncovered service (#26) #31
Reference in New Issue
Block a user
Delete Branch "docs/26-technical-feedback"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #26 (and hiveops-feedback#13).
Why
hiveops-feedbackhas been live in production since 2026-07-09 with no Guide module.coverage-reconcile.pyhas been reporting it as MISSING the whole time.That was the first thing to fail today:
technical.feedback404'd, and becauseGlobalExceptionHandlerturns a bad path into a 500, I spent a while convinced the Guide itself was down. It wasn't — the module simply didn't exist.Shape
Matches the other 19
technical.*modules exactly: singleoverview.md,tab=Overview,audience=dev,order=10, sections Responsibility / Data / Kafka / API surface / Gotchas. Written from source (develop@ea81eb4), not from memory or the repo README.audience: devmeans BCOS_ADMIN only — it will not ship to production, which serves thecustomertier.What it records
The Gotchas are the point. Things that have actually bitten, with issue numbers:
DB_HOST/DB_PORT/DB_NAME) — notDB_URLlike journal/devices. Copying the sibling pattern here does not work.X-Submit-Key→ROLE_SUBMITTERfor intake, JWT MSP/BCOS for triage.RELOCATEDis terminal;accept()/review()409 against it.collectLabelsswallows exceptions atlog.debug, so a token withoutread:organizationdrops org labels with no error and creates the issue under-labelled.X-Forwarded-Forblindly (feedback#5) —xff.split(",")[0], no trusted-proxy check. Also per-instance Caffeine: not shared, resets on restart./h2-console/**ispermitAllunconditionally (feedback#7) — the console is only enabled ondev, but the permit rule ships regardless.FeedbackPrincipalhasinstitutionKeyand never consults it. QDS log in as MSP_ADMIN. This caused a real exposure on 2026-07-09.POST /submitcarries no user JWT — shared key, so a submission has no institution attached at all. That is why #19 cannot be fixed by scoping the read alone.%2Fpath → 405, then an emptyGITEA_TOKEN→ unauthenticated → Gitea 404 (not 403) on a private repo → opaque 500.SanitizerServicehere is not the same code as journal'sPciSanitizer.RELOCATEDrow stays listed forever after its issue closes; pruning is manual.Checks
coverage-reconcile.py→ green, no missing entries.module/tab/audience/order) and parses under the same rulesMarkdownGuideService.parseapplies.🤖 Generated with Claude Code