pChronicle Directory and platform cases
Platform-oriented Directory setup. The ACL file manages users, datasets
(libraries), and grants; Warehouse listen/Gateway options still come from
pchronicle serve.
P01: Issue a Directory user from an empty config
pchronicle serve catalog issue \
--catalog-config ./catalog.toml alice
If the file does not exist, the command creates it, writes a user with empty grants, and prints the secret once on stdout.
P02: Register a dataset library
pchronicle serve catalog dataset add \
--catalog-config ./catalog.toml \
prod \
--uri s3://bucket/prod \
--endpoint http://127.0.0.1:9000 \
--region us-west-2 \
--access-key BACKEND_AK \
--secret-key BACKEND_SK
This only registers the URI and backend credentials. It does not create or
delete object-store data. All s3:// libraries in one file must share the same
endpoint, region, and backend keys.
P03: Grant libraries to a user
pchronicle serve catalog grant \
--catalog-config ./catalog.toml \
alice prod
Expected: a [[grants]] entry lists prod under that user. v1 grants are
library membership (not --permission flags).
P04: Serve with catalog mounts
pchronicle serve \
--catalog-config ./catalog.toml \
--listen 127.0.0.1:8081
Every [datasets.*] entry is mounted into Warehouse. Directory ticket routes
remain available for catalog:// pins. Restart after editing the ACL file.
P05: Open an authorized dataset via a Directory pin
pchronicle dataset pin team catalog://127.0.0.1:8081 \
--ak USER_AK --sk USER_SK
pchronicle query @team/prod \
--sql 'SELECT COUNT(*) AS runs FROM dataset.runs'
Expected: an authorized user can query prod; unknown datasets fail closed.
Automated runs skip this case by default; set PCHRONICLE_CASE_MODE=catalog
after completing P01–P04 against a live Directory.
P06: Revoke a library grant
pchronicle serve catalog revoke \
--catalog-config ./catalog.toml \
alice prod
Expected: later @team/prod access is denied for that user.
P07: RustFS Warehouse regression
Prepare RustFS and set:
export PCHRONICLE_RUSTFS_ENDPOINT=http://127.0.0.1:9000
export PCHRONICLE_RUSTFS_ACCESS_KEY=rustfsadmin
export PCHRONICLE_RUSTFS_SECRET_KEY=rustfsadmin
export PCHRONICLE_RUSTFS_BUCKET=pchronicle-cases
Then run the RustFS regression coverage for Dataset writes, Snapshot discovery
(including chronicle.manifest when present), SQL, Explorer, and refresh.
Automated runs skip this case by default; set PCHRONICLE_CASE_MODE=rustfs
with a reachable endpoint to execute it.
Platform checks:
- ACL files can be built from empty;
- user, dataset, and grant edits are deterministic;
- backend object-store keys stay in the catalog file / ticket path, not in
dataset listoutput; - Warehouse mounts every registered library when serving
--catalog-config; - Snapshot refresh does not mutate an in-flight Snapshot;
- RustFS Warehouse behavior matches local Datasets for the covered paths.