Files
mcp-nextcloud/tests/fixtures/acl_hash_corpus.json
T
Chris CoutinhoandClaude Opus 4.8 d883052fb8 feat: add opt-in MCP decomposition hook points (design §10)
Adds the seven §10.2 hook-point modules + five env vars so Astrolabe Cloud can
offload document processing to the external document-processor / embedding
gateway. Purely additive: with every setting unset the server behaves exactly
as today, so self-hosters are unaffected (Deck #92).

Hook points (all default to current monolith behavior):
- config: EMBEDDING_PROVIDER, INGEST_MODE, STATUS_BACKEND,
  COLLECTION_METADATA_SOURCE, FACT_EVENT_EMITTER (+ supporting settings),
  validated in Settings.__post_init__ (fail-fast STATUS_BACKEND=local with
  INGEST_MODE=external); shared canonical.py.
- vector/payload_keys.py + acl_hash.py: cross-impl NAMESPACE/point_id (§2.2)
  and BLAKE2b-128 ACL hash (§11), pinned by fixtures shared with the
  document-processor repo.
- embedding/gateway_client.py: OpenAI-compatible GatewayProvider authenticating
  via M2M OIDC client-credentials (separate realm); manual-only registry entry.
- vector/collection_metadata.py: sentinel-point / API metadata source with env
  fallback.
- vector/queue/: hexagonal ingest producer ports + memory/NATS adapters
  (Postgres seam); INGEST_MODE=external publishes mcp.ingest.requested.{tenant}
  instead of the in-memory stream and skips the in-process processor pool. The
  lifespan becomes a composition root across both deployment branches.
- vector/queue/status.py: STATUS_BACKEND=bus subscriber feeding a StatusStore
  the vector-sync status endpoint reads.
- admin/payload_backfill.py: POST /api/v1/admin/payload-backfill (admin scope);
  processor writes the new payload keys; query-side ACL pre-filter gated behind
  ACL_PREFILTER_ENABLED (default off).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:13:25 +02:00

286 lines
5.0 KiB
JSON

{
"_comment": "Cross-impl ACL hash corpus (design §11.5). Pinned BLAKE2b-128 values; both repos must reproduce. Do not edit by hand.",
"cases": [
{
"name": "single_user_ascii",
"share_set": [
[
"user",
"alice"
]
],
"expected": [
"c63a5fa2d6df5c20ee3700dd85e39e1d"
]
},
{
"name": "single_group",
"share_set": [
[
"group",
"admins"
]
],
"expected": [
"fe57bf2fd0682f713ff967073808b2c1"
]
},
{
"name": "public_only",
"share_set": [
[
"public",
"public"
]
],
"expected": [
"97990046391027e6ec24575a3ebdd136"
]
},
{
"name": "user_group_public",
"share_set": [
[
"user",
"alice"
],
[
"group",
"admins"
],
[
"public",
"public"
]
],
"expected": [
"c63a5fa2d6df5c20ee3700dd85e39e1d",
"fe57bf2fd0682f713ff967073808b2c1",
"97990046391027e6ec24575a3ebdd136"
]
},
{
"name": "user_uppercase_distinct",
"share_set": [
[
"user",
"Alice"
]
],
"expected": [
"245e3e55068fbb623b397a8ca21b0126"
]
},
{
"name": "unicode_precomposed",
"share_set": [
[
"user",
"café"
]
],
"expected": [
"053451c238fa2c6118b95b2ab2d7964a"
]
},
{
"name": "unicode_decomposed_same_as_precomposed",
"share_set": [
[
"user",
"café"
]
],
"expected": [
"053451c238fa2c6118b95b2ab2d7964a"
]
},
{
"name": "pipe_in_username",
"share_set": [
[
"user",
"a|b"
]
],
"expected": [
"a5f7e378a36ed9dd4e8e02007bca3624"
]
},
{
"name": "colon_in_username",
"share_set": [
[
"user",
"a:b"
]
],
"expected": [
"7049ec93c0bf28a5f02a8527434dd0a0"
]
},
{
"name": "newline_in_username",
"share_set": [
[
"user",
"a\nb"
]
],
"expected": [
"8e62aee620abaf9852e471d603cbe88b"
]
},
{
"name": "backslash_in_username",
"share_set": [
[
"user",
"a\\b"
]
],
"expected": [
"c16a30d33ef2f834ebb642496206467e"
]
},
{
"name": "quote_in_username",
"share_set": [
[
"user",
"a\"b"
]
],
"expected": [
"61405bcb3db7afd0fbf13693d2157bbb"
]
},
{
"name": "space_in_group",
"share_set": [
[
"group",
"Dept 7"
]
],
"expected": [
"e80d92f6227d1ae64a8c8231491335d8"
]
},
{
"name": "emoji_username",
"share_set": [
[
"user",
"🦏fox"
]
],
"expected": [
"52156572976858eec6361800b2f5ad03"
]
},
{
"name": "cjk_group",
"share_set": [
[
"group",
"管理员"
]
],
"expected": [
"a3e5a6e8b405d5c749a031595309491c"
]
},
{
"name": "email_style_user",
"share_set": [
[
"user",
"jane.doe@example.com"
]
],
"expected": [
"3216fecd6203036e6c23ff9c055031d9"
]
},
{
"name": "numeric_group",
"share_set": [
[
"group",
"12345"
]
],
"expected": [
"1ae023f071c8d70bacdb388230fc2cfb"
]
},
{
"name": "multi_group_large",
"share_set": [
[
"user",
"bob"
],
[
"group",
"g1"
],
[
"group",
"g2"
],
[
"group",
"g3"
],
[
"group",
"g4"
],
[
"group",
"g5"
]
],
"expected": [
"830bb4f705bc0aa13929061db587b696",
"4eac98d1b59fec00e15e4fe28a32a3f9",
"2c76357c3f95284911f6be1a30d4850e",
"898271cc3d99563bf8dd396ef6c0f0b2",
"4704c80af47f56c566cf5b83f506e704",
"80bcc464007a51518f87876758c6ccf5"
]
},
{
"name": "group_and_public",
"share_set": [
[
"group",
"staff"
],
[
"public",
"public"
]
],
"expected": [
"b2d6c7e2a6bc94f2b0310492ac6316fc",
"97990046391027e6ec24575a3ebdd136"
]
},
{
"name": "trailing_space_user_distinct",
"share_set": [
[
"user",
"alice "
]
],
"expected": [
"d7f07f4624e3e06b7f0b77f483e9941e"
]
}
]
}