Skip to content

docs: capabilities.md — canonical tiered support matrix - #56

Merged
Kiran01bm merged 1 commit into
mainfrom
kiran01bm/docs-capabilities
Aug 23, 2026
Merged

docs: capabilities.md — canonical tiered support matrix#56
Kiran01bm merged 1 commit into
mainfrom
kiran01bm/docs-capabilities

Conversation

@Kiran01bm

Copy link
Copy Markdown
Collaborator

Summary

Adds docs/capabilities.md — the canonical, TOC'd support matrix answering the three questions users actually ask: does pg-sprite support this change, what is pg-sprite and why does it exist, and what does it deliberately not do. Every operation and object type lands in exactly one of three tiers, with the reason stated.

What

  • The three-tier support model: T1 supported today · T2 planned (a typed refusal today, never a silent fallback) · T3 out of scope by design — with the invariant that every T2 row is a tracked plan and T3 rows deliberately have none.
  • The two front doors called out explicitly: imperative (migrate --alter) has the broadest coverage — FK/CHECK via NOT VALID + VALIDATE, PK/UNIQUE via CIC + USING INDEX, SET NOT NULL via the four-step validated-CHECK flow, DROP INDEX/REINDEX via CONCURRENTLY — while the declarative model is deliberately narrower (partitions, FKs both directions, unlogged, collations, non-owned sequence defaults refuse). Every matrix row was verified against pkg/planner and pkg/schemadiff on main, not written from memory.
  • Per-family matrices: column changes, constraints, indexes, partitioned tables, the declarative model, types and non-table objects, data and whole-table operations.
  • "Peers share these limits — for different reasons": imperative executors never face the question, pgroll's raw-SQL escape hatch is passthrough-not-support, planners have breadth because they don't own execution under load.
  • "Why typed refusal, not passthrough": the weighed decision — the exit-code contract (0 = ran through an online-safe path) is the product; the naive bypass stays rejected, and a constrained lock-budgeted variant (explicit flag, refusal analysis still printed, bounded lock budgets, verdict unmistakably marked) is recorded as planned.
  • Cross-wiring: AGENTS.md capability statement now names capabilities.md as canonical (and requires updates in the same PR as any capability change), README's "What pg-sprite does not do yet" and docs/README.md index point at it, limitations.md is repositioned as the refusal-mechanics page.

Why

Support questions ("does pg-sprite handle X?") currently route to a scatter of README bullets, limitations.md, and tribal knowledge — and the answer differs by front door, which nothing stated. One canonical page makes the scope legible to external users and gives refusal messages and release notes a stable target. A support question this page cannot answer is a bug in this page.

One page answering "does pg-sprite support X?": every operation and
object type tiered as supported today / planned (typed refusal now) /
out of scope by design, with reasons; how peers draw the same lines for
different reasons; why the engine refuses instead of passing through.
AGENTS.md capability statement, README, docs index, and limitations.md
now point at it as the canonical matrix.
@Kiran01bm
Kiran01bm marked this pull request as ready for review August 22, 2026 08:45
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@Kiran01bm
Kiran01bm merged commit c6a10e6 into main Aug 23, 2026
8 checks passed
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