Commit Graph
42 Commits
Author SHA1 Message Date
mrhid6 58a5230405 feat: Updated docs
Deploy / deploy (push) Successful in 1m51s
2026-09-15 10:18:23 +00:00
mrhid6 50b5ee2964 docs: removed old env vars
Deploy / deploy (push) Successful in 1m22s
2026-09-10 11:20:05 +00:00
mrhid6 7762629634 chore: replace em dashes with hyphens, add no-em-dash rule to CLAUDE.md
Deploy / deploy (push) Successful in 2m47s
2026-09-10 09:18:57 +00:00
mrhid6 e8455c99fe docs: Updated install doc to include nginx instructions
Deploy / deploy (push) Successful in 57s
2026-09-10 08:43:43 +00:00
mrhid6 fbfb4b8608 fix: Fixed docker compose repo url
Deploy / deploy (push) Successful in 2m30s
2026-09-09 11:23:08 +00:00
mrhid6 fcedb12f39 docs: fix mcp runner redaction mechanism, note create_workflow's scope and fan-out checks
Deploy / deploy (push) Successful in 1m42s
2026-09-09 08:23:44 +00:00
mrhid6 a0c20299a5 docs: document agent access over MCP and token tag restrictions 2026-09-09 08:20:42 +00:00
mrhid6 c4bc4b68bf docs: describe the redesigned api keys page
Deploy / deploy (push) Successful in 1m35s
2026-09-08 14:12:53 +00:00
mrhid6 aa581b5d1e fix: Build the vantagectl image on its release tag, not on every push to main
vantagectl is a released tool, not a running service. An operator restoring a
database should be able to name the version they ran, and ":latest, rebuilt
whenever main moved" cannot be named after the fact.

The image now builds in vantagectl-release.yml on a vantagectl/v* tag, tagged
with that version as well as latest, with VERSION passed through so the binary
inside reports the tag rather than "dev". server-deploy.yml no longer builds
it and is back to seven images.

The cost is that a shared/ fix reaches the image only at the next release
rather than the next push to main. That is the intended trade and is written
down in CLAUDE.md next to the trigger table.
2026-09-07 15:11:39 +00:00
mrhid6 76057eb346 fix: document inspect and --confirm-db's actual behaviour 2026-09-07 14:45:37 +00:00
mrhid6 f564dd0479 docs: Reconcile backups and backup-and-restore pages
backups.md kept its store-level table and danger note but now points to
vantagectl as the supported path, with mongodump/mongorestore demoted to
an explicit fallback and a warning that a plain dump records no key
fingerprint. backup-and-restore.md links back for the store-level
overview.
2026-09-07 14:32:31 +00:00
mrhid6 54671a3652 docs: Document backup and restore
The page leads with KEY_ENCRYPTION_KEY rather than mentioning it in a
note, because holding a good database dump and no key is the way this goes
wrong.
2026-09-07 14:29:03 +00:00
mrhid6 8359791b6e fix: Fixed api url on web 2026-08-25 13:53:59 +00:00
mrhid6 036875345a feat: sell status pages as a per-instance licence feature 2026-08-25 09:25:05 +00:00
mrhid6 c6cd96cbd1 docs: correct the status page URL for self-hosted, trim to what ships
- The status page URL was given only as `<instance>.vantage.<tld>`, which a
  self-hosted install does not serve. Both deployments are now described.
- The banner is documented as one notice: the editor exposes no level picker
  and the view renders every level identically.
- `pending` added to the component states, which a monitor with no result yet
  renders.
- Delete page documented alongside un-publish.
- `TRUSTED_PROXIES` names the LAN case: with the RFC1918 default, a client on a
  private range reaching the server directly is itself trusted and can spoof
  `X-Forwarded-For` — and now `X-Forwarded-Host`. Narrow it to the proxy.
- CLAUDE.md: scopes are nine resources, not eight; `status-pages` added to the
  REST route table; the host-resolution rules recorded under Status pages.
2026-08-25 09:05:06 +00:00
mrhid6 d69a36ed7b docs: status pages 2026-08-25 08:44:38 +00:00
mrhid6 57951cabff fix: default TRUSTED_PROXIES in shipped deployments and route /public/ through ingress 2026-08-24 14:35:29 +00:00
mrhid6 4f6a4f2d69 feat: public status page endpoint with per-address rate limit 2026-08-24 14:29:24 +00:00
mrhid6 4578be2c82 docs: Updated troubleshotting doc 2026-08-24 12:50:44 +00:00
mrhid6 3ba8254aec feat: Hide secrets on api and channels 2026-08-14 12:23:36 +00:00
mrhid6 83b3c177c8 docs: Describe the Windows agent's update and workload support 2026-08-13 12:23:34 +00:00
mrhid6 b9ef580c86 fix: Fixed docs entitlement 2026-08-13 12:18:21 +00:00
mrhid6 99f5e799a4 feat: Give API keys their own page and group the sidebar
The token management card sat on /settings, which is owner|admin
throughout, so it hid a capability every member already had: the API has
never required a role to mint or revoke your own key. It is now the
/api-keys page, reachable at every role, with the instance-wide lifetime
cap left behind on /settings because that is policy rather than one
person's credentials — and that split is what lets the page be ungated.

The sidebar gains groups: Fleet, Access, Automation, Instance, each with a
small-caps heading and a rule above it. Grouping is by what the operator
is doing rather than by which service answers, so SSH keys, secrets and
API keys sit together as credentials. A group whose every item is
admin-only disappears whole for a member; a labelled section with nothing
under it reads as a failure rather than a restriction.

The UI says keys while the collection, prefix and routes still say tokens.
Renaming a published endpoint to match a nav label would break every
script already written against it.
2026-08-13 08:54:42 +00:00
mrhid6 63984af250 docs: Document API tokens and the OpenAPI reference 2026-08-13 08:04:09 +00:00
mrhid6 3caec66f48 feat: Changes to self hosted purchase 2026-08-11 09:30:19 +01:00
mrhid6 83c38db92e docs: Self review of doc pages 2026-08-10 16:32:23 +01:00
mrhid6 bd7b3256fc feat(audit): server-side paging, search and category filter; one event format
The page rendered a map of eleven event types to labels and seven to colours.
The server emits forty-seven. Everything unmapped fell through to its raw
string, so "Key Assigned" in green sat above "workflow.schedule_updated" in
grey — the same kind of fact in two formats, which made the column look like it
carried a meaning it did not.

Presentation is now derived rather than enumerated. Event types are named
<category>.<action> by every call site, so the category becomes a chip, the
action is humanised, and the tone comes from the verb. A type added to the
server tomorrow gets a sensible label and colour with no second list to update;
the override table holds only the dozen the rule reads badly for. Every row is
one treatment, and colour never carries meaning alone — the sentence beside it
says the same thing in words.

Paging and filtering are server-side, unlike the fleet lists that answer with
everything and slice in the browser. audit_retention_days is a licensed
entitlement measured in months, and this log is read to answer questions about
the past, so a browser filtering the most recent page would report "no results"
for events that exist. GET /api/audit now takes q, category, limit and skip and
answers {events, total} — a short page is not evidence of the end of the log,
which is why the total is counted rather than inferred.

audit_logs had no indexes at all: every read was a collection scan with an
in-memory sort over an append-only collection. Adds (instance_id, created_at)
and warns rather than failing, matching EnsureSecretIndexes.

Two bugs found by running the deriver over all forty-seven real types rather
than eyeballing it: the tone rules matched only past-tense verbs, leaving
auth_provider.delete drawn as neutral beside key.deleted in red; and
"unaccepted" matched "accepted", so withdrawing an acceptance read as the same
caution as granting one.
2026-08-10 15:25:48 +01:00
mrhid6 a86fc610e3 docs: document the workload registry 2026-08-07 09:09:18 +01:00
mrhid6 4f0134effc feat: vuln_scanning entitlement and documentation
Adds license.FeatureVulnScanning as the one name for the feature and a
catalogue row per deployment/tier, following console and oidc: features
are opt-in per customer, so no plan bundles it.

Documents the subsystem in CLAUDE.md, including that ScopedCollections is
the canonical registry instance deletion derives from — there is no
separate deletion list, which the plan had wrong.
2026-08-06 14:44:11 +01:00
mrhid6 da9e82ed4a fix: schedule card placement, preview state, and scheduled-workflow docs 2026-08-04 17:08:11 +01:00
mrhid6 f5e6062bff docs: Updated docs 2026-08-04 17:03:29 +01:00
mrhid6 84c8d46f59 docs: server tags and workflow tag targeting 2026-08-04 13:44:16 +01:00
mrhid6 3c6db2c6d9 docs: fix stale auth-provider references in rest-api and licensing docs 2026-08-03 11:08:22 +01:00
mrhid6 6b22a3ca50 docs: document multiple auth providers and the callback URL change 2026-08-03 11:05:40 +01:00
mrhid6 a36dc4b11e fix: Fixes to running on kubernetes 2026-07-31 10:34:10 +01:00
mrhid6 bcc44fd44a feat: authenticate the server's Redis connection
InitRedis now takes a username and password, read from REDIS_USERNAME and
REDIS_PASSWORD, matching what admin has always done. Both empty keeps an
unauthenticated Redis working; a password with an empty username is what a
legacy requirepass instance needs, since go-redis then sends AUTH with one
argument instead of two.

This is what lets a Kubernetes install point at a managed Redis instead of
the bundled one.
2026-07-31 09:36:31 +01:00
mrhid6 e2c08da6a7 fix: bound and complete console relay teardown, restore proxy_failed audit
- Arm the unclaimed-relay watchdog in NewSession rather than Serve, so an
  agent that never opens its ProxyStream is bounded to 10s and reports
  reason "agent_timeout", per the design spec's failure-mode table.
- Session.Close now also closes the accepted net.Conn (stored via setConn),
  so ConsoleProxy.Close() is an unconditional kill of the whole relay chain
  instead of only closing an already-idle listener.
- Emit console.proxy_failed and end the console session from a defer in
  consoleTunnel guarded on relay.Reason(), since guac's OnDisconnect never
  runs when the connect callback errors -- which is the path every relay
  failure this feature introduces takes. Update the two docsite
  troubleshooting rows to match what the audit event can now actually show.
2026-07-31 09:21:07 +01:00
mrhid6 ac00a99c73 docs: document the agent-relayed console proxy
Every console session now rides the agent's outbound gRPC connection
instead of a direct guacd-to-target dial, so it works for servers
behind NAT and now requires a live agent (409 agent_offline
otherwise). Documents PROXY_ADVERTISE_HOST / PROXY_LISTEN_HOST and
corrects reachability claims across the docsite and CLAUDE.md.
2026-07-31 09:10:05 +01:00
mrhid6 51efb9e498 docs: Updated docs 2026-07-28 16:53:42 +01:00
mrhid6 18755d8697 docs: Updated docs 2026-07-28 16:53:38 +01:00
mrhid6 a5d31c77f7 fix: Fixed baked api url 2026-07-28 16:18:50 +01:00
mrhid6 11b1936bb2 feat: documentation site
Docusaurus 3 docs-only site at docsite/, served statically by nginx under
/docs on the marketing host. Covers getting started (self-hosted install
through first server and first licence), the control plane, Vantage HQ,
a reference section and operations.

Wired into docker-compose.site.yml as docsite (3005:80) and into the
image build workflow, rebuilding on its own directory only. Never added
to the self-hosted compose file.
2026-07-28 15:46:33 +01:00