docs(spec): editorial clarifications from section 6-8 review - #168
Draft
tnunamak wants to merge 1 commit into
Draft
docs(spec): editorial clarifications from section 6-8 review#168tnunamak wants to merge 1 commit into
tnunamak wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
tnunamak
force-pushed
the
docs/spec-copy-edits-2
branch
from
August 20, 2026 02:47
f371b27 to
df799d6
Compare
Signed-off-by: Tim Nunamaker <tnunamak@gmail.com>
tnunamak
force-pushed
the
docs/spec-copy-edits-2
branch
from
August 20, 2026 03:41
df799d6 to
1b6e6a2
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is a set of narrow editorial edits to
spec-core.mdaddressing spec text that invites misreading — worst case, the "Get stream metadata" endpoint prose reads as if metadata access were ungated (unauthenticated) rather than grant-gated. No normative behavior changes; these are wording, heading-case, and cross-reference fixes.### time constraint semantics->### Time constraint semanticsfor sentence-case consistency with sibling headings.time_range" -> "The selection request'stime_range" to make clear that this resolution happens once, at grant issuance (not on every read).versionfield description now states plainly it tracks this specification's grant schema version, and clarifies there is no external URL to resolve.grant_filter AND request_filter), both where it's defined and in the RS conformance list: clarified in plain language that owner tokens have no grant filter (the effective filter is the request filter alone) and client tokens usegrant_filter AND request_filter. See "Research-backed revisions" below for why this replaced an earlier "identity" framing.active,client_id, andexpare RFC 7662 fields andauthorization_detailsis RFC 9396. See "Research-backed revisions" below for how provenance is now stated (prose, not a table column).instance_ids(StreamGrant): added a concrete example — two connected Gmail accounts are two instances of the same source kind, each with its own instance handle.Skipped: the record-model sentence "The Collection Profile defines the HTTP error for its ingest endpoint" (Section 4, near the RECORD envelope). Checked
spec-collection-profile.mdfirst: it defines no HTTP ingest endpoint at all (record ingest there is a JSONL stdin/stdout process protocol, not HTTP), so there is nothing to relocate this sentence to, and it is not redundant with anything already in that document. Left as-is and flagging for a follow-up decision (either the Collection Profile needs an HTTP ingest error contract, or this sentence should be reworded/removed in a separate change).Research-backed revisions
A follow-up pass checked five spots against prior art in comparable specs and revised them accordingly:
expires_atis now optional-and-absent instead of a nullable type. Changed the grant field table, the TypeScript type, and the "continuous access" example fromISO 8601 or null/string | nullto plainISO 8601/string, with "absent means no expiry." UK Open Banking'sExpirationDateTimeuses the same optional-absent pattern ("If this is not populated, the permissions will be open ended"), and FHIR's convention is to omit absent primitives rather than null them. This also removes a redundant "no value" representation (both absent and null previously meant the same thing).purpose_descriptionnow has one line of phrasing guidance. Added "Clients SHOULD phrase it as a single sentence addressed to the user," matching how OIDC and SMART on FHIR give inline display-copy guidance for user-facing consent text rather than leaving client authors to guess the register.authorization_detailsfield, and this spec's ownpdpp_-prefixed and other extension fields). SMART's scope-table profiles state field provenance this way — prose reads better than a column that's constant for most rows, and keeps the table focused on what implementers actually look up (field name, type, meaning).grant_filter AND request_filter.type." This mirrors the spec's own existing pattern for unrecognized purpose codes (Section 6: clients MUST NOT reject solely because a code is unrecognized) — the error-code table needed the same forward-compatibility guarantee it hadn't yet stated for itself.Test plan
pnpm install --frozen-lockfilepnpm spec:check— passed with no drift (9 canonical pairs, 3 site-only extensions, 1 reference-only root spec)Assisted-by: AI