Skip to content

G6 (kind deploy smoke) is shipped — stop listing it as a gap - #534

Merged
brentrager merged 1 commit into
mainfrom
docs-g6-closed
Aug 23, 2026
Merged

G6 (kind deploy smoke) is shipped — stop listing it as a gap#534
brentrager merged 1 commit into
mainfrom
docs-g6-closed

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

docs/Planning/Feature Gaps.md still says of G6: "we only helm lint/helm template", and prescribes building a kind-based CI job.

That job exists. .github/workflows/pr-kind-deploy-smoke.yml does exactly what G6 specified — helm install into an ephemeral kind cluster, then the protocol smoke against the live pod — and it ran green on #526 today.

A gap doc that is stale in the closed direction is worse than one that is merely incomplete: an incomplete doc omits work, a stale-closed one actively argues for rebuilding something that already ships. Someone reading the priority list would have picked up G6 next.

So this marks G6 done, drops it and G8 from the "next increments" list (G8 rerank and G3 access control were already marked ✅ in their own entries but never removed from the priority order), and adds the standing rule to the G6 entry: when you close a gap here, edit this file in the same PR.

Context

Found while answering "what are we missing feature-wise versus Onyx?" — this document is that comparison, benchmarking "mature knowledge platforms" without naming them. It's the right doc for the question, which makes its accuracy load-bearing.

Remaining genuinely-open gaps, for the record: G1 connectors/ingestion (the big one — 50+ connectors is what "knowledge platform" means to a buyer), G2 chunking, G4 quality regression, G5 widget e2e, G7 multi-tenancy, G9 connector mock.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NuqyQWN9ma2YSrB28ssSoc

pr-kind-deploy-smoke.yml runs the exact job G6 specified: helm install
into an ephemeral kind cluster, then the protocol smoke against the live
pod. Observed green on #526 today. The entry still claimed we only run
helm lint/template.

A gap doc that is stale in the CLOSED direction is worse than one that
is merely incomplete — it argues for building something that exists. So
the entry now also says to edit this file in the same PR that closes a
gap, and the priority list drops the two items already done.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@changeset-bot

changeset-bot Bot commented Aug 23, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 5f080ea

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@brentrager
brentrager merged commit 97000ec into main Aug 23, 2026
1 check passed
brentrager added a commit that referenced this pull request Aug 23, 2026
…ished work

#534 landed because §G6 claimed "we only helm lint" after the kind
deploy-smoke job had shipped. §5's priority list had the same rot: item 1 still
named G3 as the highest-severity next increment, and item 4 pointed at G2/G9 by
bare letter.

Items 1 and 2 are struck (G3 and G1 shipped). Item 4 now names the specific
remainders rather than the letters — G2's chunker is done and its format
extraction is not; G9's mock and credential-free tier are done and the nightly
that would run the gated external tier does not exist. "G2 is done" and "G2's
chunker is done, format extraction isn't" send whoever picks this up to very
different places.
brentrager added a commit that referenced this pull request Aug 23, 2026
…ipped (#535)

* g1: fence the ingest→ACL chain at the pipeline seam, and mark G1/G2/G9 shipped

G1's implementation already landed (315841c and follow-ups): the `Connector`
seam, `MockConnector`, the file/web/github connectors, the chunker, incremental
indexing. `docs/Planning/Feature Gaps.md` was never updated to say so, so §G1,
§G2 and §G9 still read as open gaps while G3 and G8 carry ✅ markers. That is how
a second agent gets sent to build what exists.

The one real hole underneath the stale doc: the guarantee that a connector's ACL
survives ingestion was asserted end to end in exactly one place —
`github_connector.rs::custom_group_gates_retrieval_end_to_end`. That is a
connector test. Rewrite or delete the GitHub connector and the ingest half of G3
loses its only fence, with `ingestion_contract.rs` still green.

`ingested_acls_gate_retrieval_for_every_connector` asserts the same chain at the
pipeline seam over a `MockConnector`, so it binds every connector present and
future: a doc ingested for `group-eng` is readable by a principal carrying that
group and returns nothing for `group-fin` or anonymous, while a doc with no ACL
stays org-public. Each negative is paired with the entitled-principal positive
control on the same query — "nothing leaked" must not be satisfiable by a
pipeline that stored nothing, which is a failure mode this repo has shipped.

Red before green: with `DocAcl::for_groups(...).attach_to(document)` reverted in
pipeline.rs the new test fails with `group-fin must not read the group-eng doc,
got 1 hits` — the exact G3 cross-user leak — while the pre-existing contract test
stays green, which is what kept the gap invisible.

The doc now records what shipped, plus what the ✅ does not cover: `pull` returns
`Vec<RawDocument>` rather than the planned `Stream<Document>`, which materializes
a whole source per pull and should be re-shaped before Confluence/Jira rather
than after (it is a breaking trait change); format extraction (PDF/DOCX) does not
exist ahead of the chunker; and rust.yml has no `schedule:`, so G9's gated
`external` tier is a convention nothing ever executes.

No production behavior changes — one test, one changeset, one doc.

* docs: retire the closed items in §5 so the list stops arguing for finished work

#534 landed because §G6 claimed "we only helm lint" after the kind
deploy-smoke job had shipped. §5's priority list had the same rot: item 1 still
named G3 as the highest-severity next increment, and item 4 pointed at G2/G9 by
bare letter.

Items 1 and 2 are struck (G3 and G1 shipped). Item 4 now names the specific
remainders rather than the letters — G2's chunker is done and its format
extraction is not; G9's mock and credential-free tier are done and the nightly
that would run the gated external tier does not exist. "G2 is done" and "G2's
chunker is done, format extraction isn't" send whoever picks this up to very
different places.

* docs: hand §G2 to #536, and state where ACL enforcement actually lives

g2chunk's #536 wrote the G2 contract suite and it found four silent defects in
the shipped chunker (overlap pushed emitted chunks past max_chars; unspaced
CJK/URL text never spilled; CRLF destroyed paragraph structure; chunks straddled
markdown sections). My §G2 text called the existing unit tests adequate because
they were green and named every rule — which is exactly the reasoning this
document exists to stop. Each of those tests asserted its rule on the one input
shape that never triggers the bug. §G2 reverts to pristine; #536 owns it.

Also corrects my own §G1 bullet. I wrote that an AclKnowledgeStore records and
enforces the ACL, which reads as though the fence is opt-in wrapping. Traced it:
enforcement is adapter-side in all three backends — Postgres parses
DocAcl::ACL_METADATA_KEY at ingest into knowledge_vectors.acl and filters in SQL,
DynamoDB into an acl attribute post-filtered at read, and InMemoryStorageAdapter
already wraps its own knowledge slice. The live admin indexing path passes
state.storage.knowledge() and is fenced by that, not by the caller remembering to
wrap. The pipeline writing the metadata is therefore the one link no adapter
provides for itself, which is what the contract test guards.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant