mirror of
https://github.com/vee1e/krply.git
synced 2026-09-01 09:49:51 +00:00
fix(audit,web,deploy): audit ids, web dry-run view, hardened chart, docs
Audit: correlation event_ids include stage and response code so the multi-stage lines of one request no longer collapse under dedup; match scans are bounded to a time window and a page instead of the object's full history. Web: dry-run results are read from dry_run_result (nested) so the verdict is rendered correctly and conflicts/errors/skipped are shown; the plans view no longer POSTs an unsolicited plan on page load; coverage and streams surface API errors instead of showing a misleading empty state and follow cursor pagination so they are not stuck on the oldest page; the diff path tokenizer handles backslash-escaped dotted keys. Deploy/CI: the chart no longer grants the query server a cluster-wide read ClusterRole, runs as non-root with a read-only root filesystem, adds liveness/readiness probes, wires the ConfigMap as env (STORE_PATH, LISTEN_ADDR), defaults the journal to a PVC instead of an ephemeral emptyDir, and adds imagePullSecrets; the replay ClusterRole drops the unused update verb; a Dockerfile builds a static distroless image; GitHub actions are pinned by commit SHA, jobs set least-privilege permissions, the Vercel deploy skips fork PRs, CI passes the Makefile test timeouts, and make lint runs a real web syntax check. Docs: event-schema/consistency no longer describe an ingest_sequence field, an observed-time-based event_id, or restart-from-checkpoint; the threat model documents the unauthenticated HTTP API surface and the chart's RBAC change; replay-safety matches the enforced dry-run gate.
This commit is contained in:
parent
44fbd878a1
commit
9f4b6c2c5a
23 changed files with 251 additions and 96 deletions
|
|
@ -9,7 +9,7 @@ Every journal record is an immutable entry. The wire format is api/event/v1. Thi
|
|||
| cluster_id | Separates resource version and UID domains; one per physical cluster |
|
||||
| stream_id | Identifies group, version, resource, namespace, and selector |
|
||||
| event_id | Deterministic deduplication key |
|
||||
| ingest_sequence | Local storage order (ascending); returned in this order |
|
||||
| ingest_seq | Local storage order (ascending); returned in this order |
|
||||
| observed_at | Collector observation time |
|
||||
| watch_type | Original event type (ADDED, MODIFIED, DELETED, BOOKMARK, ERROR) |
|
||||
| synthetic | True for baseline events |
|
||||
|
|
@ -44,11 +44,11 @@ The field event_id is the deterministic deduplication key. The derivation is:
|
|||
EventID(stream, resource, watchType, observedAt) -> string
|
||||
```
|
||||
|
||||
The inputs are the stream identity, the resource reference, the watch type, and the observed time. The same key is recomputed for a redelivered event, for example after a reconnect or a crash before the checkpoint. Re-application is therefore idempotent. This makes at-least-once ingestion safe. See ../consistency/consistency.md for the ingestion guarantee.
|
||||
The inputs are the stream identity, the resource reference, and the watch type. For live watch events the observed time is deliberately excluded: the same underlying API event must always produce the same key, so a duplicate delivery after a reconnect is idempotent. Collector-generated synthetic baselines pass the list observation time, so an unchanged object re-listed after a gap is treated as a new observation rather than a duplicate and survives deduplication. See ../consistency/consistency.md for the ingestion guarantee.
|
||||
|
||||
## object_hash
|
||||
|
||||
The function ObjectHash(objectJSON) returns a fast equality and deduplication hash over the raw object payload. It lets consumers detect that a MODIFIED event did not change the object. It lets the store collapse no-op writes. It is not a cryptographic commitment. Treat it as a performance and equality helper only.
|
||||
The function ObjectHash(objectJSON) returns a fast equality hash over the raw object payload. It lets consumers detect that a MODIFIED event did not change the object. It is not a cryptographic commitment. Treat it as a performance and equality helper only. Deduplication is by event_id, not by object content.
|
||||
|
||||
## Provenance
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue