
Treasury Desk
A browser-local crypto treasury demo with payment proposals, two-of-three approvals, revision history, simulated execution and a ledger that records the result.
A command-line tool for keeping your pgvector indexes in line with a configuration you control. It checks what exists, shows you what needs changing, and can build and replace HNSW indexes when you apply those changes.
Having an index is one thing. Knowing it still has the right settings, covers the right data and finished building properly takes a little more attention. That gets more interesting when you have several indexes for different parts of the same table.
pgvector-index-manager compares the database with your configuration. It checks the vector dimensions, distance metric, HNSW settings, filters and index health, then works out what needs to happen.
The workflow starts with inspection. You can check the current state, review a plan or do a dry run before applying anything. The inspection commands can use read-only credentials; applying changes needs permission to manage indexes.
When a replacement is needed, it builds the new index concurrently alongside the existing one and verifies its structure before giving it the expected name. The previous managed index is then retired. You can set a grace period before that cleanup, and the remaining wait survives a restart.
It also keeps track of which indexes belong to which configuration. That matters when different configurations manage different subsets of the same table. A job looking after one group of documents should stay within its own set of indexes. Conflicting indexes outside its ownership are protected by default.
You can run it once when you need a change, or explicitly enable continuous mode to keep checking and correcting differences from the configuration.
It’s written in Go, with a Docker demo for trying the workflow on synthetic data. It also sits quite naturally alongside pgvector-filterbench: Filterbench helps you measure how your searches behave, while Index Manager handles the indexes you choose to maintain.
targets list, and status, plan, and apply reconcile every target in a single pass. Top-level sections act as shared defaults and each target overrides only the fields it sets, so a DSN, table, or reconcile policy can be shared while every managed index family keeps its own index name, population, and ownership tag.report-<name>.json instead of report.json, so one pass over several targets no longer overwrites earlier reports. Report permissions and privacy defaults are unchanged.config.LoadTargets returns one resolved and validated Config per target. Legacy single-target files load through the same path.reconciler.ApplyAll and reconciler.ApplyAllContinuous reconcile several targets in order and isolate failures, so a blocked or failing target does not stop the others.testdata/sample-config-multi.yaml, a documented multi-target example.apply, plan, and status accept multi-target files and label each block of output with its target name. apply exits non-zero when any target fails and reports "nothing to apply" only when no target had work.reconcile.continuous and reconcile.interval belong in the shared section, and declaring them inside a target is rejected with an explicit error.targets list keep their previous behavior, including the report.json filename and the single-target exit codes.false and an explicit empty filter list, and rejection of missing, unsafe, or duplicate target names, duplicate managed index names, and run-level settings declared per target.report.json.status and plan after a target fails, and report every target's error. Continue writing later targets' reports when an earlier report fails.golang.org/x/text to 0.39.0 to address the vulnerabilities reported by Govulncheck.External download
Fixed
drop_unowned is enabled.Changed
0.1.0 ownership metadata are rebuilt once so they acquire the stronger structural attestation.Tests
External download
status, plan, apply, and version commands.External download