Compare commits
base: mathias/hyperguild:v0.19.1
mathias/hyperguild:main
mathias/hyperguild:fix/pipeline-writes-158
mathias/hyperguild:fix/edit-path-io-192
mathias/hyperguild:fix/create-regular-188
mathias/hyperguild:fix/guard-special-179
mathias/hyperguild:fix/linkcheck-keeps-write-178
mathias/hyperguild:fix/write-dir-redirect-173
mathias/hyperguild:fix/tunnel-detect-174
mathias/hyperguild:fix/pipeline-root-157
mathias/hyperguild:w3/154-mcp-auth-wiring
mathias/hyperguild:fix/tunnel-traversal
mathias/hyperguild:test/in-brain-targets-171
mathias/hyperguild:fix/brain-scan-root-157
mathias/hyperguild:fix/graph-wiki-root-157
mathias/hyperguild:fix/vectorstore-root-157
mathias/hyperguild:fix/notes-root-157
mathias/hyperguild:fix/search-root-157
mathias/hyperguild:fix/brainwide-root-157
mathias/hyperguild:fix/raw-symlinks-153
mathias/hyperguild:feat/symlink-tripwire-157
mathias/hyperguild:fix/rest-auth-149
mathias/hyperguild:fix/123-brain-edit-envelope-check
mathias/hyperguild:feat/106-page-aware-extraction
mathias/hyperguild:fix/105-source-drift-on-main
mathias/hyperguild:fix/104-surface-merge-conflicts-on-main
mathias/hyperguild:agent/b1-compile-on-ingest
mathias/hyperguild:agent/104-surface-merge-conflicts
mathias/hyperguild:agent/105-source-drift
mathias/hyperguild:agent/107-loud-unconfigured-alerting
mathias/hyperguild:feat/brain-read-edit
mathias/hyperguild:fix/capture-i1-refusal-names-target
mathias/hyperguild:renovate/configure
mathias/hyperguild:feat/consolidate-single-harness
mathias/hyperguild:icebox/cmd-routing
mathias/hyperguild:feat/brain-pending-promote
mathias/hyperguild:fix/close-session-classification-refresh
mathias/hyperguild:fix/capture-summarywriter
mathias/hyperguild:v0.24.0
mathias/hyperguild:v0.23.1
mathias/hyperguild:v0.23.0
mathias/hyperguild:v0.22.0
mathias/hyperguild:v0.21.1
mathias/hyperguild:v0.21.0
mathias/hyperguild:v0.20.1
mathias/hyperguild:v0.20.0
mathias/hyperguild:v0.19.1
mathias/hyperguild:v0.19.0
mathias/hyperguild:v0.18.4
mathias/hyperguild:v0.18.3
mathias/hyperguild:v0.18.2
mathias/hyperguild:v0.18.1
mathias/hyperguild:v0.18.0
mathias/hyperguild:v0.17.0
mathias/hyperguild:v0.16.1
mathias/hyperguild:v0.16.0
mathias/hyperguild:v0.15.0
mathias/hyperguild:v0.14.0
mathias/hyperguild:v0.13.2
mathias/hyperguild:v0.13.1
mathias/hyperguild:v0.13.0
mathias/hyperguild:v0.12.1
mathias/hyperguild:v0.12.0
mathias/hyperguild:v0.11.2
mathias/hyperguild:icebox/cmd-routing-2026-07-01
mathias/hyperguild:v0.11.1
mathias/hyperguild:v0.11.0
mathias/hyperguild:v0.10.0
mathias/hyperguild:v0.9.0
mathias/hyperguild:v0.8.0
mathias/hyperguild:v0.7.0
mathias/hyperguild:v0.6.0
mathias/hyperguild:v0.5.0
mathias/hyperguild:v0.4.1
mathias/hyperguild:v0.4.0
mathias/hyperguild:v0.3.0
mathias/hyperguild:v0.2.0
mathias/hyperguild:v0.1.0
..
compare: mathias/hyperguild:fix/rest-auth-149
mathias/hyperguild:main
mathias/hyperguild:fix/pipeline-writes-158
mathias/hyperguild:fix/edit-path-io-192
mathias/hyperguild:fix/create-regular-188
mathias/hyperguild:fix/guard-special-179
mathias/hyperguild:fix/linkcheck-keeps-write-178
mathias/hyperguild:fix/write-dir-redirect-173
mathias/hyperguild:fix/tunnel-detect-174
mathias/hyperguild:fix/pipeline-root-157
mathias/hyperguild:w3/154-mcp-auth-wiring
mathias/hyperguild:fix/tunnel-traversal
mathias/hyperguild:test/in-brain-targets-171
mathias/hyperguild:fix/brain-scan-root-157
mathias/hyperguild:fix/graph-wiki-root-157
mathias/hyperguild:fix/vectorstore-root-157
mathias/hyperguild:fix/notes-root-157
mathias/hyperguild:fix/search-root-157
mathias/hyperguild:fix/brainwide-root-157
mathias/hyperguild:fix/raw-symlinks-153
mathias/hyperguild:feat/symlink-tripwire-157
mathias/hyperguild:fix/rest-auth-149
mathias/hyperguild:fix/123-brain-edit-envelope-check
mathias/hyperguild:feat/106-page-aware-extraction
mathias/hyperguild:fix/105-source-drift-on-main
mathias/hyperguild:fix/104-surface-merge-conflicts-on-main
mathias/hyperguild:agent/b1-compile-on-ingest
mathias/hyperguild:agent/104-surface-merge-conflicts
mathias/hyperguild:agent/105-source-drift
mathias/hyperguild:agent/107-loud-unconfigured-alerting
mathias/hyperguild:feat/brain-read-edit
mathias/hyperguild:fix/capture-i1-refusal-names-target
mathias/hyperguild:renovate/configure
mathias/hyperguild:feat/consolidate-single-harness
mathias/hyperguild:icebox/cmd-routing
mathias/hyperguild:feat/brain-pending-promote
mathias/hyperguild:fix/close-session-classification-refresh
mathias/hyperguild:fix/capture-summarywriter
mathias/hyperguild:v0.24.0
mathias/hyperguild:v0.23.1
mathias/hyperguild:v0.23.0
mathias/hyperguild:v0.22.0
mathias/hyperguild:v0.21.1
mathias/hyperguild:v0.21.0
mathias/hyperguild:v0.20.1
mathias/hyperguild:v0.20.0
mathias/hyperguild:v0.19.1
mathias/hyperguild:v0.19.0
mathias/hyperguild:v0.18.4
mathias/hyperguild:v0.18.3
mathias/hyperguild:v0.18.2
mathias/hyperguild:v0.18.1
mathias/hyperguild:v0.18.0
mathias/hyperguild:v0.17.0
mathias/hyperguild:v0.16.1
mathias/hyperguild:v0.16.0
mathias/hyperguild:v0.15.0
mathias/hyperguild:v0.14.0
mathias/hyperguild:v0.13.2
mathias/hyperguild:v0.13.1
mathias/hyperguild:v0.13.0
mathias/hyperguild:v0.12.1
mathias/hyperguild:v0.12.0
mathias/hyperguild:v0.11.2
mathias/hyperguild:icebox/cmd-routing-2026-07-01
mathias/hyperguild:v0.11.1
mathias/hyperguild:v0.11.0
mathias/hyperguild:v0.10.0
mathias/hyperguild:v0.9.0
mathias/hyperguild:v0.8.0
mathias/hyperguild:v0.7.0
mathias/hyperguild:v0.6.0
mathias/hyperguild:v0.5.0
mathias/hyperguild:v0.4.1
mathias/hyperguild:v0.4.0
mathias/hyperguild:v0.3.0
mathias/hyperguild:v0.2.0
mathias/hyperguild:v0.1.0
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b5c227179f |
fix(ingestion): close the PR #152 review findings on REST auth
- main.go's wiring was untested (the test built its own copy of the router, so dropping auth in main or re-registering POST /query as public stayed green). Routing is now one function, buildMux, which main calls and the tests call: it constructs the bearer middleware itself, registers public handlers only for patterns on a fixed allowlist (a public REST pattern would beat the authenticated catch-all by specificity), refuses an empty token, and returns an http.Handler so nothing can add a route to the result. - hyperguild CLI: PassRate sent no token and would 401. Every request now goes through brainClient.do, which adds it; the test covers Query, Write and PassRate and is named for that. - ResolveIngestPath returns one refusal for every bad path; the raw EvalSymlinks error let a caller probe which server files exist and leaked the brain directory. - PROJECT.md (and derived adapters) and the pass-rate runbook state that the REST API needs BRAIN_MCP_TOKEN and is tailnet/in-cluster. Refs #149 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
21a53c4159 |
fix(ingestion): confine /ingest-path and brain_ingest paths to brain/raw/
Both read a caller-chosen server path with extract.Text, so any file the pod could read (the ServiceAccount token, /etc/passwd) could be ingested into the brain and read back with brain_query. ResolveIngestPath resolves relative paths against brain/raw/ (the inbox the watcher already owns), evaluates symlinks, and refuses anything that lands outside. A directory ingest re-resolves every walked file, so a symlinked file inside raw/ cannot lead out. Existing ingest-path tests moved their fixtures under brain/raw/. Refs #149 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
99fedeaa98 |
fix(ingestion): authenticate the REST API as a whole, not route by route
Only /mcp was wrapped in BearerMiddleware; /query, /write, /ingest*, /promote, /pending and the rest on the same mux had no auth, and infra#517 found them on the internet (mitigated there by narrowing the ingress). They are still open on the tailnet and LAN NodePort 30330. mountREST puts the REST routes on their own mux, mounted at "/" behind the same bearer middleware and credential as /mcp. Routes registered on the outer mux stay explicitly public (/mcp has its own auth, /capture, the HMAC webhook, OAuth metadata, /metrics); anything else, including a route added later, is authenticated by default. The hyperguild CLI (cmd/hyperguild and internal/brain) now sends BRAIN_MCP_TOKEN, which it never did. brain-ui and brain-ingest-ntfy already send theirs. Refs #149 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |