v2.0 LTS Release: Catalog APIs, CN/PN renaming, fabric positioning, and first batch of docs#168
v2.0 LTS Release: Catalog APIs, CN/PN renaming, fabric positioning, and first batch of docs#168ravi-prakash-v wants to merge 116 commits into
Conversation
Restructure RFC-002 to the standard document format and preserve v2.0.0 architectural guidance aligned with beckn.yaml and docs.beckn.io.
Rename overview to docs/03_Overview.md and restructure content to the standard RFC format while preserving v2.0.0 architecture, actor model, action groups, and transport guarantees.
Release v2.0.0 lts with docs
Merged hotfixes on main to release-v2.0.0-lts
Reordered and updated philosophical principles for clarity and emphasis.
Revised design principles and architecture sections for clarity and consistency.
…ications-v2 into release-v2.0.0-lts
Syncing main with draft
- Filled in Status and Copyright sections - Fixed version history placeholder and editor's draft link - Rebuilt Table of Contents to match actual document structure - Removed all section numbering for consistent heading style - Fixed Definitions/Definition typos and Core principles heading - Normalised SHOULD casing in Core Principles - Moved schema evolution principles from misplaced Defintion sub-section to Core Principles - Fixed Managing Exceptions heading level (#### → ###) - Fixed Keyword Definitions file path in inline reference and References section - Moved orphaned artifact precedence list into Schema authoring section with proper heading - Removed meta-comment sentence from Change management section - Added conformance IDs CON-005-06 through CON-005-10 for description authoring rules - Added Network Actor Definitions section to Keyword_Definitions.md (BAP, BPP, NFH, Fabric, DS, Registry)
…a Organization and JSON-LD Conventions with real beckn/schemas repo content, added CON-005-11 through CON-005-15 to conformance table, fixed TOC entries
Renames: - 01_RFC_Template.md → RFC_Template.md - 02_Design_Philosophy.md → Introduction.md - 03_The_Beckn_Protocol_Stack.md → The_Beckn_Protocol_Stack.md - 06_Beckn_API_Endpoints.md → API.md - 07_Navigating_The_Beckn_Schema.md → Linked_Data_Schema.md Deleted: - 04_Universal_Value_Exchange_Fabric.md - 05_Specification_Authoring_Style_Guide.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- All endpoint descriptions now conform to the six required elements: action statement, preconditions, Fabric context, message envelope, response semantics per response family, and callback relationship. - All schema descriptions now conform to the four required elements: concept statement, lifecycle position, Fabric context where applicable, and relationship to other schemas. - All property descriptions state what the property represents, who assigns it, and any business-rule constraints. - Eliminated all anti-pattern descriptions explicitly called out in RFC-005: Catalog name restatement, Contract structural opening, CatalogPublishAction structural role description, and /confirm missing-precondition description. - Added descriptions to Commitment, Participant, and Settlement which previously had none. - No endpoint paths, schema names, property names, or structural fields changed. - No hyperlinks added (deferred for a future pass). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ctor names - Replace info.description with expanded overview covering Network Actors (BAP/BPP/DS/CS/Registry), Common Preconditions, Request Envelope, Standard Response Families table, Transaction Lifecycle, context.try, and Scope - Strip repeated registry+auth precondition and response-semantics paragraphs from all endpoint descriptions; each now ends with a Response codes: line - Fix all CDS/Catalog Discovery Service references: discover/on_discover and subscription endpoints → DS (Discovery Service); catalog/publish, catalog/pull, and master endpoints → CS (Cataloging Service) - Fix tag descriptions: Catalog Publishing, Catalog Pull, Master Resource Search - Fix schema descriptions: DiscoverAction, OnDiscoverAction, Intent, Catalog, CatalogPublishAction, CatalogSubscription, PullResultFile, and related schemas Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s in RFC template Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Keyword Definitions Remove numbered section prefixes, update NFH description to include prior foundation names, add Network Actor Definitions section to TOC. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove numbered section prefixes, drop RFC-002 prefix from title, restructure TOC to use un-numbered anchor links. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove numbered section prefixes, drop RFC-003 prefix from title, restructure TOC to use un-numbered anchor links. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove RFC-005 prefix from title, fix Conclusion/Acknowledgements/References from h1 to h2, add NFH-005 document ID. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR #168 — Code Reviewv2.0 LTS Release: Catalog APIs, CN/PN renaming, fabric positioning, and first batch of docs OverviewThis is a large, multi-vector change that touches governance, the core YAML specification, and introduces the first normative RFC set. The overall direction is correct and the design improvements are meaningful, but there are several spec-level inconsistencies and one semantic error that need resolution before merge. Governance & Process DocumentsGOVERNANCE.md (+347 lines)
beckn.yaml — API ChangesIssues requiring fixes:
Docs (RFC Set)
SummaryThe design direction is correct and the governance rewrite is a significant improvement. The five issues above (especially the |
Deep Review: NFH-007 (Authentication_and_Trust.md) & NFH-013 (Communication_Protocol.md)NFH-007 — Authentication and TrustIssue 1 — [Authentication_and_Trust.md:251, 255, 337, 339, 383](docs/Authentication_and_Trust.md) — the placeholder name Fix: Rename to Issue 2 — Examples use old [Authentication_and_Trust.md:505, 528, 529, 569, 607, 608, 616](docs/Authentication_and_Trust.md) All three examples use Issue 3 — Two broken cross-references [Authentication_and_Trust.md:16, 648–649](docs/Authentication_and_Trust.md) The document references two files that do not exist in the published docs set:
These will produce dead links immediately upon merge. Both references should either link to the correct published filenames or be removed with a "forthcoming" note. NFH-013 — Communication_Protocol.mdIssue 4 — §3 contains a stale "counter-signature SHOULD" line — directly contradicts NFH-007 MUST [Communication_Protocol.md:155](docs/Communication_Protocol.md):
This line is a pre-PR holdover. The PR explicitly removes Fix: Replace with: "Every synchronous response MUST carry a Issue 5 — Conformance table numbering is out of order [Communication_Protocol.md:438–440](docs/Communication_Protocol.md) The conformance IDs in the table appear as: CON-013-24 and CON-013-25 (DS aggregation and paginated callbacks) appear before CON-013-20 through CON-013-23 in the printed table. The IDs are correct, but the ordering in the table is wrong. Implementers generating conformance reports against this table will have a confusing read order. Fix: Reorder the last 6 rows to CON-013-20, CON-013-21, CON-013-22, CON-013-23, CON-013-24, CON-013-25. Issue 6 — Example 1 Ack body uses wrong schema structure [Communication_Protocol.md:493–505](docs/Communication_Protocol.md) The synchronous Ack example shows: { "message": { "ack": { "status": "ACK" } } }But message:
status: ACK # top-level in message
messageId: ...The Issue 7 — Terminology split: "PN-initiated callback" vs "provider-initiated notification" NFH-013 uses "PN-initiated callback" throughout (definition in §Definitions, §8 header, conformance CON-013-13/14). NFH-007 uses "provider-initiated notification" throughout (§3.3, §4 table, §10.3, conformance CON-004-12, CON-004-19, CON-004-20). These are the same concept but with different names across the two RFCs. Implementers reading both will see two terms with no indication they're the same thing. Fix: Pick one term and use it in both documents. Add a note in whichever document changes: "Also called [other term] in [other RFC]." Issue 8 — Three broken/provisional cross-references [Communication_Protocol.md:17, 167, 462, 635–636](docs/Communication_Protocol.md)
Cross-document InconsistencyIssue 9 — This was flagged in the broader review but it runs through all layers: |
- context.try: tighten README.md and docs/API.md to match beckn.yaml
canonical scope (update and cancel only).
- DiscoverAction: rewrite description to declare legacy snake_case
text_search property removed; structured inputs live under intent.
- NackForbidden, NackNotFound: replace dangling SignatureHeader ref
with AckSignatureHeader to align with all other response components.
- Callback terminology: rename provider-initiated notification to
PN-initiated callback throughout NFH-007 and the OpenAPI doc, so
it matches NFH-013. Update the TOC anchor too.
- NFH-007 examples: rename {bap_signature_value} to {cn_signature_value},
example domains to cn.example.com and pn.example.com.
- NFH-013: drop the stale counter-signature SHOULD line in favour of
the MUST Signature response header tied to NFH-007 §5. Reorder the
conformance table rows so CON-013-20..25 run in sequence. Fix the
Example 1 Ack body to match the Ack schema (no nested ack wrapper).
- docs/API.md: replace the counter-signature language with Signature
response header references pointing at NFH-007 §5.
- Broken cross-refs: retarget links to Identity_and_Addressing.md,
Error_Codes.md, Independent_Workflows.md, and Design_Guide.md at
the draft branch URL with a forthcoming-review annotation.
- GOVERNANCE.md: NFH-006 was misused for the RFC writing guide.
Retarget references to NFH-011 (RFC Template) and NFH-010 (RFC
Authoring Guide). NFH-005 (Design Guide) links retargeted to draft
branch and annotated as forthcoming.
|
Thanks Nirmay. Walking through the list. context.try scope. beckn.yaml ("update and cancel ONLY") is canonical. README.md and docs/API.md updated to match. NFH-013 has no context.try mention; I couldn't locate the diff-line-5767 passage you cited. If you can point me at the rendered line, I'll take another look. DiscoverAction description. Fixed. text_search and textSearch are now described as removed; structured inputs live under intent. AckSignatureHeader on the full response set. Good catch. NackForbidden and NackNotFound moved off plain SignatureHeader. All response components are now consistent with CON-004-02. Catalog items (/catalog/subscription 409, /catalog/push AuthorizationHeader). Leaving these for @anandp504 since they are catalog-specific design calls. Pinged him in a separate comment below. NFH-007. {bap_signature_value} renamed to {cn_signature_value} in §3.3, §6, §7. §9 examples now use cn.example.com and pn.example.com. Broken refs to Identity_and_Addressing.md and Error_Codes.md retargeted to the draft branch with a "drafted, undergoing review" note. NFH-013. Stale "counter-signature SHOULD" in §3 replaced with MUST language tied to NFH-007 §5. Conformance table reordered to CON-013-01..25 sequential. Example 1 Ack body now matches the Ack schema in beckn.yaml (no nested ack wrapper). Error_Codes.md and Independent_Workflows.md links retargeted to the draft branch. Callback terminology. Went with GOVERNANCE.md. Two issues, both fixed. NFH-006 was being used to mean "RFC writing guide", but per docs/README.md NFH-006 is the API endpoints doc. Retargeted: "RFC template" references to NFH-011 (RFC_Template.md), "RFC writing guide" references to NFH-010 (RFC_Authoring_Guide.md). NFH-005 (Design Guide) is not in this PR's set; links kept in place, URL switched to the draft branch with a forthcoming note. On "docs/ contains files numbered 14-25": I can't reproduce this. docs/ on core-v2.0.0-lts-rc3 has only the ten files listed in the PR description. Nothing in the 14-25 range. You may have been on the draft branch. Repushed. Take another pass when you get a chance. |
|
@anandp504, do take a look at these two catalog-endpoint items from Nirmay's review:
Let me know how you'd like to handle these. |
|
All issues raised earlier are fixed. although, I cannot find Anand's notes that you wanted me to review. Authentication_and_Trust.md lines 463–464: Fix: Change to: "A PN sending a PN-initiated callback MUST carry a unique messageId." (matching the style of CON-013-13 in NFH-013). @ravi-prakash-v pls fix a minor nit. |
CON-004-19 and CON-004-20 in NFH-007 read as a noun collision after the earlier provider-initiated to PN-initiated rename. Restructured both rows to match CON-013-13 style: "A PN sending a PN-initiated callback MUST...". Also cleaned up beckn.yaml: dropped the redundant leading "PN " in the AuthorizationHeader and Signature schema descriptions, and renamed the few remaining "PN-initiated notifications" to "PN-initiated callbacks" for terminology consistency with NFH-007 and NFH-013.
…catalog/push auth - Introduce NackConflict schema and response component for HTTP 409, replacing the incorrect NackBadRequest mapping on POST /catalog/subscription. A duplicate subscription is a state conflict, not a malformed request. - Add authentication note to /catalog/push description explaining why it correctly uses AuthorizationHeader rather than CallbackAuthorizationHeader: the CS initiates the push autonomously with no prior DS request to chain. Addresses review comments on PR #168.
Addressing the two review comments — PR #169Both items raised have been addressed in #169: 1.
|
Review Notes — PR #168 Remaining Issues
|
| Listed in API.md | Reality in beckn.yaml |
|---|---|
GET /catalog/subscriptions |
Doesn't exist — correct path is GET /catalog/subscription (same path as POST/DELETE, no trailing s) |
GET|DELETE /catalog/subscription/{subscriptionId} |
Doesn't exist — DELETE operates on /catalog/subscription with a query param, not a path param |
GET /catalog/pull/result/{requestId}/{filename} |
Doesn't exist — async results are delivered via POST /catalog/on_pull callback |
Paths entirely missing from the listing: POST /catalog/push, POST /catalog/on_pull, POST /catalog/search.
A6-2 — "Master resource search" section lists three endpoints that don't exist in beckn.yaml (lines 149–153)
POST /catalog/master/search
GET /catalog/master/schemaTypes
GET /catalog/master/{masterItemId}
None of these paths are defined in api/v2.0.0/beckn.yaml. This section should either be removed or explicitly marked as planned/future until the paths are added to the canonical contract.
A6-3 — Feedback links use stale RFC-006 label instead of NFH-006 (line 18)
All three feedback links (Issues, Discussions, Pull Requests) filter by label%3A%22RFC-006%22. Should be NFH-006.
A6-4 — References section links to old filename (line 188)
./00_Keyword_Definitions.md does not exist. Should be ./Keyword_Definitions.md.
docs/Keyword_Definitions.md (NFH-002)
K-1 — Status field contradicts body text
The header says **Status:** PUBLISHED. The Implementation report, Stress test report, and Conformance impact fields all say "This document is at Initial Draft status." The status header should be Draft.
K-2 — All three feedback links are broken (line 17)
- Issues URL:
label%3A%NFH-002%22— missing the opening%22, produces a malformed URL. Should belabel%3A%22NFH-002%22. - Discussions link: uses
RFC-003label — should beNFH-002. - Pull Requests link: uses
RFC-003label — should beNFH-002.
K-3 — Examples section uses v1 terminology (lines 137–143)
The conformance examples reference search, on_search, and context.bpp_uri. In Beckn v2 the action is discover/on_discover and the field is context.bppUri. Using v1 names in the document that defines normative keywords for v2 sends the wrong signal to implementers reading it as a reference.
K-4 — References section links to old filename (line 157)
./00_Keyword_Definitions.md does not exist. Should be ./Keyword_Definitions.md.
docs/RFC_Authoring_Guide.md (NFH-010)
G-1 — Latest editor's draft URL points to old filename (line 21)
Currently points to NFH-006_RFC_Writing_Guide.md. The actual file on the draft branch is RFC_Authoring_Guide.md. Should be:
https://github.com/beckn/protocol-specifications-v2/blob/draft/docs/RFC_Authoring_Guide.md
G-2 — All three feedback links use stale RFC-006 label instead of NFH-010 (lines 34–43)
The document's own ID is NFH-010. The feedback links still filter by RFC-006 — the ID it carried before renaming.
G-3 — Multiple cross-references to ./Design_Guide.md (NFH-009) which doesn't exist in docs/ (lines 26, 175, 189, 558, 826, 834, 842)
Design_Guide.md is not present in the repository. Authentication_and_Trust.md and Communication_Protocol.md already handle this correctly — they link to the draft-branch URL with the annotation (drafted on 'draft' branch, undergoing review). The same pattern should be applied here.
docs/RFC_Template.md (NFH-011)
T-1 — References section links to old filename (line 134)
./00_Keyword_Definitions.md does not exist. Should be ./Keyword_Definitions.md.
Systemic — 5 REQUIRED-standard docs linked but absent from docs/
RFC_Publication_Summary.md lists the following as Protocol Standard — REQUIRED, but none of the files exist in docs/:
| NFH ID | Missing file | Also linked from |
|---|---|---|
| NFH-003 | The_Beckn_Protocol_Stack.md |
Introduction.md |
| NFH-004 | Core_Data_Schema.md |
Schema_Design_Guide.md |
| NFH-005 | Linked_Data_Schema.md |
Introduction.md, Schema_Design_Guide.md |
| NFH-008 | Error_Codes.md |
— |
| NFH-009 | Design_Guide.md |
RFC_Authoring_Guide.md, Schema_Design_Guide.md |
Authentication_and_Trust.md and Communication_Protocol.md already set the right precedent — they replace bare local links with draft-branch URLs and annotate them (drafted on 'draft' branch, undergoing review). The affected docs (Introduction.md, Schema_Design_Guide.md, RFC_Authoring_Guide.md) should do the same.
Summary
| # | File | Issue | Severity |
|---|---|---|---|
| Y-1 | beckn.yaml |
/catalog/push wrong auth header parameter |
Medium |
| Y-2 | beckn.yaml |
409 response mapped to NackBadRequest |
Medium |
| A6-1 | API.md |
Catalog endpoint list has wrong/missing paths | High |
| A6-2 | API.md |
Master resource search lists 3 non-existent endpoints | High |
| A6-3 | API.md |
Feedback labels use stale RFC-006 |
Low |
| A6-4 | API.md |
Stale 00_Keyword_Definitions.md reference |
Low |
| K-1 | Keyword_Definitions.md |
Status "PUBLISHED" contradicts "Initial Draft" body | Low |
| K-2 | Keyword_Definitions.md |
All 3 feedback links broken / wrong labels | Low |
| K-3 | Keyword_Definitions.md |
Examples use v1 search/on_search/bpp_uri |
Medium |
| K-4 | Keyword_Definitions.md |
Stale 00_Keyword_Definitions.md reference |
Low |
| G-1 | RFC_Authoring_Guide.md |
Editor's draft URL points to old filename | Low |
| G-2 | RFC_Authoring_Guide.md |
Feedback labels use stale RFC-006 |
Low |
| G-3 | RFC_Authoring_Guide.md |
Multiple links to non-existent Design_Guide.md |
Medium |
| T-1 | RFC_Template.md |
Stale 00_Keyword_Definitions.md reference |
Low |
| S-1 | 4 docs + summary index | Local links to 5 REQUIRED docs not present in docs/ |
Medium |
409 Conflict is now used exclusively by NackConflict (duplicate subscription). AckNoCallback represents an accepted-but-no-callback outcome, which aligns with HTTP 202 Accepted. Updates all 11 endpoint response blocks, the standard response families table, and description references in the Error, AckNoCallback, and /catalog/push schemas.
…uth-clarification Add NackConflict for 409; clarify /catalog/push auth header
docs/API.md (NFH-006):
- Catalog endpoint listing rewritten to match beckn.yaml (drops
/catalog/subscriptions and /catalog/subscription/{subscriptionId},
adds /catalog/push, /catalog/on_pull, /catalog/search).
- Master/search section annotated as planned, not yet in the canonical
contract.
- Feedback labels updated RFC-006 -> NFH-006.
- References pointer 00_Keyword_Definitions.md -> Keyword_Definitions.md.
docs/Keyword_Definitions.md (NFH-002):
- Status corrected PUBLISHED -> Draft to match the body, which states
Initial Draft.
- Fixed broken NFH-002 quote-escape in Issues URL; replaced stale RFC-003
labels in Discussions and PR URLs with NFH-002.
- Examples updated to v2 terminology: search -> discover, on_search ->
on_discover, context.bpp_uri -> context.bppUri.
- References pointer 00_Keyword_Definitions.md -> Keyword_Definitions.md.
docs/RFC_Authoring_Guide.md (NFH-010):
- Latest editor's draft URL retargeted to RFC_Authoring_Guide.md.
- Feedback labels updated RFC-006 -> NFH-010.
- All ./Design_Guide.md links retargeted to the draft-branch URL, with a
forthcoming-review annotation at the first occurrence and in
References.
docs/RFC_Template.md (NFH-011):
- References pointer 00_Keyword_Definitions.md -> Keyword_Definitions.md.
docs/Introduction.md:
- NFH-003 (Beckn Protocol Stack) and NFH-005 (Linked Data Schema) links
retargeted to the draft-branch URL with annotation.
docs/Schema_Design_Guide.md (NFH-012):
- References to NFH-003, NFH-004, NFH-005, NFH-009 retargeted to
draft-branch URLs with annotation in the References list and the
Replaces/Relates row.
docs/RFC_Publication_Summary.md:
- Status column corrected for NFH-003, NFH-004, NFH-005, NFH-008, NFH-009
from Protocol Standard REQUIRED to Drafted on draft branch (under
review). URLs retargeted to the draft branch.
|
Thanks for the deeper pass. Y-1, Y-2 (beckn.yaml): addressed by Anand in #169, now merged. Everything else fixed in cdd6c60:
Take another look when convenient. |
|
The beckn.yaml was updated to move AckNoCallback to 202, but Communication_Protocol.md and API.md were not. All 4 occurrences need 409 → 202: Additionally, now that AckNoCallback is on 202, the NFH-013 response table should add a NackConflict row for 409 so the table reflects the full response surface Everything else is clean. Once the above is fixed, the PR is good to merge. |
…NFH-013
Anand's earlier commit moved AckNoCallback from HTTP 409 to HTTP 202 in
beckn.yaml but didn't update the corresponding docs. This commit syncs:
- docs/API.md: AckNoCallback listed at 202 in the standard response
families.
- docs/Communication_Protocol.md (NFH-013):
- Response families table updated 409 -> 202 for AckNoCallback.
- CON-013-09 conformance row updated 409 -> 202.
- FAQ entry contrasting AckNoCallback vs NackDiscretionary updated
to 202.
- Added a NackConflict (409) row to the response families table so it
now reflects the full response surface introduced by PR #169.
|
Done in a7adf7c.
|
nirmay
left a comment
There was a problem hiding this comment.
All the issues raised are now resolved.
Approved
Summary
This PR publishes the Beckn Protocol v2.0 normative specification for the first time — introducing the a first set of RFC documents set alongside API and terminology changes in
beckn.yaml.fabric API - Cataloging Serviceendpoint group added tobeckn.yamlCounterSignaturein the Ack body replaced by aSignatureresponse headerRFC document set (first publication)
API changes (
api/v2.0.0/beckn.yaml)POST /catalog/publish,POST /catalog/on_publish,POST /catalog/push,POST /catalog/subscription,POST /catalog/pull,POST /catalog/on_pull,POST /catalog/searchSignatureresponse header added to all synchronous responses for transport-layer response authenticationbapId,bapUri,bppId,bppUri) retained for backward compatibilitytext_search/textSearchremoved;publishDirectivesremoved from Catalog schema/catalog/master/searchto/catalog/searchwith atypefilter (default:MASTER)Test plan
api/v2.0.0/beckn.yamlvalidates as valid OpenAPI 3.1.1beckn.yamlgrep -rn "CounterSignature" docs/ api/→ 0 resultsgrep -rn "\bBAP\b\|\bBPP\b" api/v2.0.0/beckn.yaml→ 0 results (wire-level field names excepted)docs/README.mdresolve to files present indocs/