Skip to content

docs(rfc): rfc 0022 — queryable attribute columns (rfc 0005 amendment) - #343

Merged
jensholdgaard merged 12 commits into
mainfrom
rfc0022-attr-columns
Jul 3, 2026
Merged

docs(rfc): rfc 0022 — queryable attribute columns (rfc 0005 amendment)#343
jensholdgaard merged 12 commits into
mainfrom
rfc0022-attr-columns

Conversation

@jensholdgaard

@jensholdgaard jensholdgaard commented Jul 3, 2026

Copy link
Copy Markdown
Owner

What

RFC 0022 (specified) — queryable attribute columns, the RFC 0005 amendment reserved in §3.3 and tracked by #147. Docs-only: the RFC, a pointer amendment in RFC 0005 §3.3, and the SUMMARY.md entry. No code — implementation holds for maintainer sign-off per §5.3 (same protocol as RFC 0019 / #287).

The design in five lines

  1. Per-key promoted OPTIONAL Utf8 columns, named literally after the DSL path (resource.service.name, attr.http.method) — dict + page-index + bloom. service.name always promoted; the rest opt-in via storage.promoted_attributes (RFC 0020).
  2. Two-arm predicate compile: (P op v) OR (P IS NULL AND json_like_arm). Steady-state files prune via bloom/stats (null-count 0 kills the fallback arm); pre-amendment files answer identically to today's LIKE stopgap via §3.9's missing-column carve-out — the fallback arm is the §3.5 migration plan, no history rewrite.
  3. Full operator set (< <= > >=, =~, !~) on promoted keys only; non-promoted keys keep feat(querier): compile the DSL IR to the execution layer (RFC0002.1/.3/.4/.5/.6) #146's ==/!= LIKE behaviour bit-for-bit.
  4. JSON stays truth: promoted cells are query-only projections — the RFC 0017 read path never reads them (RFC0022.6 forges a divergent cell to prove it's invisible).
  5. Hazard docs: apply RFC maturity-model amendments #2 handled by telemetry, not truncation — projections are byte-faithful or NULL; per-column byte counters via the weaver registry.

Rejected alternatives (§4)

MAP<STRING,STRING> (the §3.3 sketch — map stats/bloom aren't key-scoped, prunes nothing), full flattening (schema explosion), name mangling (collisions + leaked names; literal dots only require unqualified-column construction), query-time JSON UDFs (no pruning), and a cutover backfill (fallback arm makes it unnecessary; compaction converges history for free).

Acceptance (§5, seven scenarios)

Projection semantics (.1/.2), old-file result parity (.3), operator gating (.4), pruning via the RFC 0016 scanned/pruned counters (.5, deterministic in the rfc0007_1_* shape + indicative bench), read-path blindness (.6), and promoted-set drift across deploys (.7).

Closes nothing yet — #147 closes when the ladder completes.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Added a new RFC introducing queryable attribute columns via a promoted typed-column set.
    • Updated the existing storage RFC to reflect the new intended approach and current schema guidance.
    • Expanded the RFC index to include the newly added RFC.

Discharges the typed-attribute reservation in RFC 0005 §3.3 (#147):
the RFC 0002 DSL's service / resource.<key> / attr.<key> predicates
are the concrete consumer, currently served by an unpruned LIKE over
the canonical-JSON columns (#146).

Design: per-key promoted OPTIONAL Utf8 columns named literally after
the DSL path (service.name always promoted; the rest via an RFC 0020
storage.promoted_attributes knob), dict + page-index + bloom encoded.
Predicates on promoted keys compile to a two-arm expression — typed
column (full cmp_op set, prunable) OR (IS NULL AND the existing JSON
LIKE arm) — which keeps pre-amendment files and non-string values
answering identically to today with no history rewrite (§3.5
migration plan = §3.9 additive OPTIONAL + the fallback arm). JSON
columns stay the source of truth; the RFC 0017 read path never
consumes promoted cells. MAP<STRING,STRING> rejected (no key-scoped
stats/bloom → no pruning).

Status `specified` (full §5, seven scenarios; RFC0022.5 uses the
RFC 0016 scanned/pruned counters as its pruning oracle). Includes the
RFC 0005 §3.3 pointer amendment and the SUMMARY.md entry; no schema
bytes change until the red/green slices.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jensholdgaard
jensholdgaard requested a review from Copilot July 3, 2026 12:16
@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jensholdgaard, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a999772a-6f51-4c9d-9d75-23b05f47c120

📥 Commits

Reviewing files that changed from the base of the PR and between 6119525 and a0f0036.

📒 Files selected for processing (1)
  • docs/rfcs/0022-queryable-attribute-columns.md
📝 Walkthrough

Walkthrough

Adds RFC 0022 for queryable promoted attribute columns, updates RFC 0005 to reflect the new promoted-column approach, and links the RFC from the docs summary index.

Changes

RFC 0022 documentation

Layer / File(s) Summary
RFC 0005 amendment and index link
docs/rfcs/0005-parquet-storage.md, docs/SUMMARY.md
Adds a 2026-07-03 amendment to RFC 0005 and adds an RFC 0022 entry in the docs summary.
RFC 0022 scope, schema, and configuration
docs/rfcs/0022-queryable-attribute-columns.md
Introduces RFC 0022 front-matter, scope, promoted column rules, and the storage.promoted_attributes configuration surface.
Predicate compilation, pruning, and telemetry
docs/rfcs/0022-queryable-attribute-columns.md
Defines typed-vs-JSON predicate handling, pruning behavior, hazards, and projected-size telemetry.
Alternatives, acceptance criteria, and references
docs/rfcs/0022-queryable-attribute-columns.md
Documents rejected alternatives, acceptance scenarios, testing strategy, open questions, and supporting references.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related issues

Possibly related PRs

  • jensholdgaard/ourios#166: Both changes touch RFC 0005’s BYTE_ARRAY Parquet semantics and how JSON payloads remain the source for fallback predicate behavior.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description has rich content, but it does not follow the required Summary/Related/Checklist template and omits the checklist. Add the required Summary, Related, and Checklist sections, and include the checklist items for fmt, clippy, tests, docs/CHANGELOG, and RFC link.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is specific and matches the main docs-only RFC 0022 amendment.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch rfc0022-attr-columns

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new “specified” RFC (RFC 0022) that amends the RFC 0005 Parquet storage design to support queryable/pruneable per-attribute columns, aligning storage with the RFC 0002 DSL’s service / resource.<key> / attr.<key> predicates (tracked by #147). It’s a docs-only change intended to be reviewed/signed off before implementation.

Changes:

  • Added RFC 0022 describing promoted per-key OPTIONAL Utf8 columns (plus compile-time fallback semantics) to enable pruning and a fuller operator set for promoted keys.
  • Amended RFC 0005 §3.3 to explicitly point at RFC 0022 as the discharge of the previously reserved typed-attribute amendment.
  • Registered RFC 0022 in the mdBook table of contents.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
docs/SUMMARY.md Adds RFC 0022 to the RFC index so it appears in the rendered book navigation.
docs/rfcs/0022-queryable-attribute-columns.md Introduces the RFC 0022 specification (schema projection rules, predicate compilation strategy, hazards/telemetry, acceptance criteria).
docs/rfcs/0005-parquet-storage.md Adds an in-place amendment note referencing RFC 0022 as the fulfillment of the reserved §3.3 future change.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/rfcs/0022-queryable-attribute-columns.md`:
- Around line 132-137: The fenced pseudo-code block in the RFC is missing a
language label, which triggers markdownlint MD040. Update the fenced block
around match_expr(op, v) to use a text-style language tag so the documentation
remains lint-clean, and keep the content and surrounding explanation unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9351a1fc-a249-4143-a4c9-926f1039f25f

📥 Commits

Reviewing files that changed from the base of the PR and between de52ce8 and da1ba17.

📒 Files selected for processing (3)
  • docs/SUMMARY.md
  • docs/rfcs/0005-parquet-storage.md
  • docs/rfcs/0022-queryable-attribute-columns.md

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0005-parquet-storage.md Outdated
The promoted-bytes counter follows the existing
ourios.storage.parquet.* semconv namespace, and the RFC 0005 pointer
note now says schema bytes change at green (red is failing stubs only).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
…t ordering

storage.promoted_attributes doesn't exist in RFC 0020's strict schema
today; name it as an extension and call out upgrade-before-config-change
(unknown keys are startup errors).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Ordering/regex compile to the typed arm only (the JSON arm can't
express them); pre-amendment files silently non-match those operators
— stated explicitly, and RFC0022.4 now asserts it across an
old+new-file scan.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
…ic name, prose

- name the exact DataFusion construction for dotted column names
  (Expr::Column(Column::new_unqualified(...)); col() parses qualified)
- rename the telemetry instrument to ourios.storage.parquet.promoted.size
  per OTel semconv (units in metadata, not names; mirrors file.size) —
  verified via the OTel MCP
- state service.name precisely (Required/Stable identity attribute of
  the service resource entity), and fix the §3.3 sentence fragment

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
§3.4 and RFC0022.7 now say *configured* promoted set explicitly; the
implicit service.name promotion cannot be disabled.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md
…y id

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
…not bare equality

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
…ical type

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
… only

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
Comment thread docs/rfcs/0022-queryable-attribute-columns.md Outdated
… spelled out

http.status_code is commonly an int AnyValue, which projects NULL —
swapped examples to http.request.method / http.route and rewrote §7's
numeric-promotion question to distinguish string-encoded numbers from
true numeric AnyValues (which need typed promotion to participate).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

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.

2 participants