From e4df05aa7e15441fd990bf6952cdc75d3c4596e2 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Wed, 11 Feb 2026 17:17:28 +0100 Subject: [PATCH 01/24] Increase memory allocation for Cloud Run deployment from 1Gi to 2Gi --- .github/workflows/deploy-cloud-run.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index ba6582dc..b5a746b4 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -88,7 +88,7 @@ jobs: --ingress=internal-and-cloud-load-balancing --port=4321 --startup-probe=httpGet.port=4321,initialDelaySeconds=10,timeoutSeconds=10,periodSeconds=120,failureThreshold=10 - --memory=1Gi + --memory=2Gi --timeout=60 --min-instances=1 --set-env-vars ASTRO_BASE_PATH=${{ env.ASTRO_BASE_PATH }} From dfc9d496a6739972fb390517e04e8b705268003f Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Mon, 23 Feb 2026 14:07:44 +0100 Subject: [PATCH 02/24] Update ServiceDescriptionDocument description for clarity and consistency --- ob_v3p0/common_credentials.lines | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ob_v3p0/common_credentials.lines b/ob_v3p0/common_credentials.lines index df97d15b..0f41cf31 100644 --- a/ob_v3p0/common_credentials.lines +++ b/ob_v3p0/common_credentials.lines @@ -471,7 +471,7 @@ Package SharedApiDataModels DataModel Package SharedApiSecurityDataModels DataModel - Class ServiceDescriptionDocument Unordered false [] "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms." "n:Only a subset of the object properties are shown here." + Class ServiceDescriptionDocument Unordered false [] "The Service Description Document (SDD) is a machine readable document that contains the description of the service features supported by the Provider/Platform. The SDD is an OpenAPI 3.0 (JSON) [[OPENAPIS-3.0]] structured document that MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided with this specification. This profiled version contains all of the details about the supported set of service end-points, the supported optional data fields, definitions of the proprietary data fields supplied using the permitted extension mechanisms, definitions of the available proprietary endpoints, and information about the security mechanisms." "n:Only a subset of the object properties are shown here." Property openapi String 1 "This string MUST be the semantic version number of the OpenAPI Specification version that the OpenAPI document uses. The openapi field SHOULD be used by tooling specifications and clients to interpret the OpenAPI document. This is not related to the API info.version string." Property info OpenApiInfo 1 "Information about the API and the [=resource server=]." "n:The proprietary fields `x-imssf-image` and `x-imssf-privacyPolicyUrl` are found here." Property components OpenApiComponents 1 "Holds a set of reusable objects for different aspects of the OAS." "n:The proprietary field `x-imssf-registrationUrl` is found in the `securitySchemes` components." From 7da600e500b31b8b7ff457493cff4ed4bddf1438 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Mon, 23 Feb 2026 14:08:08 +0100 Subject: [PATCH 03/24] Fix formatting of OpenBadgeCredential example in docformat.md --- ob_v3p0/microsites/spec/docformat.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ob_v3p0/microsites/spec/docformat.md b/ob_v3p0/microsites/spec/docformat.md index e30a82fe..3908d9e8 100644 --- a/ob_v3p0/microsites/spec/docformat.md +++ b/ob_v3p0/microsites/spec/docformat.md @@ -8,7 +8,7 @@ ## Example: Sample OpenBadgeCredential file contents -```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class preventAdditionalProperties=true" +```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class preventAdditionalProperties=true { "@context": [ "https://www.w3.org/ns/credentials/v2", From 68a55a7cf58b99b56087d3f1122f3bd1dfa7602e Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Wed, 25 Feb 2026 10:35:26 +0100 Subject: [PATCH 04/24] Update errata document to correct typography errors and increment version to 3.0.4 --- ob_v3p0/errata/errata.md | 9 +++++++++ ob_v3p0/errata/ob_err_v3p0.html | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ob_v3p0/errata/errata.md b/ob_v3p0/errata/errata.md index 16c7d909..fb62a79d 100644 --- a/ob_v3p0/errata/errata.md +++ b/ob_v3p0/errata/errata.md @@ -26,12 +26,14 @@ Previous versions of the context file will remain accessible, in order to keep b #### version 3.0.3 + - `@id` of `image` in `Achievement` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` - `@id` of `achievement` in `AchievementSubject` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievement` - `@id` of `image` in `AchievementSubject` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` - `@id` of `image` in `Profile` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` #### version 3.0.2 + - Added `@protected` to all `@context`. - `"@type": "xsd:string"`` was removed where it appears. This is the default type, but in rare cases, processing systems handle an explicit declaration of this type differently from allowing the default. For VCs, it is considered more reliable to just allow the default to be applied. - `id` and `type`` aliases are redeclared in every context. This avoids a narrow type of attack where somebody might place a context that redeclares these terms in between the top layer and a class-specific layer of a credential, changing the values of these terms within the class implementation. @@ -72,3 +74,10 @@ algorithm to use in Open Badges. Concretely, it stated: This statement may not follow the security requirements of the future as the securing mechanisms evolve over time. Therefore, the specific list of allowed proof formats have been extracted out the [[[OB-CERT-30]]]. + +### Typography Errors + +Section [B.4.1 Service Description Document](https://www.imsglobal.org/spec/ob/v3p0#servicedescriptiondocument) +contains an extra `provided` in its description: + +> ...profiled version of the OpenAPI 3.0 (JSON) file _provided provided_ with this specification... diff --git a/ob_v3p0/errata/ob_err_v3p0.html b/ob_v3p0/errata/ob_err_v3p0.html index dc797508..8932d1fb 100644 --- a/ob_v3p0/errata/ob_err_v3p0.html +++ b/ob_v3p0/errata/ob_err_v3p0.html @@ -37,9 +37,9 @@ specNature: 'informative', // spec nature is "normative" or "informative" specType: 'errata', // spec type is "main", "cert", "impl", "errata" or other agreed upon string specVersion: '3.0', - docVersion: '1.3', + docVersion: '1.4', specStatus: "Final Release", - specDate: 'July 17, 2024', + specDate: 'February 25, 2026', contributors: _contributors, localBiblio: _localBiblio } @@ -108,6 +108,14 @@

Revision History

Fixed typography errors in the errata document. + + Version 3.0 Final + 1.4 + February 25, 2026 + + Added typography errors in the errata document. + + From a994adbbbf66cb93755f021c1a582dbe3b3bdb42 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Thu, 2 Apr 2026 18:21:12 +0200 Subject: [PATCH 05/24] Changed multiplicity of accreditations to 0..* --- extensions/issuerAccreditationExtension/v2p0/index.html | 9 +++++++-- .../v2p0/ob-accred_v2p0.lines | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/extensions/issuerAccreditationExtension/v2p0/index.html b/extensions/issuerAccreditationExtension/v2p0/index.html index d665ee8e..49424ec4 100644 --- a/extensions/issuerAccreditationExtension/v2p0/index.html +++ b/extensions/issuerAccreditationExtension/v2p0/index.html @@ -22,11 +22,11 @@ specTitle: "Open Badges Issuer Accreditation Extension", shortName: "ob-accred", specStatus: "Base Document", - specDate: "July 24th, 2024", + specDate: "April 2nd, 2025", specVersion: "2.0", specNature: "normative", specType: "spec", - docVersion: "1.0", + docVersion: "1.1", contributors: _contributors, localBiblio: _localBiblio, skipCertGuideConformanceRef : true, @@ -216,6 +216,11 @@

Version History

July 24th, 2024 Initial release. + + Base Document 1.1 + April 2nd, 2025 + Set multiplicity of accreditations to 0..*. + diff --git a/extensions/issuerAccreditationExtension/v2p0/ob-accred_v2p0.lines b/extensions/issuerAccreditationExtension/v2p0/ob-accred_v2p0.lines index 9dfae0e4..914ac4a7 100644 --- a/extensions/issuerAccreditationExtension/v2p0/ob-accred_v2p0.lines +++ b/extensions/issuerAccreditationExtension/v2p0/ob-accred_v2p0.lines @@ -3,7 +3,7 @@ Model ob-accred 2024-09-12 2.0 "s:IMS Base Document" "t:Open Badges Issuer Accre Package MainClasses DataModel Class IssuerAccreditationProfile Unordered false [] "Profile extension with accreditation information." - Property accreditations AccreditationProfile 0..1 "d:listing of accreditations." + Property accreditations AccreditationProfile 0..* "d:listing of accreditations." Class AccreditationProfile Unordered false [] "Profile extension with detailed information about an accrediting organization." Property type IRI 1 "d:MUST be the IRI 'AccreditationProfile'." From 5363de38692ba0c4f6d6995b2fcb55186669c568 Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 13:03:47 -0400 Subject: [PATCH 06/24] Delete docs directory --- docs/context.json | 41 - .../OB3_ACG_DynamicClientRegistration.svg | 1 - docs/images/OB3_ACG_ObtainingTokens.svg | 1 - docs/images/OB3_Architecture.svg | 1 - .../figure01-openbadges-2.0-diagram.png | Bin 40039 -> 0 bytes .../figure02-openbadges-3.0-diagram.png | Bin 42751 -> 0 bytes ...figure03-skill-assertion-with-evidence.png | Bin 86314 -> 0 bytes ...igure04-defined-achievement-with-skill.png | Bin 114575 -> 0 bytes docs/images/ob30-concept.png | Bin 33425 -> 0 bytes docs/index.html | 4 - docs/ob_v3p0.html | 5040 ----------------- 11 files changed, 5088 deletions(-) delete mode 100644 docs/context.json delete mode 100644 docs/images/OB3_ACG_DynamicClientRegistration.svg delete mode 100644 docs/images/OB3_ACG_ObtainingTokens.svg delete mode 100644 docs/images/OB3_Architecture.svg delete mode 100644 docs/images/figure01-openbadges-2.0-diagram.png delete mode 100644 docs/images/figure02-openbadges-3.0-diagram.png delete mode 100644 docs/images/figure03-skill-assertion-with-evidence.png delete mode 100644 docs/images/figure04-defined-achievement-with-skill.png delete mode 100644 docs/images/ob30-concept.png delete mode 100644 docs/index.html delete mode 100644 docs/ob_v3p0.html diff --git a/docs/context.json b/docs/context.json deleted file mode 100644 index c504c798..00000000 --- a/docs/context.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "@context" : { - "id" : "@id", - "type" : "@type", - - "obi" : "https://purl.imsglobal.org/spec/ob/vocab#", - "xsd" : "http://www.w3.org/2001/XMLSchema#", - - "dtAssertion" : "obi:dtAssertion", - "dtBadgeConnectAPI" : "obi:dtBadgeConnectAPI", - "dtProfile" : "obi:dtProfile", - "dtStatus" : "obi:dtStatus", - "dtStatusResponse" : "obi:dtStatusResponse", - - "dtCompactJWS" : { "@id" : "obi:dtCompactJWS", "@type" : "xsd:string" }, - "dtIRI" : { "@id" : "obi:dtIRI", "@type" : "xsd:normalizedString" }, - "dtURL" : { "@id" : "obi:dtURL", "@type" : "xsd:anyURI" }, - - "apiBase" : "obi:dtURL", - "assertion" : "obi:dtAssertion", - "assertions" : { "@id" : "obi:dtAssertion", "@container" : "@set" }, - "authorizationUrl" : "obi:dtURL", - "badgeConnectAPI" : { "@id" : "obi:dtBadgeConnectAPI", "@container" : "@set" }, - "error" : { "@id" : "obi:error", "@type" : "xsd:string" }, - "image" : { "@id" : "obi:image", "@type" : "xsd:anyURI" }, - "name" : { "@id" : "obi:name", "@type" : "xsd:string" }, - "privacyPolicyUrl" : "obi:dtURL", - "profile" : "obi:dtProfile", - "registrationUrl" : "obi:dtURL", - "scopesOffered" : { "@id" : "obi:scopesOffered", "@type" : "xsd:anyURI", "@container" : "@set" }, - "signedAssertion" : "obi:dtCompactJWS", - "signedAssertions" : { "@id" : "obi:dtCompactJWS", "@container" : "@set" }, - "status" : "obi:dtStatus", - "statusCode" : { "@id" : "obi:statusCode", "@type" : "xsd:integer" }, - "statusText" : "obi:StatusTextEnumDType", - "termsOfServiceUrl" : "obi:dtURL", - "tokenRevocationUrl" : "obi:dtURL", - "tokenUrl" : "obi:dtURL", - "version" : { "@id" : "obi:version", "@type" : "xsd:string" } - } -} diff --git a/docs/images/OB3_ACG_DynamicClientRegistration.svg b/docs/images/OB3_ACG_DynamicClientRegistration.svg deleted file mode 100644 index 8fbdb205..00000000 --- a/docs/images/OB3_ACG_DynamicClientRegistration.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/OB3_ACG_ObtainingTokens.svg b/docs/images/OB3_ACG_ObtainingTokens.svg deleted file mode 100644 index 4ff8562f..00000000 --- a/docs/images/OB3_ACG_ObtainingTokens.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/OB3_Architecture.svg b/docs/images/OB3_Architecture.svg deleted file mode 100644 index 0d294716..00000000 --- a/docs/images/OB3_Architecture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/images/figure01-openbadges-2.0-diagram.png b/docs/images/figure01-openbadges-2.0-diagram.png deleted file mode 100644 index 8d0dd9f9474e305ce858950ebff45e1e041d71f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40039 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

mt-Qem3?Pxy_6PZq7{j_om@U@RUkGq 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 Y1kqlG5Ec=DLv%n(Ltnki_@% diff --git a/docs/images/figure02-openbadges-3.0-diagram.png b/docs/images/figure02-openbadges-3.0-diagram.png deleted file mode 100644 index 8036e6b0cde28c1e3e3cb027ec80f2a78021608c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42751 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 diff --git a/docs/images/figure04-defined-achievement-with-skill.png b/docs/images/figure04-defined-achievement-with-skill.png deleted file mode 100644 index 7463e3396c8acb3b2fb511684edec801bbdc9d65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114575 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 diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 1fee4cc5..00000000 --- a/docs/index.html +++ /dev/null @@ -1,4 +0,0 @@ - - Hello -

Hello

- \ No newline at end of file diff --git a/docs/ob_v3p0.html b/docs/ob_v3p0.html deleted file mode 100644 index 384ebca0..00000000 --- a/docs/ob_v3p0.html +++ /dev/null @@ -1,5040 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -Open Badges Specification 3.0 - IMS Base Document - - - - - - - -
-
-

Open Badges Specification

- -
-
- IMS Base Document
Spec Version 3.0 -
IMS Base Document - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Document Version:0
Date Issued:10 March 2022
Status:This document is for review and comment by IMS Contributing Members.
This version:https://www.imsglobal.org/spec/ob/v3p0/main/
Latest version:https://www.imsglobal.org/spec/ob/latest/main/
Errata:https://www.imsglobal.org/spec/ob/v3p0/errata/
Issue Tracker - https://github.com/IMSGlobal/openbadges-specification/issues -
-

IPR and Distribution Notice

-

- Recipients of this document are requested to submit, with their - comments, notification of any relevant patent claims or other - intellectual property rights of which they may be aware that might be - infringed by any implementation of the specification set forth in this - document, and to provide supporting documentation. -

-

- IMS takes no position regarding the validity or scope of any - intellectual property or other rights that might be claimed to pertain - implementation or use of the technology described in this document or - the extent to which any license under such rights might or might not be - available; neither does it represent that it has made any effort to - identify any such rights. Information on IMS's procedures with respect - to rights in IMS specifications can be found at the IMS Intellectual - Property Rights webpage: - - http://www.imsglobal.org/ipr/imsipr_policyFinal.pdf . -

-

- The following participating organizations have made explicit license - commitments to this specification: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Org nameDate election madeNecessary claimsType
Concentric SkyOctober 24, 2019NoRF RAND (Required & Optional Elements)
Digital KnowledgeOctober 11, 2019NoRF RAND (Required & Optional Elements)
Washington State Board for Community and Technical Colleges (WSBCTC)October 4, 2019NoRF RAND (Required & Optional Elements)
CredlyOctober 3, 2019NoRF RAND (Required & Optional Elements)
-

- Use of this specification to develop products or services is governed by - the license with IMS found on the IMS website: - - http://www.imsglobal.org/speclicense.html. -

-

- Permission is granted to all parties to use excerpts from this document - as needed in producing requests for proposals. -

-

- The limited permissions granted above are perpetual and will not be - revoked by IMS or its successors or assigns. -

-

- THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND - IN PARTICULAR, ANY WARRANTY OF NONINFRINGEMENT IS EXPRESSLY DISCLAIMED. - ANY USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE - IMPLEMENTER'S OWN RISK, AND NEITHER THE CONSORTIUM, NOR ANY OF ITS - MEMBERS OR SUBMITTERS, SHALL HAVE ANY LIABILITY WHATSOEVER TO ANY - IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES OF ANY NATURE WHATSOEVER, - DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS SPECIFICATION. -

-

- Public contributions, comments and questions can be posted here: - - http://www.imsglobal.org/forums/ims-glc-public-forums-and-resources - . -

-
-
-

- © 2022 IMS Global Learning Consortium, Inc. All - Rights Reserved. -

-

- Trademark information: - http://www.imsglobal.org/copyright.html - -

-
-
- -

Abstract

This is a proposal to recharter the Open Badges Workgroup to develop a new version of the IMS Global Open Badges Specification to align it to the conventions of the W3C Verifiable Credentials Data Model for the use cases of Defined Achievement Claim and a Skill Claim. The credentials that would be produced under this proposal could easily be bundled into Comprehensive Learner Records and Verifiable Presentations. Portability and learner data privacy may be improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model.

- -

1. Introduction

1.1 Audiences

The target readers for this document are:

    -
  • Business Leaders - the people who are responsible for identifying the business case for using verifiable digital credentials and badges
  • -
  • Solution Architects - the people who are responsible for the definition and design of systems, applications, and tools that are to be used to issue, exchange, and verify digital credentials and badges
  • -
  • Product Developers - the people who are adding functionality to issue, exchange, and verify digital credentials
  • -

1.2 Document Set

The Open Badges Specification has several related documents and artifacts shown below. Together they make up the specification.

1.2.1 OpenAPI 3.0 Files for the Badge Connect API

-

The Open API Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service.

-

-- OpenAPI Specification

-

This standard has OpenAPI 3.0 files for the Badge Connect API in both JSON and YAML format:

1.2.2 JSON-LD Context File

-

When two people communicate with one another, the conversation takes place in a shared environment, typically called "the context of the conversation". This shared context allows the individuals to use shortcut terms, like the first name of a mutual friend, to communicate more quickly but without losing accuracy. A context in JSON-LD works in the same way. It allows two applications to use shortcut terms to communicate with one another more efficiently, but without losing accuracy.

-

Simply speaking, a context is used to map terms to IRIs. Terms are case sensitive and any valid string that is not a reserved JSON-LD keyword can be used as a term.

-

-- JSON-LD 1.1

-

This specification includes this JSON-LD Context file:

1.2.3 JSON Schema

This specification includes JSON Schema files for every class in the data model and every payload in the API.

1.3 Conformance Statements

- As well as sections marked as non-normative, all authoring guidelines, - diagrams, examples, and notes in this specification are non-normative. - Everything else in this specification is normative. -

- The key words MAY, MUST, MUST NOT, NOT RECOMMENDED, NOT REQUIRED, OPTIONAL, RECOMMENDED, REQUIRED, SHALL, SHALL NOT, SHOULD, and SHOULD NOT in this document - are to be interpreted as described in - [RFC2119]. -

- An implementation of this specification that fails to implement a - MUST/REQUIRED/SHALL requirement or fails to abide by a MUST NOT/SHALL NOT - prohibition is considered nonconformant. SHOULD/SHOULD NOT/RECOMMENDED - statements constitute a best practice. Ignoring a best practice does not - violate conformance but a decision to disregard such guidance should be - carefully considered. MAY/OPTIONAL statements indicate that implementers - are entirely free to choose whether or not to implement the option. -

- The Conformance and Certification Guide - for this specification may introduce greater normative constraints than - those defined here for specific service or implementation categories. -

1.4 Terminology

    -
  • Achievement Type: A vocabulary which describes the type of achievement.

    -
  • -
  • Alignment: An alignment is a reference to an achievement definition, whether referenced in a resource outside the package or contained within the package.

    -
  • -
  • Claim: A statement about the Credential Subject. A claim may include associated evidence, results, or other metadata regarding a specific achievement, skill or assertion.

    -
  • -
  • client: In a REST API, the client is the actor that initiates the DELETE, GET, or POST request. Also called a Consumer in the IMS Global Security Framework v1.1.

    -
  • -
  • Comprehensive Learner Record (CLR): Set of assertions that can be packaged as a verifiable credential.

    -
  • -
  • Credential Subject: Describes the claims being made by the Verifiable Credential. In the context of Open Badges and CLR is typically an individual but in the case of Open Badges, may be another entity type such as a course, book, or organization. Learners, Organizations and other entities can be explicit subclasses of Credential Subjects for purposes of business rules. [vc-data-model]

    -
  • -
  • Decentralized Identifiers: A type of identifier for people, organizations and any other entity, where each identifier is controlled independently of centralized registries. [did-core] [did-use-cases]

    -
  • -
  • Digital Credential Achievement (DC Achievement): This is the content description of a credential that an assertion references. It contains metadata such as the name of the achievement, description, alignment of skills, etc. An Open Badge asserts a single achievement. A CLR asserts a collection of assertions, each of which asserts a single achievement.

    -
  • -
  • Digital Credential Assertion (DC Assertion): The core of both Open Badges and CLR is the assertion about achievement(s). DC Assertion properties are specific to one learner's achievement and specify metadata such as issuer, date of achievement, expiration data, as well as results and evidence that support the assertion. A Verifiable Credential more broadly asserts a claim about a Credential Subject which can be applied to education and occupational achievements.

    -
  • -
  • Evidence: Information supporting a claim such as a URL to an artifact produced by the Learner.

    -
  • -
  • Issuer: The organization or entity that has made an assertion about a Credential Subject. The issuer of a DC Assertion is the authoritative source for that specific assertion.

    -
  • -
  • Learner: The person who is the subject of the CLR and assertions contained in a CLR.

    -
  • -
  • Badge: A single assertion of an achievement that is packaged as a verifiable credential.

    -
  • -
  • Organization: An organized group of one or more people with a particular purpose. [CEDS]

    -
  • -
  • Person: A human being, alive or deceased, as recognized by each jurisdiction’s legal definitions. [CEDS]

    -
  • -
  • Publisher: The organization or entity issuing the CLR (typically the educational institution or a 3rd-party agent). The publisher is either the issuer or has a trusted relationship with the issuer of all the assertions in the CLR.

    - -
  • -
  • Relying Third-Party: Also referred to as the "verifier" of a VC. This entity requests, verifies, and may consume data being presented.

    -
  • -
  • REST API: A style of web API (Application Programming Interface) loosely based on HTTP methods (DELETE, GET, POST, and PUT) to access resources (e.g. CLRs) via a URL.

    -
  • -
  • Result: Describes a possible achievement result. A result may contain the rubric level that was achieved.

    -
  • -
  • Result Description: Describes a possible achievement result. A result description may contain a rubric.

    -
  • -
  • Rich Skill Descriptor (RSD): A machine readable reference to a description of a skill located at a unique URL. [RSD]

    -
  • -
  • Role: People have roles in organizations for specific periods of time. Roles are a time aware association between a person and an organization. [CEDS]

    -
  • -
  • Rubric: Defines levels associated with the achievement definition (e.g. "approaches", "meets", and "exceeds").

    -
  • -
  • server: In a REST API, the server is the actor that responds to a DELETE, GET, or POST request. Also called a Platform in the IMS Global Security Framework v1.1.

    -
  • -
  • Skill Assertion: An assertion that contains a "skill result."

    -
  • -
  • Verifiable Credential (VC): A tamper-evident credential whose issuer can be cryptographically verified. See [vc-data-model].

    -
  • -
  • Verifiable Presentation (VP): A tamper-evident presentation of one or more Verifiable Credentials of which cryptographic verification can be used to determine the trustworthiness of the authorship of the data. [vc-data-model]

    -
  • -

1.5 Conceptual Model

This conceptual model describes Open Badges concepts and the relationship between those concepts. The data model in appendix § B.2 org.1edtech.ob.v3p0.model below is the normative reference for the classes and properties that are used to implement the concepts.

The conceptual model is targeted for all § 1.1 Audiences, while the data model is targeted for Solution Architects and Product Developers.

In the diagram below, the concepts are shown in gray boxes (e.g. Assertion). Please see § 1.4 Terminology for definitions of the concepts.

Starting with this version of the Open Badges Specification, an Assertion is also a Verifiable Credential (VC) as defined by the Verifiable Credentials Data Model v1.1 specification. The diagram includes labels that show the relationships between VC terminology and Open Badges terminology (e.g. Issuer is identified by the VC "issuer").

- Diagram show the major conceptual components of an Open Badge Verifiable Credential -
Figure 1 Diagram show the major conceptual components of an Open Badge Verifiable Credential
-
    -
  • I, issuer assert a claim about this Credential Subject that may describe an achievement, experience, membership, etc.,
      -
    • The assertion provides the identity of the issuer, issuance date, and instructions on how to cryptographically prove the issuer identity and that the assertion and claim contents have not been tampered with since issuance.
        -
      • The claim must contain a single Credential Subject which identifies the recipient of the Open Badge.
      • -
      • The claim may also contain: evidence of the achievement, and other properties supporting the achievement description.
      • -
      • The Achievement description is described using properties that may be shared with the CLR including, name, description, criteria, etc.
      • -
      -
    • -
    -
  • -
- -

2. Overview

This section is non-normative.

2.1 What is the problem this solves for?

Verifiable Credentials (VCs) are a format that is used to publish a limitless variety of claims about a subject person or other entity, typically through a cryptographic proof. VCs can be collected and delivered as part of a presentation whereby authorship of each VC from the same or multiple issuers can be trusted via cryptographic verification. The presentation can also be cryptographically signed to demonstrate that the holder has assembled and sent the collection of VCs.

These layers of cryptographic proof can provide security and privacy enhancements to Open Badges that are not yet available in version 2.0. Adoption of Verifiable Credentials can increase market penetration and use of Open Badges by addressing market needs for trustworthy machine-ready data to power connected ecosystems in education and workforce. This can unlock the door for Open Badges credentials to be included in a growing number of multi-purpose digital credential wallets entering the market. Stepping further into signed VCs and another associated technology, decentralized identifiers (DIDs), unlocks increased longevity and resilience of Open Badges that can describe achievements even more expressively than they do today.

2.2 What does adopting Verifiable Credentials entail?

This proposal is for a reasonable change to the structure of the Open Badges Assertion class, to adopt the conventions of the Verifiable Credential Data Model. This means that badges issued under the proposed version would not be conformant to all of the existing 2.x data model requirements.

An existing Open Badges Assertion, illustrated in the graphic below, structures its objects like this: -An Assertion identifies a recipient with a "recipient" relationship to an IdentityObject that contains identifying properties. It identifies which badge it represents with a "badge" relationship to a BadgeClass. It identifies its verification information with a "verification" relationship to a VerificationObject. It identifies its issuer with an "issuer" relationship between the BadgeClass and the Issuer.

- Open Badges 2.0 Diagram -
Figure 2 Open Badges 2.0 Diagram
-

The proposed Verifiable Credentials structure depicted below offers the same information with a slightly different structure: A Verifiable Credential identifies its recipient with a "credentialSubject" relationship to a subject class that is identified by an identifier. It identifies its issuer with an "issuer" relationship directly to an Issuer. The Credential claims the subject has met the criteria of a specific BadgeClass (also known by its CLR alias as an "Achievement") with a "hasCredential" relationship to that defined achievement. It identifies its verification information with a "proof" relationship to an instance of a proof that follows a standardized schema.

- Open Badges 3.0 Proposed Diagram -
Figure 3 Open Badges 3.0 Proposed Diagram
-

2.3 Benefits and Opportunities

It can be risky to make breaking changes to a specification used as broadly as Open Badges, but there are a range of benefits to making this move now while the Verifiable Credentials ecosystem is young and growing fast. There are strong use cases for digital credentials for learning and skill achievements across the nexus of education and employment, as we have seen from the broad adoption of Open Badges and the proliferation of industry groups making connections between educational institutions and the employment market around digital credentials. Technical compatibility is in a more favorable position when faced with rapid ecosystem growth than competition between large communities issuing these learning credentials and other communities focused on different market verticals from government identity documents, commercial payments, and international trade, to name a few.

This proposal opens a path forward for a unified concept of digital credentials in the IMS Global community, collapsing the relevant differences between Open Badges and CLR, and addressing a clear set of single achievement use cases with a robust, flexible, and future-proof solution that can easily be integrated with the set-of-multiple credentials use cases familiar to Comprehensive Learner Record.

Below, we present a selection of benefits related to the proposed restructuring of Open Badges, and compare the opportunities opened by becoming compatible with Verifiable Credentials to the limitations that the Open Badges community has encountered with today's version of Open Badges and CLR.

2.3.1 Interoperability with Digital Wallets, Verifiable Presentations, and Learner Experiences

Open Badges as VCs are designed to be issued and offered to learners who may accept them into their digital wallet. Wallets are software that runs on either the web or as a native app on a mobile device or desktop environment. A web wallet is another term to describe the application role known under 2.0 as a "Host". There is an existing and growing ecosystem of deployed technology to support VCs; integration with these becomes possible if Open Badges adopts VCs along the lines of this proposal. For example, a number of generic Verifiable Credential wallet implementations are available from a variety of vendors as native mobile apps. From a wallet, recipients may package their badges along with their other VCs into verifiable presentations. A presentation contains the credentials that the learner wishes to share with a relying party. The digital wallet application digitally signs the presentation using the key of the learner. The verifying third-parties can cryptographically verify that the presentation came unmodified directly from the credential holder as well as the integrity of each of the VCs included in the presentation as credentials signed by each of their respective issuers.

It is possible from a wallet to package credentials into a verifiable presentation in response to a request from a relying party who seeks credentials for a certain purpose. For example, a potential employer seeking to fill an internship role, may need to verify that a student is over 18, has completed a course on communication, and is a current student. A student could use their wallet to package three VCs (driver's license, course completion badge, and student ID) into a presentation that is signed by their private key. When the presentation is sent to the employer's website, the employer can verify that the VCs belong to the student and that the VCs are authentic. Protocols and interoperability around making and fulfilling requests are still at an early stage, but when these technologies are tested in the wild, it would be a good idea to already have educational credentials claim schemas available for the claim types ("defined achievement" and "skill assertion") possible to make with Open Badges.

The growing collection of VC wallets is an example of how adopting a Verifiable Credentials-based approach allows Open Badges to grow in impact and take advantage of existing momentum in the digital credentials space around tooling that is entering the market and heading towards maturity.

2.3.2 Verifiable Credentials Support Increases Learner Data Privacy and Trustworthiness of Open Badges

The W3C Verifiable Credentials Data Model specification describes how technologies can be used to present cryptographically verifiable and tamper-evident claims. Verifiable Credentials (VCs) can be verified through up-to-date and broadly interoperable schemas for verification. This can provide security and privacy enhancements to IMS Global Open Badges that are not available in Open Badges 2.0.

Currently, Open Badges 2.0 data can be verified via either (a) publicly accessible hosted JSON badge data or (b) JWS digitally signed badges with a limited number of algorithms and key types, depending on the verification method chosen by the issuer. In order to keep up with evolving cryptographic standards without taking on the burden of writing cryptographic suites as a community not specializing in that function, adopting Verifiable Credentials proofs allows experts to update algorithms to keep up with improvements to cryptography-breaking processing power.

Publicly hosted badge data has been the preferred method of many Open Badges issuers. This method can risk the privacy of badge recipients who are reliant on the issuers to host their data leaving them with no direct control over its accessibility. There is also the potential that data about individuals is publicly accessible without their knowledge. Most Open Badges don't contain significant amounts of personally identifiable information, but they are subject to correlation. This could lead to on-site identification, email spam, and also cause badges to be correlatable with other personally identifying data on the web.

Hosted badge data is also not tamper-evident since it is hosted on web servers typically as dynamically-generated JSON files populated by queries made to relational databases or static JSON files. This makes the data easy to change without any historic reference or preservation. This can be convenient for issuers but not assuring for relying third-parties seeking to put the data to use. Changes to badge metadata such as criteria, the issuedOn date, and recipient email can reduce the perceived quality of data and reflect incorrect information about the learners' experiences. Digitally signed 2.0 badges provide more assurances and privacy than the hosted badges but are not commonly issued and are not interoperable with VC wallets.

There's been very little evidence that badge JSON data has been readily consumed by machines, but technologies and the education and workforce markets have evolved since Open Badges 2.0 was released 4 years ago. Machine learning and AI uses have expanded alongside blockchain and other decentralized technologies creating opportunity for connecting learners to opportunities, more accurate skills-based hiring, and updated curricula more equitably reflecting the needs of students. The market is demanding that the achievement data be trustworthy. This means that it should be accessible, protected, have integrity, and communicate what was intended including that the issuer and subjects of the data can be authenticated and that the data has not been tampered with since it was issued. Shifting Open Badges to align with the VC conventions to verify learner achievements meets these expectations and provides learners with more agency over their achievement data by giving them immediate access to it for as long as they need it, allowing them to choose which data they share, protecting it, and making it work with other credentials in and outside of education and workforce.

2.3.3 Decentralized Identifiers and Self-Sovereign Identity

With Open Badges up to 2.0, email addresses have been used as identifiers far more commonly than the other available options. This has been problematic because email addresses may be used by more than one person, are often revoked when an individual leaves a job or school, are insecure, and aren't intended to be identifiers. Identifiers in VCs commonly are HTTP-based URLs, follow another scheme of IRI, or take the form of a Decentralized Identifier.

Decentralized identifiers (DIDs) are a type of identifier for people, organizations and any other entity, where each identifier is controlled independently of centralized registries. Each DID can be resolved through an operation described by its particular "DID Method" to reveal a DID document that describes the subject. Whereas previous versions of Open Badges required HTTP(s) identifiers for issuers and typically used email (or rarely URL) identifiers for learners, adoption of the Verifiable Credentials Data Model provides simple conventions for badge issuers and recipients to begin to use DIDs when they desire.

Verification of control of identifiers is an important concept within any type of digital credential, both with respect to the issuer and the subject (recipient) of the credential. For issuers, Open Badges has relied on its own bespoke rules for determining whether a hosted Assertion URL or cryptographic key URL is associated with an issuer profile identified by a particular URL. URLs used for recipient identifiers have no built-in mechanism for authentication. Email and telephone number based recipient identifier authentication are up to the relying party, but there are common methods for performing this task essential to establishing trusted proof of control of credentials presented by a subject.

DIDs typically offer cryptographic proof of control, based on authorized keys or other verification methods expressed in the associated DID Document. While these protocols are not broadly implemented across domains today, the structure provides a forward-looking flexible and extensible mechanism to build the types of protocols needed to connect credentials back to the identities of their issuers and subjects. The Open Badges community may ultimately recommend use of only a small number of these capabilities in early releases or recommend them only for experimental use, like with cryptographic proof methods. But this is still an important step, because there is no reason for the Open Badges community to be closed to interoperability through the protocols being developed for use by the wallets and services coming into being elsewhere by delaying the option to use DIDs for recipient and issuer identifiers.

2.3.4 Aligning Open Badges and CLR with Common Assertion and Achievement Models

As described below, it is possible for Open Badges and CLR to produce coordinated specs particularly if both specs are aligned with Verifiable Credentials. Discussion of the components of individual achievements can occur within the Open Badges workgroup, and discussion of more complex use cases necessitating needs for bundling and association of multiple achievements on behalf of a publisher can occur within the CLR group. The cross-pollination of members of each effort will create opportunities to coordinate and ensure that all important use cases for single assertions and bundles of associated assertions are well-handled. The openness of the Open Badges Specification can be preserved so that the broader community can continue to be aware of and connected to the official developments.

At the core, Open Badges and CLR have similar objectives with the primary difference being single vs a collection of credentials. A common assertion model ensures that Open Badges can be included in CLR collections and that both CLRs and Open Badges can be held separately by learners in their Verifiable Credential wallets.

Both Open Badges and CLR make assertions about achievements and conceptually share many similar properties. With some judicious analysis and renaming of some properties, it is possible to have cross-alignment of achievement properties served by Open Badges and used by CLR. Examples include but are not limited to achievementType which describes the type of achievement being represented, and Result/ResultDescription which can describe possible levels of mastery associated to specific achievements. This will enrich Open Badges data and increase the perceived significance and usage of Open Badges to deliver verifiable single achievements such as certifications, licenses, courses, etc. Using a common model across Open Badges and CLR specifications for the core ideas of assertion and achievement will enable the CLR specification to focus on the more complex requirements of bundling collected assertions and expressing the associations between the achievements.

2.3.5 Differentiating Issuers and Creators

In Open Badges and CLR, the issuer is assumed to be the creator. Over the years, the Open Badges community has requested capabilities to distinguish between the issuer and creator of a badge. This is because there are plenty of examples where the assessor is the issuer but not the creator of the badge. The Original Creator Extensions is a step in this direction but provides no properties to describe the eligibility of issuers trusted by the original creator to duplicate and issue their own assertions of the badge.

In order to open up a wide swath of use cases for shared issuing responsibility of common credentials, we must do more. Conveniently, an issuer property for the entity that is digitally signing the credential is included in the VC assertion. Because of this, the issuer property referenced in the BadgeClass is redundant. This property is a logical placement for new properties to describe a creator(s) and the eligibility of potential outside issuers to share or have delegated responsibility for badge issuance. This will enable the use cases and give relying third-parties more contextual information about the achievement and the parties involved.

2.4 Skill Assertions

Many of the use cases for Open Badges and CLR involve describing "defined achievements" with the Achievement/BadgeClass data class. These achievements may sometimes be aligned to skills or competencies, as a means of indicating that those who earn them have achieved the aligned skills. As part of this proposal, we also introduce the concept of a Skill Assertion, showing how the Open Badges Specification can be expanded to assert achievement of single skills in a more flexible manner that is complementary to these use cases and that opens up a wide range of new use cases. A Skill Assertion offers a lightweight structure for issuers to make a claim that a learner has a skill, with a particular assessment result if desired.

A Skill Assertion is an Open Badges assertion that contains a "skill result." The idea of a skill result fits perfectly with the concept from CLR of a Result that is paired against the ResultDescription defined in an Achievement/BadgeClass, but a skill result targets a skill that may have been defined by a third-party organization, such as an industry group. This is a separate claim that may be composed alongside a "hasCredential" claim that identifies which Achievement/BadgeClass criteria has been met, or it could appear in an Open Badges Verifiable Credential without the defined achievement claim. This means that an issuer could easily make an assertion that a learner has achieved the criteria of a certain badge, or that they have achieved a specific skill, or both (whether or not the skill is specifically identified in the alignments of the badge).

The following diagram shows how these concepts are connected for a use case in which an issuer asserts that a credential subject has achieved a particular skill, using a "results" claim to establish a relationship with a Result class that identifies which skill is recognized and may describe other aspects of the skill achievement, such as the level at which it was assessed and a degree of confidence. Specific use cases for how this data needs to be consumed will drive the specific skill-specific properties of the Result class that may be added to give issuers the options they need. In this example, a Skill Definition that is identified by a unique URL at which information about the skill is published is referenced by the Result. This pattern, named by the Open Skills Network as a Rich Skill Descriptor (RSD), makes it possible for skills to be precisely referenced in other entities, such as credentials. Here, the RSD was published by an industry organization, and included in this credential by a different issuer. There is no need for the skill author and the credential issuer to have a pre-existing or discoverable relationship in order for a Skill Assertion to be valid. Evidence may also be included, just like in any Assertion.

- Skill Assertion with Evidence Diagram -
Figure 4 Skill Assertion with Evidence Diagram
-

The notion of skill results can be combined with a defined achievement assertion claim "hasCredential". In this example, the same Skill Assertion appears, but additional criteria that the learner has met is described in the Achievement/BadgeClass as in many of our other examples. The Achievement aligns to the same skill that is recognized, but the Result allows the issuer to describe specifics about the assessment results relative to the skill.

- Defined Achievement Assertion with Skill Result Diagram -
Figure 5 Defined Achievement Assertion with Skill Result Diagram
-

The inclusion of Skill Assertion claims makes a natural, ergonomic fit with defined achievement claims and evidence claims. Business logic to process each of the available claims can look for just the data a relying party needs, and extraneous claims do not get in the way.

- -

3. Use Cases

This section is non-normative.

The use cases below drive the design of Open Badges 3.0 specification.

3.1 Revocation of an Issued Credential

Gigantic State University is a badge issuer. It has awarded a badge to a student in the form of a verifiable credential. Some time after issuing the credential, GSU discovers academic misconduct on the part of the student and needs to revoke the credential's status. GSU updates a list of revoked credential IDs, noting the reason why it was revoked. Future verifications of the issued badge by consumers detect that the credential is now revoked and do not erroneously accept it.

Goal of the Primary Actor: Revoke a credential they have already awarded.

Actors: Credential issuer, Credential Subject, Consumer/Verifier

Preconditions for this Use Case:

    -
  1. Issuer creates a badge class
  2. -
  3. Issuer issues a credential to a subject
  4. -
  5. Credential references a revocation list
      -
    1. Uses the credentialStatus property
    2. -
    3. OB 3.0 standard comes to consensus on what to use.
    4. -
    -
  6. -
  7. Issuer has access to a revocation list to update
  8. -
  9. Verification process of badge credentials checks associated list
  10. -

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.2 Online Course Completion Assertion Issuance to Wallet

Maya has completed an online course for an "Introduction to Web QA" at her local community college. The community college issues a course completion assertion. When Maya is ready to accept the assertion, she presents her wallet's location to the community college, which generates a request that Maya approves to receive the credential. Maya stores the assertion in her Verifiable Credentials enabled digital wallet with her other credentials.

Goal of the Primary Actor: Issue a verifiable credential to a student that she can use to take the next steps in her education journey.

Actors: Community college, Maya (student)

Preconditions for this Use Case:

    -
  1. Community college creates badge for course completion
  2. -
  3. Maya completes the course
  4. -
  5. Maya downloads and installs a VC enabled digital wallet
  6. -
  7. Maya has an identifier she uses for educational badges
  8. -
  9. Maya is able to connect her wallet to the community college's issuing platform (assuming community college is using a platform) through authentication with the platform
  10. -
  11. The community college has established an issuer profile, relevant cryptographic keys, and has published an Achievement corresponding to completion of the "Introduction to Web QA" course.
  12. -
  13. Maya has provided an identifier to the college that it has accepted (or controls an identifier that the college has assigned to her)
  14. -

Flow of Events:

    -
  1. Maya completes course requirements, receives a grade and is marked as complete for the "Introduction to Web QA" course.
  2. -
  3. Maya provides or selects an identifier to use as her identifier for badges while enrolled at the community college, and proves the identifier represents her to the college if necessary, and through mechanisms appropriate to the identifier type.
  4. -
  5. The community college issues an assertion of the previously defined achievement to Maya's identifier and cryptographically signs it
  6. -
  7. Maya accepts the credential into her wallet.
  8. -

Post-Conditions/Success Criteria:

Points of Failure:

3.3 Assertion Issuance without mobile VC Wallet (email)

A professional development/training vendor Training, Inc. recognizes Dawson's mastery of a competency by issuing an assertion to Dawson's email address.

Goal of the Primary Actor: Training, Inc. wishes to provide a verifiable record that Dawson may use to present proof of competency-based professional development.

Actors: Training, Inc (professional development/training vendor), Dawson (student)

Preconditions for this Use Case:

    -
  1. Dawson is authenticated, associated with a particular email address to the vendor's platform.
  2. -
  3. The vendor has established an issuer profile, defined an Achievement and has the capability to create and deliver assertions to Dawson via Badge Connect
  4. -

Flow of Events:

    -
  1. Dawson authenticates to the vendor platform, proving control of a chosen email address.
  2. -
  3. Dawson connects a Badge Connect backpack to the vendor platform, resulting in the platform holding an auth token on his behalf scoped to allow pushing assertions to his backpack.
  4. -
  5. Dawson engages with a learning opportunity, gains new knowledge, skills, and abilities, and successfully completes an assessment demonstrating mastery of a specific competency.
  6. -
  7. Training, Inc. creates an assertion of the achievement that recognizes the competency.
  8. -
  9. Training, Inc. transmits the assertion to Dawson's backpack via Badge Connect API.
  10. -

Post-Conditions/Success Criteria:

Points of Failure:

3.4 Assertion Issuance to Custodian/Guardian Wallet (custodian/guardian)

Kalamazoo Elementary School holds a schoolwide spelling bee and recognizes the achievement of a minor student, Maddie, for winning third place in said spelling bee. Kalamazoo delivers the assertion to Maddie's guardian, Cole, to maintain the assertion until such a time that Maddie can take control of that assertion.

Goal of the Primary Actor: Kalamazoo K-12 wishes to award an assertion that Maddie may eventually use, with the understanding that she may not be able to control a wallet on her own behalf today.

Actors: Kalamazoo K-12 district (issuer), Maddie (student), Cole (guardian)

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.5 Assertion Issuance without Wallet (QR code)

Jade takes a Standard First Aid course offered by a Red Cross authorized training company, ABC Corp., and receives a printed certificate including their name and certificate number to show that they are certified for SFA + CPR valid for 3 years. The certificate also includes a QR code that is a representation of an OB 3.0 assertion embedded with Jade's name, certificate number, and expiry date. Jade's employer then scans the QR code and verifies that Jade is now qualified to be a first aid attendant in the office (which gives Jade a $2/hr raise).

Goal of the Primary Actor: To be able to show that they hold current certification for SFA from the Red Cross which qualifies them to be a workplace first aid attendant and gives them a raise for the extra job role.

Actors: Organisation that does Red Cross training, course participant, participant's employer

Preconditions for this Use Case:

    -
  1. The Red Cross has defined an Achievement for the certification.
  2. -
  3. The vendor is authorized by the Red Cross to do training and issue certification certificates for the SFA and CPR courses.
  4. -
  5. The vendor has established an issuer profile and has the capability to create and print certificates.
  6. -
  7. The participant's employer has an application that can view and verify VCs that are printed as QR codes.
  8. -

Flow of Events:

    -
  1. Jade shows a piece of government issued ID to the vendor while taking the course.
  2. -
  3. Jade completes and passes the SFA + CPR first aid course.
  4. -
  5. ABC Corp. prints out a wallet sized and wall sized certificate to say that Jade is certified.
  6. -
  7. The certificate is presented to Jade's employer and Jade gets an additional work role due to being qualified as a workplace first aid attendant.
  8. -

Post-Conditions/Success Criteria:

Points of Failure:

3.6 Recipient Presentation of Assertion

Maya registers for an advanced course and she is asked to provide proof that she completed a prerequisite course. From her wallet, Maya presents the course assertion as a verifiable presentation to the MOOC, which cryptographically verifies the issuer of the assertion, that Maya is the recipient, and that the assertion data has not been altered since it was issued. Upon verification, she is registered for the MOOC.

Editor's note
-New to v3.0: Verifiable Credentials (VC) is a W3C specification that describes how to issue tamper-evident credentials that can be cryptographically verified. Maya's digital wallet has the capabilities to create a DID, read the VC data, and store it. From the wallet, Maya can present her credentials and prove that she is the recipient because it was issued to a DID that she created and has the digital keys that demonstrates her control of the Verifiable Credential (VC). This functionality is not specific to the Open Badges standard but using this verification functionality and using a decentralized identifier (DID) to identify the badge recipient instead of an email address is part of the v3.0 update. Maya's badge recognizes a course completion and being able to specify that in the badge is a new aspect of v3.0. As with the CLR, v3.0 will be able to specify the type of achievement that a badge is representing. -

Goal of the Primary Actor: Register for advanced "Web QA" course

Actors: Maya, MOOC

Preconditions for this Use Case:

    -
  1. Maya completed prerequisite course
  2. -
  3. Issuer issued a verifiable assertion (i.e. completion of prerequisite course) to Maya
  4. -
  5. Maya has a VC-compatible wallet
  6. -
  7. Maya has received the VC representing her competion of the prerequisite course
  8. -
  9. The MOOC is capable of receiving the verifiable presentation of the badge
  10. -

Flow of Events:

    -
  1. Maya authenticates to the MOOC platform
  2. -
  3. The MOOC platform requests a credential matching a certain criteria (completion of a prerequisite course option)
  4. -
  5. Maya prepares and transmits a presentation of her assertion to the MOOC platform
  6. -
  7. The MOOC platform verifies the assertion is valid and fitting its needs
  8. -
  9. The MOOC platform grants the authenticated user Maya access to the advanced course
  10. -

Post-Conditions/Success Criteria:

Points of Failure:

    -
  1. Maya's wallet and the MOOC platform must be capable of establishing a transmission channel for the assertion.
  2. -
  3. The MOOC platform must be capable of expressing a request for a credential that matches the assertion that Maya holds.
  4. -
  5. There must be a mutual capability between the wallet and the MOOC platform to prove Maya's is represented by recipient identifier
  6. -

3.7 License Issuance

After Jeremy takes his electrician licensure exam, he accesses the online system for his state's licensure department to see his results and download his license. After he proves his identity by presenting his government issued ID from his digital wallet, he is informed that he passed the exam. The electrician license badge is issued to the DID Jeremy provided and is stored in his digital wallet with his other digital credentials.

Editor's note
-New to v3.0: Similar to Maya's course completion badge, Jeremy's electrician license badge is also issued to a DID that Jeremy provides from his wallet and can also be cryptographically verified following the Verifiable Credentials model. The government issued ID in this use case is not an Open Badge but because it is a Verifiable Credential it can be stored in the same wallet as the electrician's license badge demonstrating interoperability of the verification models. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.8 Mapping Skills

Syd is shifting careers after many years working in construction. In their digital wallet they had several skill badges describing their mastery of skills in construction but also in teamwork, communication, and organizational skills. Syd also had badges from some courses they'd taken in science and math over the last few years. After they uploaded the skill and course badges from their wallet to a career planning site, they were offered several opportunities to apply for work in software sales and cybersecurity.

Editor's note
-New to v3.0: In addition to badges recognizing courses, this use case mentions skill badges. In v3.0, a badge can claim that the recipient has attained a single skill. The assertion references a Rich Skill Descriptor (RSD) instead of a badge class. Skill badges can also be cryptographically verified following the Verifiable Credentials model and stored in digital wallets. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.9 Verifying Continuing Education

Denise was offered a new job at a hospital as a physician's assistant. Before starting, her continuing education training and license to practice needed to be verified. The last time she switched hospitals, the verification process took three weeks. This time, she was able to provide her badges to prove her training and license. Within minutes her credentials were verified and she was issued a new digital staff credential.

Editor's note
-New to v3.0: As with the other use case, this use case emphasizes that Open Badges v3.0 can recognize many different achievement types and be cryptographically verified following the Verifiable Credentials model. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.10 Self-assertion

Stacy has created a mobile app that demonstrates her abilities as a coder, designer, and product manager. She creates an account on a badging platform and designs the badge to include alignments to the skills that the badge recognizes. With her digital wallet app, she connects to the badging platform and issues this badge to herself which includes screenshots and a link to the mobile app as evidence. Stacy uses this badge and others like it as verifiable portfolio items.

Editor's note
-New to v3.0: In previous versions of Open Badges, it was possible to make self-assertion badges and issue badges to peers, however the issuer profile properties were organization specific. With 3.0, the issue properties can be modified to reference either an organization or an individual. It could be considered that both the issuer and recipient profile have similar optional properties so that there is flexibility in describing both profiles. This way, an organization could also be described as the recipient. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.11 Endorsement

Ralph has been issued a verifiable credential badge for his most recent position at the hospital where he works by the hospital. The badge contains alignments to the skills related to his role. He requests that his peers endorse the skills he has acquired. A platform is able to communicate this request to peers, facilitate review of the skills, and process the issuance of endorsement VC badges that reference the original badge, colleagues as endorsers, and Ralph as the recipient.

Editor's note
-New to v3.0: In 2.0, an endorsement is its own type of badge. This could be the same in 3.0 but also, an endorsement could be a response from a verifier. In the example above, the platform verifies the badge the data and then acts as an issuer of endorsements on behalf of its users. This would be closer to how endorsements are used in 2.0 but applicable to 3.0. It could also be that the platform uses AI to process the badge and sends an endorsement back to Ralph as a proof of acceptance and an evaluation of his badge. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.12 Single Skill Assertion

From her school's LMS, Dr. Cara chooses which skills and competencies will be taught in her class. These skills and competencies are aligned with the rubric in the syllabus that is presented to her students. Once the students have successfully completed the course, Dr. Cara assesses each student's assignments and participation and selects which skills and competencies were met and at what level. The selection of skills and competencies triggers an issuing of a skill assertion for each one and includes the assessment results in the evidence and results. The skill assertions are associated with the student's IDs, the students are notified and informed how they can use these skill assessments to inform their choice of classes in the future.

Editor's note
-New to v3.0: Single skill assertions are new to 3.0. They do not require a badge class, badge image, etc. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.13 Re-issue a <= 3.0 Badge to a 3.0 Badge

Leo earned several badges while in highschool and graduates soon. The email address used as the recipient identity for these badges was an email address provided by his high school and he will no longer have access to it. Leo downloads a digital wallet and requests that the school reissue the badges to the identifier he created in the wallet.

Editor's note
-New to v3.0: The use of VC wallets, and decentralized identifiers are different in 3.0. -

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.14 Badge Class Status

An institution has issued hundreds of badges in the form of VCs. A situation has arisen that requires the badge class to be effectively deleted or purged from the ecosystem. It is impractical (and arguably inaccurate) to revoke each assertion with individual records in perpetuity. The institution would like to set a status such that the badge class itself is treated as invalid.

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

3.15 Authorization to Issue Given by Creator to Issuer

The data model attributes the issuer of a VC and the creator of the badge class separately.

Standards Organization X (SOX) has created a number of badges related to competencies they certify. SOX wants to authorize an accredited, certified training organization (CTO) to issue their credentials. An Open Badge Platform manages the granting of issuing rights to CTO by SOX and can issue verifiable credentials where CTO is the issuer and SOX is the creator inside the badge class.

Employer receives a credential from a graduate. Employer, in addition to verifying the VC in general, can review and verify that SOX did in fact authorize CTO to issue this badge.

Goal of the Primary Actor:

Actors:

Preconditions for this Use Case:

Flow of Events:

Post-Conditions/Success Criteria:

Points of Failure:

- -

4. Getting Started

This section is non-normative.

4.1 New to Open Badges

If you are new to Open Badges, please start here.

Note
-@@@TBD -

4.2 Migrating from Open Badges 2.x

If you are migrating from Open Badges 2.0 [OB-20] or 2.1 [OB-21] to OB 3.0, please start here.

Note
-@@@TBD -

4.2.1 Differences Between Version 2.0 and 3.0

4.2.2 Differences Between Version 2.1 and 3.0

- -

5. Open Badges Document Formats

Open Badges can be exchanged as JSON-LD documents as defined in this section, or by using the Open Badges API. Open Badges documents can be exchanged as a file or web resource, displayed as a QR code, or embedded in an image. The contents of an Open Badge document MUST meet the following criteria:

-
- Example 1: Sample AssertionCredential file contents -
{
-  "@context": [
-    "https://www.w3.org/2018/credentials/v1",
-    "https://imsglobal.github.io/openbadges-specification/context.json"
-  ],
-  "id": "http://example.edu/credentials/3732",
-  "type": ["VerifiableCredential", "AssertionCredential"],
-  "issuer": {
-    "id": "https://example.edu/issuers/565049",
-    "type": "Profile",
-    "name": "Example University"
-  },
-  "issuanceDate": "2010-01-01T00:00:00Z",
-  "credentialSubject": {
-    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
-  },
-  "credentialSchema": [{
-    "id": "https://imsum2.herokuapp.com/jsonschema?classId=org.1edtech.ob.v3p0.assertioncredential.class",
-    "type": "JsonSchemaValidator2020"
-  }]
-}
-

5.1 File Format

    -
  • JSON text exchanged between systems that are not part of a closed ecosystem MUST be encoded using UTF-8 [RFC3629].
  • -

5.2 Web Resource

When the id of an Assertion is a URL, a GET request to that URL MUST return JSON representing an AssertionCredential as described above.

    -
  • The Content-Type SHOULD be application/json or application/ld+json.
  • -
  • The content MUST be encoded using UTF-8 [RFC3629].
  • -

5.3 QR Code Format

Some Assertions are quite long. Due to the large size of the resulting JSON string, the string MUST be compressed prior to rendering the QR Code. To ensure interoperability, the string MUST be compressed using Concise Binary Object Representation (CBOR) [RFC8949].

Issue 2
- Is this even practical? -

5.4 Image Format

Issue 3: Baking an ObPresentation
-

- Can an ObPresentation be baked into an image? What are the implications? -

-

Assertions may be exchanged as image files with assertions encoded within. This allows assertions to be portable wherever image files may be stored or displayed.

"Baking" is the process of taking an AssertionCredential and embedding it into the image, so that when a user displays the image on a page, software that is Open Badges or CLR-aware can automatically extract that Assertion data and perform the checks necessary to see if a person legitimately earned the achievement within the image. The image must be in either PNG or SVG format in order to support baking.

5.4.1 Technical Details

5.4.1.1 PNGs
5.4.1.1.1 Baking

An iTXt chunk should be inserted into the PNG with keyword openbadges. The text MUST be the JSON for the #org.1edtech.ob.v3p0.assertioncredential.class. Compression MUST NOT be used.

-
- Example 2: An example of creating a chunk (assuming an iTXt constructor) -
var chunk = new iTXt({
-  keyword: 'openbadges',
-  compression: 0,
-  compressionMethod: 0,
-  languageTag: '',
-  translatedKeyword: '',
-  text: JSON.stringify(assertion)
-})
-

An iTXt chunk with the keyword openbadges MUST NOT appear in a PNG more than once. When baking an image that already contains assertion data, the implementor may choose whether to pass the user an error or overwrite the existing chunk.

5.4.1.1.2 Extracting

Parse the PNG datastream until the first iTXt chunk is found with the keyword openbadges. The rest of the stream can be safely discarded. The text portion of the iTXt will be the JSON representation of a #org.1edtech.ob.v3p0.assertioncredential.class.

5.4.1.2 SVGs
5.4.1.2.1 Baking

First, Add an xmlns:openbadges attribute to the <svg> tag with the value "https://purl.imsglobal.org/ob/v3p0". Directly after the <svg> tag, add an <openbadges:assertion> tag.

The JSON representation of the AssertionCredential MUST go into the body of the tag, wrapped in <![CDATA[...]]>.

-
- Example 3: An example of a well baked SVG -
<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg"
-  xmlns:clr="https://purl.imsglobal.org/ob/v3p0"
-  viewBox="0 0 512 512">
-  <openbadges:assertion>
-    <![CDATA[
-      {
-        "@context": [
-          "https://www.w3.org/2018/credentials/v1",
-          "https://www.w3.org/2018/credentials/examples/v1"
-        ],
-        "id": "http://example.edu/credentials/3732",
-        "type": ["VerifiableCredential", "OpenBadge"],
-        "issuer": {
-          "id": "https://example.edu/issuers/565049",
-          "type": "IssuerProfile",
-          "name": "Example University"
-        },
-        "issuanceDate": "2010-01-01T00:00:00Z",
-        "credentialSubject": {
-          "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
-        }
-      }
-    ]]>
-  </openbadges:assertion>
-
-  <!-- rest-of-image -->
-</svg>
-

There MUST be only one <openbadges:assertion> tag in an SVG. When baking an image that already contains assertion data, the implementor may choose whether to pass the user an error or overwrite the existing tag.

5.4.1.2.2 Extracting

Parse the SVG until you reach the first <openbadges:assertion> tag. The rest of the SVG data can safely be discarded.

- - - -
-

6. Open Badges API

- -

- Open Badges can be exchanged using the API (application programming interface) defined here, or as - documents. -

-

- This specification defines a RESTful API protocol to be implemented by applications serving in the roles of - Client and Resource Server. The API uses OAuth 2.0 for authentication and granular resource-based permission - scopes. Please see the Open Badges Specification Conformance and Certification Guide v3.0 for a list of which endpoints must be implemented for certification. -

- -

- In addition to the documentation in this section, there are OpenAPI files for the - Open Badges API in both JSON and YAML format: -

- - -
-

6.1 Architecture

-
- Diagram showing the major components of the Open Badges API -
Figure 6 Diagram showing the major components of the Open Badges API
-
-

- There are five key components to the API architecture. -

-
-
User
-
- This is the user that owns the resources (badges) that are on the resource server. Also called a - Resource Owner. -
-
Web Browser
-
This is the web browser the user interacts with.
-
Client
-
- This is the web application that interacts with the resource server on behalf of the user. Also called - Consumer in the IMS Global Security Framework v1.1. -
-
Authorization Server
-
- This is a server that implements the OAuth 2.0 endpoints on behalf of - the resource server. In many systems, the authorization server and the resource server are - combined. -
-
Resource Server
-
- This is the server that has the protected resources (badges). Also called Provider in the IMS Global Security Framework v1.1. -
-
-

- The role of each component during Registration, Obtaining Tokens, and Authenticating with Tokens are described - below. -

-
- -
-

6.2 Security

-

- All of the API endpoints are protected by OAuth 2.0 access tokens as described in § 7. Open Badges API Security. -

- -

Scopes

- -

- Each endpoint requires an access token with a specific Open Badges scope as shown below. -

- - - - - - - - - - - - - - - - - - - - - - - - - -
OperationScope
getAssertions - https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly - - Permission to read assertions for the authenticated entity. -
postAssertion - https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.create - - Permission to create assertions for the authenticated entity. -
getProfile - https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly - - Permission to read the profile for the authenticated entity. -
postProfile - https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update - - Permission to update the profile for the authenticated entity. -
-
- -
-

6.3 REST Endpoints

- -

All endpoint requests MUST be made over secure TLS 1.2 or 1.3 protocol.

- - -
-

6.3.1 getAssertions

-

- Fetch Assertions from the resource server for the supplied parameters and access token. -

- -

Request Format

- -

GET {baseUrl}/ims/ob/v3p0/assertions?limit={limit}&offset={offset}&since={since}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
URL ParameterParameter TypeDescriptionRequired
baseUrlURLThe HTTP scheme (which MUST be "https"), domain name, and any other path - elements required by the resource server (e.g. "https://example.com/tenant"). - Required
limitPositiveIntegerThe maximum number of Assertions to return.Optional
offsetNonNegativeInteger - The index of the first Assertion to return. (zero indexed)Optional
sinceDateTimeOnly include Assertions issued after this timestamp.Optional
- -

Request Headers

- - - - - - - - - - - - - - - - - - - - - -
Request HeaderDescriptionRequired
Authorization: Bearer <access_token>See § 7. Open Badges API Security for information on how to obtain an access_token.Required
Accept: application/ld+json - If the content type application/ld+json is not not included in the Accept - header, the resource server MUST respond with 406 Not Acceptable. - Required
- -

Request Payload

- -

There is no request payload.

- -

Sample Request

- -
-
- Example 4: Sample getAssertions Request -
GET {tenant}/ims/ob/v3p0/assertions?limit=2&offset=0 HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-
- -

Responses

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP Status CodePayload TypeDescriptionPayload Required
200ObPresentation'OK' - The assertions are returned in the payload.Required
400Imsx_StatusInfo - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained - in the response payload. - Required
401Imsx_StatusInfo'Unauthorized' - The request requires user authentication.Required
403Imsx_StatusInfo - 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - Required
404Imsx_StatusInfo'Not Found' - There is no CLR behind the URI.Required
406Imsx_StatusInfo - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - Required
421Imsx_StatusInfo - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - Required
- -

Response Headers

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Response HeaderDescriptionRequired
Content-Type: application/ld+jsonThe content type MUST be application/ld+json.Required
X-Total-Count: <total_count> - The resource server MUST include an X-Total-Count response header if the total result - count is known. If the total result count is not known, the total count header MUST be ommitted. - Conditionally Required for 200 OK Response
Link: <pagination_links> - The resource server MUST include a - Link response - header if the list of assertions in the response is incomplete; and MAY include the Link - header if the response is complete. - Conditionally Required for 200 OK Response
-

- If present, the Link header MUST support all of the following link relations (rel - values): -

- - - - - - - - - - - - - - - - - - - - - - - - - -
RelationDescription
next - The link relation for the immediate next page of results. This MUST appear when the current list - response - is incomplete. -
lastThe link relation for the last page of results. This MUST always appear.
firstThe link relation for the first page of results. This MUST always appear.
prev - The link relation for the immediate previous page of results. This MUST appear when the - offset is greater than zero. -
- -

Sample Response

- -
-
- Example 5: Sample getAssertions Response (line breaks for clarity) -
HTTP/1.1 200 OK
-Content-Type: application/ld+json
-X-Total-Count: 1
-Link: <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=1>; rel="next",
-      <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="last",
-      <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="first",
-      <https://www.imsglobal.org/ims/ob/v3p0/assertions?limit=2&offset=0>; rel="prev"
-
-{
-  "@context": [
-    "https://www.w3.org/2018/credentials/v1",
-    "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-  ],
-  "type": ["VerifiablePresentation", "ObPresentation"],
-  "verifiableCredential": [
-    {
-      "@context": [
-        "https://www.w3.org/2018/credentials/v1",
-        "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-      ],
-      "id": "http://example.edu/credentials/3732",
-      "type": ["VerifiableCredential", "AssertionCredential"],
-      "issuer": {
-        "id": "https://example.edu/issuers/565049",
-        "type": "Issuer",
-        "name": "Example University"
-      },
-      "issuanceDate": "2010-01-01T00:00:00Z",
-      "credentialSubject": {
-        "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
-        "achievement": "urn:uuid:dd887f0a-56cb-11ec-bf63-0242ac130002",
-      }
-    }
-  ]
-}
-
-
- - -
-

6.3.2 postAssertion

-

Create or update an Assertion on the resource server.

-

- If the resource server is holding an Assertion with the same id, it will be updated. Otherwise - the Assertion will be created and held by the resource server. Note that "created" is not the same - as "issued". The resource server will simply store the Assertion in the request payload as a - resource. -

- -

Request Format

- -

POST {baseUrl}/ims/ob/v3p0/assertions

- - - - - - - - - - - - - - - - - -
URL ParameterParameter TypeDescriptionRequired
baseUrlURL - The HTTP scheme (which MUST be "https"), the domain name, and any other path elements required - by the resource server (e.g. "https://example.com/tenant"). - Required
- -

Request Headers

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Request HeaderDescriptionRequired
Authorization: Bearer <access_token>See § 7. Open Badges API Security for information on how to obtain an access_token.Required
Accept: application/ld+json - If the content type application/ld+json is not not included in the Accept - header, the resource server MUST respond with 406 Not Acceptable. - Required
Content-Type: application/ld+json - If the Content-Type is not application/ld+json, the resource server MUST - respond with 406 Not Acceptable. - Required
- -

Request Payload

- - - - - - - - - - - - - - - - -
Request Payload TypeDescriptionRequired
AssertionCredential - The Assertion to be updated or created on the resource server. -
Issue 4
- Should the payload be a VerifiablePresentation that contains the AssertionCredential? -
-
Required
- -

Sample Request

- -
-
- Example 6: Sample postAssertion Request -
POST {tenant}/ims/ob/v3p0/assertions HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-Content-Type: application/ld+json
-
-{
-  "@context": [
-    "https://www.w3.org/2018/credentials/v1",
-    "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-  ],
-  "id": "http://example.edu/credentials/3732",
-  "type": ["VerifiableCredential", "AssertionCredential"],
-  "issuer": {
-    "id": "https://example.edu/issuers/565049",
-    "type": "Publisher",
-    "name": "Example University"
-  },
-  "issuanceDate": "2010-01-01T00:00:00Z",
-  "credentialSubject": {
-    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
-    "achievement": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
-  }
-}
-
- -

Responses

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP Status CodePayload TypeDescriptionPayload Required
200AssertionCredential - 'OK' - The Assertion was successfully updated. The response payload MUST be the Assertion that - was - posted. - Required
201AssertionCredential - 'Created' - The Assertion was successfully created. The response payload MUST be the Assertion - that was posted. - Required
400Imsx_StatusInfo - 'Bad Request' - The request was invalid or cannot be served. The exact error should - be explained in the response payload. - Required
401Imsx_StatusInfo'Unauthorized' - The request requires user authentication.Required
403Imsx_StatusInfo - 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - Required
405Imsx_StatusInfo'Method Not Allowed' - The resource server does not support this operation.Required
406Imsx_StatusInfo - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - Required
421Imsx_StatusInfo - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - Required
- -

Response Headers

- - - - - - - - - - - - - - - - -
Response HeaderDescriptionRequired
Content-Type: application/ld+jsonThe content type MUST be application/ld+json.Required
- -

Sample Response

- -
-
- Example 7: Sample postAssertion Response -
{
-  "@context": [
-    "https://www.w3.org/2018/credentials/v1",
-    "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-    ],
-  "id": "http://example.edu/credentials/3732",
-  "type": ["VerifiableCredential", "AssertionCredential"],
-  "issuer": {
-    "id": "https://example.edu/issuers/565049",
-    "type": "Publisher",
-    "name": "Example University"
-  },
-  "issuanceDate": "2010-01-01T00:00:00Z",
-  "credentialSubject": {
-    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
-    "achievement": "urn:uuid:a7467ef6-56cb-11ec-bf63-0242ac130002"
-  }
-}
-
-
- - - -
-

6.3.3 getProfile

- -

- Fetch the profile from the resource server for the supplied access token. -

- -

Request Format

- -

GET {baseUrl}/ims/ob/v3p0/profile

- - - - - - - - - - - - - - - - - -
URL ParameterParameter TypeDescriptionRequired
baseUrlURLThe HTTP scheme (which MUST be "https"), domain name, and any other path - elements required by the resource server (e.g. "https://example.com/tenant"). - Required
- -

Request Headers

- - - - - - - - - - - - - - - - - - - - - -
Request HeaderDescriptionRequired
Authorization: Bearer <access_token>See § 7. Open Badges API Security for information on how to obtain an access_token.Required
Accept: application/ld+json - If the content type application/ld+json is not not included in the Accept - header, the resource server MUST respond with 406 Not Acceptable. - Required
- -

Request Payload

- -

There is no request payload.

- -

Sample Request

- -
-
- Example 8: Sample getProfile Request -
GET {tenant}/ims/ob/v3p0/profile HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-
- -

Responses

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP Status CodePayload TypeDescriptionPayload Required
200Profile'OK' - The matching profile.Required
400Imsx_StatusInfo - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained - in the response payload. - Required
401Imsx_StatusInfo'Unauthorized' - The request requires user authentication.Required
403Imsx_StatusInfo - 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - Required
404Imsx_StatusInfo'Not Found' - There is no matching profile.Required
406Imsx_StatusInfo - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - Required
421Imsx_StatusInfo - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - Required
- -

Response Headers

- - - - - - - - - - - - - - - - -
Response HeaderDescriptionRequired
Content-Type: application/ld+jsonThe content type MUST be application/ld+json.Required
- -

Sample Response

- -
-
- Example 9: Sample getProfile Response -
HTTP/1.1 200 OK
-Content-Type: application/ld+json
-
-{
-  "@context": [
-    "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-  ],
-  "type": "Profile",
-  "id": "https://example.edu/issuers/565049",
-  "name": "Example University"
-}
-
-
- - -
-

6.3.4 postProfile

- -

Update the Profile on the resource server for the authenticated entity.

-

- The request SHOULD only include profile identifier properties to be added to the profile, not any existing data. - The values may never become part of the published profile. -

- -

Request Format

- -

POST {baseUrl}/ims/ob/v3p0/profile

- - - - - - - - - - - - - - - - - -
URL ParameterParameter TypeDescriptionRequired
baseUrlURL - The HTTP scheme (which MUST be "https"), the domain name, and any other path elements required - by the resource server (e.g. "https://example.com/tenant"). - Required
- -

Request Headers

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Request HeaderDescriptionRequired
Authorization: Bearer <access_token>See § 7. Open Badges API Security for information on how to obtain an access_token.Required
Accept: application/ld+json - If the content type application/ld+json is not not included in the Accept - header, the resource server MUST respond with 406 Not Acceptable. - Required
Content-Type: application/ld+json - If the Content-Type is not application/ld+json, the resource server MUST - respond with 406 Not Acceptable. - Required
- -

Request Payload

- - - - - - - - - - - - - - - - -
Request Payload TypeDescriptionRequired
Profile - The profile to be updated resource server. The profile SHOULD only include properties to be added to - the profile, not any existing data. - Required
- -

Sample Request

- -
-
- Example 10: Sample postProfile Request -
POST {tenant}/ims/ob/v3p0/profile HTTP/1.1
-Host: example.com
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-Content-Type: application/ld+json
-
-{
-  "@context": [
-    "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-  ],
-  "telephone": "111-222-3333"
-}
-
- -

Responses

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HTTP Status CodePayload TypeDescriptionPayload Required
200Profile - 'OK' - The Profile will be updated. The response payload MUST be the same as GET Profile and may - not include the patched values (as the resource server may be waiting for asynchronous processes to - complete before accepting the values). - Required
400Imsx_StatusInfo - 'Bad Request' - The request was invalid or cannot be served. The exact error should be explained - in the response payload. A resource server MAY respond with 400 Bad Request to reject - data that is known immediately to not be acceptable by the platform, e.g. to reject a "telephone" - property - if the Provider cannot validate telephone numbers. - Required
401Imsx_StatusInfo'Unauthorized' - The request requires user authentication.Required
403Imsx_StatusInfo - 'Forbidden' - The resource server understood the request, but is refusing it or the access - is - not allowed. - Required
405Imsx_StatusInfo'Method Not Allowed' - The resource server does not support this operation.Required
406Imsx_StatusInfo - 'Not Acceptable' - The request did not include 'application/ld+json' in the Accept - header. - Required
421Imsx_StatusInfo - 'Misdirected Request' - The request was not made over secure TLS 1.2 or 1.3 protocol. - Required
- -

Response Headers

- - - - - - - - - - - - - - - - -
Response HeaderDescriptionRequired
Content-Type: application/ld+jsonThe content type MUST be application/ld+json.Required
- -

Sample Response

- -
-
- Example 11: Sample postProfile Response -
{
-  "@context": [
-      "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-  ],
-  "type": "Profile",
-  "id": "https://example.edu/issuers/565049",
-  "name": "Example University"
-}
-
-
-
- -
-

6.4 Retry Behavior

-

- Receivers of requests MAY implement a Retry-After header to indicate a period of time to wait before - attempting the request again. -

-

- If no Retry-After header is present and the response is non-2XX, it is recommended to retry the - request in 30 minutes for an additional two attempts. After which, it MAY be desirable to alert the recipient that - there is an issue with the connection (e.g. perhaps they need to reauthenticate or manually trigger the request - when they believe services are back up). -

-
-
- - - - - -
-

7. Open Badges API Security

-

- In scenarios where the learner or another third party is the user that owns the resources (badges), - there will not be a pre-established trust relationship. Therefore you MUST use of OAuth 2.0 Authorization - Code Grant. -

-

- The Open Badges API endpoints use the method outlined in Section 4.2, "Using OAuth 2.0 Authorization Code - Grant" of the IMS Global Security Framework v1.1 to secure the API endpoints. This section describes the how Authorization - Code Grant is implemented for the Open Badges API. -

- - -
-

7.1 Using OAuth 2.0 Authorization Code Grant

-

- Making a secured Open Badges API request using authorization code grant comprises three steps: -

-
    -
  1. - § 7.1.1 Dynamic Client Registration - Share configuration information between the client and the server. - This is typically done only once unless the registration is revoked. -
  2. -
  3. - § 7.1.2 Obtaining Tokens - Obtain an authorization code using a choreography between the client, web browser, user, and authorization server. Then request an access token by sending a request, - using the previously obtained authorization code, to the Access Token service endpoint. -
  4. -
  5. - § 7.1.3 Authenticating with Tokens - Use the access token in the Authorization header of the API request. -
  6. -
- - -
-

7.1.1 Dynamic Client Registration

-

- To get started, the client and authorization server MUST share the four pieces of information - shown below using the OAuth 2.0 Dynamic Client Registration Protocol [RFC7591] as described in this - section. -

-
-
client_id
-
- This is the public identifier for the communication exchange. Also called a Secret in the - IMS Global Security Framework v1.1. -
-
client_secret
-
- This is the shared secret for the communication exchange. Also called a Secret in the IMS Global Security Framework v1.1. -
-
List of Scopes
-
- The list of scopes that identify the set of endpoints for which access permission is being - requested. -
-
OAuth 2.0 Access Token Service Endpoint
-
- The endpoint from which the approved, requesting client can obtain an access token. -
-
-

- If the client and authorization server support Token Revocation, they should also share: -

-
-
OAuth 2.0 Revocation Service Endpoint
-
- The endpoint a client can use to revoke an access token. -
-
-

There are two steps to dynamic client registration:

-
    -
  1. Request a Service Description Document (SDD) from the resource server
  2. -
  3. Register with the authorization server
  4. -
-
- Sequence diagram for registration -
Figure 7 Sequence diagram for dynamic client registration
-
-

- The client only needs to register a client_id with the authorization server - once. Each user will use the same client_id when they request their own - authorization code. -

- -

Request the Service Description Document

- -

- To start the registration process, the user supplies the client with the resource server's base URL. When presented with an unknown resource server the client MUST request - the resource server's Service Description Document (SDD) at the path - {baseUrl}/ims/ob/v3p0/discovery. Rate-limited access to this endpoint is RECOMMENDED. - An example request for an SDD takes the form of: -

-
-
- Example 12: Sample request for a service description document -
GET /tenant/ims/ob/v3p0/discovery HTTP/1.1
-Host: example.com
-Accept: application/json
-
-

- Access to the discovery endpoint MUST NOT be protected. The SDD MUST be provided over HTTPS with TLS - 1.2 or 1.3. -

-

- The response to this request is the SDD supplied as a JSON encoded payload. The structure and format - of this payload MUST follow that of the OpenAPI 3.0 Specification [OPENAPIS-3.0]. The SDD supplied - MUST be a profiled version of the OpenAPI 3.0 (JSON) file provided with this specification (see - § 1.2.1 OpenAPI 3.0 Files for the Badge Connect API). The profiled version contains all of the details about the supported set of - service end-points, the supported optional data fields, definitions of the proprietary data fields - supplied using the permitted extension mechanisms, definitions of the available proprietary - endpoints, and information about the security mechanisms. -

-

- The x-imssf-privacyPolicyUrl property is inserted into the securitySchemes - within the components section of the OpenAPI file structure. This is an IMS controlled - extension to the OpenAPI specification. -

- - - - - - - - - - - - - - - - - -
Property NameTypeDescriptionRequired
x-imssf-privacyPolicyUrlURLA fully qualified URL to the resource server's privacy policy.Required
-

- The x-imssf-image and x-imssf-privacyPolicy properties are inserted into - the info section of the OpenAPI file structure. These are also IMS controlled - extensions to the OpenAPI specification. Also note that the standard title and - termsOfService property is required in a Service Description Document. These may be - displayed to the user during the registration process. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Property NameTypeDescriptionRequired
x-imssf-imageURI - An image representing the resource server. May be a Data URI or the URL where the - image may be found. - Optional
x-imssf-privacyPolicyUrlURLA fully qualified URL to the resource server's privacy policy.Required
titleStringThe name of the resource server.Required
termsOfServiceURLA fully qualified URL to the resource server's terms of service.Required
-
-
- Example 13: Sample response with a Service Discovery Document -
HTTP/1.1 200 OK
-Content-Type: application/json; charset=utf-8
-
-...
-"info": {
-	"x-imssf-image": "https://example.com/logo",
-	"x-imssf-privacyPolicy": "https://example.com/privacy",
-	"title": "Example",
-	"termsOfService": "https://example.com/tos",
-	...
-},
-...
-"components": {
-	"securitySchemes": {
-		"OAuth2ACG": {
-			"type": "oauth2",
-			"description": "OAuth 2.0 Authorization Code Grant authorization",
-			"x-imssf-registrationUrl": "example.com/registration",
-			"flows": {
-				"authorizationCode": {
-					"tokenUrl": "example.com/token",
-					"authorizationUrl": "example.com/authorize",
-					"refreshUrl": "example.com/token",
-					"scopes": {
-						"https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.update" : "...",
-						"https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly" : "...",
-						"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.readonly" : "...",
-						"https://purl.imsglobal.org/spec/ob/v3p0/scope/profile.update" : "..."
-					}
-				}
-			}
-		}
-	},
-	"schemas": {
-		...
-	}
-}
-...
-
-

- Upon receiving a SDD from a resource server, the client SHOULD respect the Cache-Control and - Expires headers if present in the response and configure local cache to match the directives it - declares. If directives include one of no-cache, no-store, the client - SHOULD NOT cache the data for future interactions. If directives include max-age or if - an Expires header is present, the client SHOULD cache the SDD data, if valid, up to the - expiration indicated, either at the time indicated by the Expires header or max-age seconds from - request time. -

-

- An Etag header MAY be offered with the SDD response. If so, after a resource's declared expiration, - a client MAY include an If-None-Match header containing the value of the Etag to - check if the resource is still fresh. If so the resource server may return a - 304 Not Modified response status code, and a new Expires or - Cache-Control header MAY be included, which the client SHOULD use to update the - cache expiration. -

- -

Register with Authorization Server

- -

- With the Registration URL in hand (the value of the x-imssf-registrationUrl property of - the SDD), the client SHOULD post a registration request to the authorization server. The - registration request MUST comply with OAuth 2.0 Dynamic Client Registration Protocol [RFC7591]. - The registration request MUST NOT require an Initial Access Token. Use of the 'Software Statement' - is NOT RECOMMENDED. The client registration request is sent to the Client Registration URL. The - request MUST be sent using HTTPS with TLS 1.2 or 1.3 protocol. -

-

- The properties of the JSON body MUST be implemented as described in the following table. All URLs - MUST use HTTPS (e.g. https://example.com/logo.png) and all URLs MUST have the same hostname. All - required properties MUST be present in the registration request in order for it to be accepted by - the authorization server. Arrays MUST be used even when a single value is to be sent. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
client_nameStringThe human-readable name of the client application.Required
client_uriURLA page that which describes the client application.Required
logo_uriURL - The logo of the client application. If present, the authorization server SHOULD - display this image to the end-user during approval. The value of this field MUST point - to a valid image file. - Required
tos_uriURL - The human-readable Terms of Service for the client application that describes a - contractural relationship between the end-user and the client that the end-user accepts - when authorizing the client. - Required
policy_uriURL - The human-readable Privacy Policy for the client application that describes how the - deployment organization collects, uses, retains, and discloses personal data. - Required
software_idString - A unique idenfitier assigned by the client application developer or software - published used by registration endpoints to identify the client application to be - dynamically registered. As described in [rfc7591], it SHOULD remain the same for all - instances of the client application software. - Required
software_versionString - A version identifier string for the client application software identifies by - software_id. The value of software_version SHOULD change on - any update to the client application software identified by the same - software_id. - Required
redirect_urisURL[]Array of redirection URI strings for use in the OAuth 2.0 flow.Required
scopeString - In the registration request, this is a string containing a space-separated list of scope - values that this client application may include when requesting access tokens. If - omitted, the authorization server MAY register a client application with a - default set of scopes. In the registration response, this is a list of scopes the - authorization server supports. -

- The list of scopes that can be requested are shown in § Scopes. -

-
Required
token_endpoint_auth_methodString - String indicator of the requested authentication method for the token endpoint. In this - specification only "client_secret_basic" is allowed: -
    -
  • - "client_secret_basic": The client application uses the HTTP Basic - authentication method as defined in OAuth 2.0. -
  • -
- If omitted, the default is "client_secret_basic". -
Optional
grant_typesString[] - Array of OAuth 2.0 grant type strings. In this specification only "authorization_code" - and refresh_token" are allowed: -
    -
  • - "authorization_code": The authorization code grant type defined in OAuth - 2.0. -
  • -
  • - "refresh_token": The refresh token grant type defined in OAuth 2.0. -
  • -
- If omitted, the default behavior is that the client will use only the - "authorization_code" grant type. -
Optional
response_typesString[] - Array of OAuth 2.0 response type strings. In this specification only "code" is allowed: -
    -
  • "code": The authorization code response type defined in OAuth 2.0.
  • -
- If omitted, the default is that the client will use only the "code" response type. -
Optional
contactsString[] - Array of strings representing ways to contact people responsible for this client, - typically email addresses. The authorization server MAY make these contact addresses - available to end-users for support requests for the client application. Privacy - constraints MUST be supported as applicable. - Optional
-
-
- Example 14: Sample registration request -
	POST /connect/register HTTP/1.1
-	Host: auth.example.com
-	Accept: application/json
-	Content-Type: application/json; charset=utf-8
-	
-	{
-		"client_name": "Example Client Application",
-		"client_uri": "https://client.example.com/",
-		"logo_uri": "https://client.example.com/logo.png",
-		"tos_uri": "https://client.example.com/terms",
-		"policy_uri": "https://client.example.com/privacy",
-		"software_id": "c88b6ed8-269e-448e-99be-7e2ff47167d1",
-		"software_version": "v4.0.30319",
-		"redirect_uris": [
-			"https://client.example.com/Authorize"
-		],
-		"token_endpoint_auth_method": "client_secret_basic",
-		"grant_types": [
-			"authorization_code",
-			"refresh_token"
-		],
-		"response_types": [
-			"code"
-		],
-		"scope": "https://purl.imsglobal.org/spec/ob/v3p0/scope/delete https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly https://purl.imsglobal.org/spec/ob/v3p0/scope/replace offline_access"
-}
-
-

- If the authorization server accepts the registration request, it will store the information - provided in the request and respond HTTP 201 Created with a registration response that - includes a set of client credentials for the client application to use when requesting access - tokens. All the information provided by the client application MUST be returned to the - client application, including modifications to the properties as the authorization server - deems necessary. An example response looks like this: -

-
-
- Example 15: Sample registration response -
HTTP/1.1 201 Created
-Content-Type: application/json; charset=utf-8
-
-{
-	"client_id": "4ad36680810420ed",
-	"client_secret": "af7aa0d679778e12",
-	"client_id_issued_at": 1565715850,
-	"client_secret_expires_at": 1597338250,
-	"client_name": "Example Client Application",
-	"client_uri": "https://client.example.com/",
-	"logo_uri": "https://client.example.com/logo.png",
-	"tos_uri": "https://client.example.com/terms",
-	"policy_uri": "https://client.example.com/privacy",
-	"software_id": "c88b6ed8-269e-448e-99be-7e2ff47167d1",
-	"software_version": "v4.0.30319",
-	"redirect_uris": [
-		"https://client.example.com/Authorize"
-	],
-	"token_endpoint_auth_method": "client_secret_basic",
-	"grant_types": [
-		"authorization_code",
-		"refresh_token"
-	],
-	"response_types": [
-		"code"
-	],
-	"scope": "https://purl.imsglobal.org/spec/ob/v3p0/scope/delete https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly https://purl.imsglobal.org/spec/ob/v3p0/scope/replace offline_access"
-}
-
-

- The following table describes the properties present in the client registration response that were - not included in the request. These are all REQUIRED properties. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
client_idString - An OAuth 2.0 client identifier string. The value SHOULD NOT be currently valid for any - other registered client. - Required
client_secretStringAn OAuth 2.0 client secret string.Required
client_id_issued_atNonNegativeInteger - - The time at which the client_id was issued. The time is represented as the number of - seconds from 1970-01-01T00:00:00Z as measured in UTC until the date/time of issuance. - Required
client_secret_expires_atNonNegativeInteger - - The time at which the client_secret will expire. MAY be 0 for no - expiration. The time is represented as the number of seconds from 1970-01-01T00:00:00Z - as measured in UTC until the date/time of expiration. - Required
-

- When a registration error condition occurs, the authorization server returns an HTTP 400 status code - (unless otherwise specified) with content type "application/json" consisting of a JSON object - describing the error in the response body. The properties used are: -

- - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescriptionRequired
errorRegistrationErrorThe error.Required
errorASCII StringHuman-readable ASCII text description of the error used for debugging.Optional
- -
- - -
- -

7.1.2 Obtaining Tokens

- -
- Sequence diagram for obtaining access tokens when using the ACG flow -
Figure 8 Sequence diagram for obtaining access tokens when using the ACG flow
-
-

- Obtaining an access token using an authorization code has two steps: -

- -

- Once obtained, the client can freely re-use the access token up until the token's expiry time, so - that the client need not repeat steps of obtaining an authorization code and requesting an access - token for every API request. Token refresh is also available (see § Token Refresh Request). -

- -
Authorization Request
- -

- After the client application is registered with the authorization server as described in - § 7.1.1 Dynamic Client Registration, the client application then MAY initiate an authorization request - as described in Section 4.2 of the IMS Security Framework [SEC-11] by redirecting the user to the - authorizationUrl as declared in the resource server's Service Description Document - (SDD). -

-

- In the OAuth 2.0 Security Best Practices document [OAUTH2-SBP] the use of Proof Key for Code - Exchange (PKCE) [RFC7636] is recommended in order to (with the help of the authorization server) detect and prevent attempts to inject (replay) authorization codes into the authorization - response. When using IMS specifications, PKCE MUST be used to protect Authorization Code Grant based - access. The PKCE has two stages: -

    -
  • - First the client MUST supply a code_challenge and - code_challenge_method in the request for an authorization code. The authorization server is responsible for associating the code_challenge with the issued - authorization code. -
  • -
  • - Then the client MUST supply the code_verifier in the Access Token Request, and - the authorization server verifies the code_verifier. -
  • -
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameTypeDescriptionRequired
response_typeStringValue MUST be set to "code".Required
client_idString - The client application identifier. MUST be the client_id provided - in - the Dynamic Client Registration § Register with Authorization Server response. - Required
redirect_uriURL - The client application's redirection endpoint. MUST match one of the - redirect_uris in the § 7.1.1 Dynamic Client Registration request. Although this is - optional in the IMS Security Framework [SEC-11], it is REQUIRED by this - specification. - Required
scopeString - The scope of the authorization request. The authorization server is responsible - for - validating the scopes identified in the request and the response MUST include a - scope - parameter which confirms this list or comprises a subset of the services requested. - Required
stateString - An opaque value used by the client application to maintain state between the - request - and callback. The authorization server includes this value when redirecting the - web browser back to the client. This parameter MUST be used for preventing - cross-site request forgery. - Required
code_challengeStringThis is BASE64URL-ENCODE(SHA256(ASCII(code_verifier))).Required
code_challenge_methodString - This MUST have a value of "S256" to indicate the SHA256 code verifier transformation - method is used. - Required
-

- All of the authorization request parameters are encoded in the authorization request as query - string parameters. The request MUST be made by redirecting the browser to the OAuth 2.0 - Authorization endpoint. The request MUST use HTTPS with TLS 1.2 or 1.3 protocol. -

-
-
- Example 16: Sample ACG authorization request (line breaks for clarity) -
HTTP/1.1 302 Found
-Location: https://auth.example.com/authorize?
-	client_id=4ad36680810420ed
-	&response_type=code
-	&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%ob%2Fv3p0%2Fscope%2Fassertion.readonly%20offline_access
-	&redirect_uri=https%3A%2F%client.example.com%2FAuthorize
-	&state=26357667-94df-4a14-bcb1-f55449ddd98d
-	&code_challenge=XeDw66i9FLjn7XaecT_xaFyUWWfUub02Kw118n-jbEs
-	&code_challenge_method=S256
-
- -
Authorization Response
- -

- If the redirect_uri matches a known client_id, the authorization server SHOULD present a UI asking the user to authenticate themself and grant the access - request. The authorization server SHOULD display the client_name, - client_uri, logo_uri, tos_uri, and policy_uri - collected during Dynamic Client Registration to the user to help them decide whether to grant - the access request. -

-

- If the user authorizes the client application to access their resources with the requested - scopes, the authorization server MUST redirect the browser back to the redirect_uri - with the code, scope, and state query string parameters. -

-

- The Authorization Code MUST be used only once. A lifetime for the authorization code of 600 seconds - (10 minutes) is RECOMMENDED. If an authorization code is used more than once, the authorization server MUST deny the request and SHOULD revoke (when possible) all tokens previously issued based - on that authorization code. The authorization code is bound to the client identifier and - redirection URI. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameTypeDescriptionRequired
codeStringThe authorization code.Required
scopeString - The authorized scope for the access request (this MAY be a subset of the scopes in the - request). The value is a space delimited set of scopes. - Required
stateString - The opaque value supplied by the client to maintain state between the request and - callback. - Required
-
-
- Example 17: Sample ACG authorization response (line breaks for clarity) -
HTTP/1.1 302 Found
-Location https://client.example.com/Authorize?
-	code=dcf95d196ae04d60aad7e19d18b9af755a7b593b680055158b8ad9c2975f0d86
-	&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%ob%2Fv3p0%2Fscope%2Fassertion.readonly%20offline_access
-	&state=26357667-94df-4a14-bcb1-f55449ddd98d
-
- -
Authorization Error Response
- -

- If the authorization server does not recognize the client applications's redirection - endpoint from a prior connection with this client application, the authorization server - SHOULD inform the user of the error and MUST NOT automatically redirect to the web browser - to the invalid redirection URI. -

-

- If the user denies the authorization request or if the request fails for reasons other than a - missing or invalid redirection URI, the authorization server informs the client by adding - the following parameters to the query component of the redirection URI. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameTypeDescriptionRequired
errorAuthorizationError - A single ASCII [RFC20] error code from the AuthorizationError vocabulary. - Required
error_descriptionString - Human-readable ASCII [RFC20] text providing additional information, used to assist the - client developer in understanding the error that occurred. Values for the - "error_description" parameter MUST NOT include characters outside the set %x20-21 / - %x23-5B / %x5D-7E. -
error_uriURI - A URI identifying a human-readable web page with information about the error, used to - provide the client developer with additional information about the error. Values for the - "error_uri" parameter MUST conform to the URI-reference syntax and thus MUST NOT include - characters outside the set %x21 / %x23-5B / %x5D-7E. -
stateString - The opaque value supplied by the client to maintain state between the request and - callback. - Required
-
-
- Example 18: Sample authorization error response -
HTTP/1.1 302 Found
-Location: https://client.example.com/cb?error=access_denied&state=xyz
-
- -
Access Token Request
-

- With the supplied code, the client application SHOULD attempt to exchange the - code for an access_token. The client application makes an - authorization grant POST request to the tokenUrl as declared in the resource server's Discovery Document. The HTTP POST request MUST include a Basic authorization header with - the client_id and client_secret provided in the registration response. The - body of the token request MUST include the following form fields: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Field NameTypeDescriptionRequired
grant_typeStringValue MUST be set to "authorization_code".Required
codeStringThe authorization code received from the authorization server.Required
redirect_uriURLThe client application's redirection endpoint.Required
scopeStringThe scope of the access request.Required
code_verifierStringThe PKCE code verifier.Required
-
-
- Example 19: Sample ACG token request (line breaks for clarity) -
POST /token HTTP/1.1
-Host: auth.example.com
-Authorization: Basic NDE2ZjI1YjhjMWQ5OThlODoxNWQ5MDA4NTk2NDdkZDlm
-Content-Type: application/x-www-form-urlencoded
-
-grant_type=authorization_code
-	&code=7c7a73263ee14b2b48073d0615f286ec74f6636689046cb8dbede0b5e87a1338
-	&redirect_uri=https%3A%2F%client.example.com%2FAuthorize
-	&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fob%2Fv3p0%2Fscope%2Fassertion.readonly+offline_access
-	&code_verifier=mYUQfKNgI1lSbY8EqtvNHLPzu0x%2FcVKO3fpWnX4VE5I%3D
-
- -
Access Token Response
- -

- If the authorization server grants this request (see Section 5.1 in [RFC6749] for the detailed - description), it returns HTTP 200 OK status code with content type "application/json" - consisting of a JSON object containing the access token and its expiry lifetime (IMS recommends a - default expiry lifetime of 3600 seconds, one hour, for access tokens), optionally a refresh token, - and confirms the set of scopes supported by the access token: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Property NameTypeDescriptionRequired
access_tokenStringThe access token issued by the authorization server.Required
token_typeStringThe type of the token issued. The case insensitive value MUST be "bearer".Required
scopeStringThe scope of the access token. This is a space-separated list of scopes.Required
expires_inPositiveInteger - The lifetime in seconds of the access token. For example, the value "3600" denotes that - the access token will expire in one hour from the time the response was generated. IMS - recommends a default expiry lifetime of 3600 seconds, one hour, for access tokens. If - omitted, the authorization server SHOULD provide the expiration time via other means or - document the default value. - Optional
refresh_tokenString - The refresh token, which can be used to obtain new access tokens using the same - authorization grant as described in § Token Refresh Request. - Optional
-
-
- Example 20: Sample ACG token response -
HTTP/1.1 200 OK
-Cache-Control: no-store, no-cache, max-age=0
-Pragma: no-cache
-Content-Type: application/json; charset=UTF-8
-
-{
-	"access_token": "863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92",
-	"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
-	"expires_in": 3600,
-	"token_type": "Bearer",
-	"scope": "https://purl.imsglobal.org/spec/ob/v3p0/scope/assertion.readonly offline_access"
-}
-
- -
Access Token Error Response
- -

- The authorization server MAY decide not to issue an access token. This could be because the - request scopes are invalid, the credentials from the client may be invalid, etc. In this case the - authorization server MUST return an HTTP 400 Bad Request status code with content - type "application/json" consisting of a JSON object describing the error in the response body. The - properties used to describe the error are: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Property NameTypeDescriptionRequired
errorTokenErrorA single ASCII [RFC20] error code]. See Section 5.2 of [RFC6749].Required
error_descriptionASCIIString - Human-readable ASCII [RFC20] text providing additional information, used to assist the - client developer in understanding the error that occurred. Values for the - "error_description" parameter MUST NOT include characters outside the set %x20-21 / - %x23-5B / %x5D-7E. - Optional
error_uriURI - A URI identifying a human-readable web page with information about the error, used to - provide the client developer with additional information about the error. Values for the - "error_uri" parameter MUST conform to the URI-reference syntax and thus MUST NOT include - characters outside the set %x21 / %x23-5B / %x5D-7E. - Optional
-
-
- Example 21: Sample access token error response -
HTTP/1.1 400 Bad Request
-Content-Type: application/json;charset=UTF-8
-Cache-Control: no-store
-Pragma: no-cache
-
-{
-	"error": "invalid_request"
-}
-
-
- - - -
- -

7.1.3 Authenticating with Tokens

- -

- After obtaining an access_token and optionally a refresh_token using the - method above, a client application MAY issue request that access resources controlled by the - user on the resource server using the access_token in the HTTP Authorization header - [RFC2617] with a Bearer Token [RFC6750]. For example, a "getAssertions" - would look like this: -

-
-
- Example 22: Sample getAssertions request -
GET /tenant/ims/ob/v3p0/assertions HTTP/1.1
-Host: example.com 
-Authorization: Bearer 863DF0B10F5D432EB2933C2A37CD3135A7BB7B07A68F65D92
-Accept: application/ld+json
-
-
- -
- - -
-

7.2 Token Refresh

-

- The recommended value of the access token's expires_in attribute is 3600 i.e. one hour. This - means that the validity of the access token expires one hour after the time it was issued. -

-

- When requesting an access token as part of the Authorization Code Grant process, an authorization server - MAY return a 'Refresh Token'. The refresh token can be used to obtain an access token using the same - authorization grant: this is described in Section 6 of [RFC6749]. The use of the Refresh Token avoids the - choreography for obtaining the credentials to gain access to the authorization server. -

-

- An Authorization Server is NOT REQUIRED to support token refresh. -

- -

Token Refresh Request

- -

- If the access_token is expired or about to expire, and the client application received - a refresh_token, the client application can use OAuth 2.0 Token Refresh to get a new - access_token and refresh_token. -

-

- The client makes a refresh POST request to the token endpoint by adding the following parameters - using the "application/x-www-form-urlencoded" format in the HTTP request entity-body: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameTypeDescriptionRequired
grant_typeStringValue MUST be set to "refresh_token".Required
refresh_tokenStringThe refresh token issued to the client.Required
scopeString - The scope of the access request. The requested scope MUST NOT include any scope not - originally granted by the user, and if omitted is treated as equal to the scope - originally granted by the user. - Required
-
-
- Example 23: Sample ACG token refresh request (line breaks for clarity) -
POST /token HTTP/1.1
-Host: auth.example.com
-Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
-Content-Type: application/x-www-form-urlencoded
-
-grant_type=refresh_token
-	&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
-	&scope=https%3A%2F%2Fpurl.imsglobal.org%2Fspec%2Fob%2Fv3p0%2Fscope%2assertion.readonly
-
- -

Token Refresh Response

- -

- If valid and authorized, the authorization server issues a new access token and optionally a new - refresh token as described earlier in § Access Token Response. If the request failed verification or - is invalid, the authorization server returns an error response as described earlier in - § Access Token Error Response. -

-
- - -
- -

7.3 Token Revocation

- -

- There may be deployments in which revocation of an access token is useful. The Token Revocation process is - based upon [RFC7009]. The client requests the revocation of a particular token by making an HTTP POST - request (using TLS) to the token revocation endpoint URL. Note that [RFC7009] states that implementations - MUST support the revocation of refresh tokens and SHOULD support the revocation of access tokens. -

- -

Token Revocation Request

- -

- The client constructs the request by including the following parameters using the - "application/x-www-form-urlencoded" format in the HTTP request entity-body: -

- - - - - - - - - - - - - - - - - - - - - - - -
Parameter NameTypeDescriptionRequired
tokenStringThe token that the client wants to get revoked.Required
token_type_hintStringMUST be set to either "access_token" or "refresh_token".Required
-
-
- Example 24: Sample token revocation request -
POST /revoke HTTP/1.1
-Host: auth.example.com
-Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
-Content-Type: application/x-www-form-urlencoded
-
-token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token
-
- -

Token Revocation Response

- -

- The authorization server responds with HTTP 200 OK status code if the token has been - revoked successfully or if the client submitted an invalid token. -

-

- When the request for revocation is rejected, the authorization server returns an error response as - described earlier in § Access Token Error Response with an error code of "unsupported_token_type". -

-
- -
- - - -

8. Data Integrity

This section describes mechanisms for ensuring the authenticity and integrity of AssertionCredential documents and payloads. For general information about data integrity, please see Data Integrity 1.0.

8.1 Proofs

A data integrity proof is comprised of information about the proof, parameters required to verify it, and the proof value itself. Please see the Proof class for details.

To ensure interoperability, this specification requires conforming implementations support ...

8.1.1 [Proof One]

8.1.2 [Proof Two]

8.2 Algorithms

Issue 5
- See Algorithms. -

8.2.1 Proof Algorithm

Issue 6
- See Proof Algorithm. -

8.2.2 Proof Verification Algorithm

8.2.3 Create Verify Hash Algorithm

8.3 Security Considerations

- -

9. Best Practices and Implementation Guide

This section is non-normative.

9.1 Terminology

Some of the terms used in this section:

    -
  • Credential: A set of one or more claims made by an issuer. A verifiable credential is a tamper-evident credential that has authorship that can be cryptographically verified. Verifiable credentials can be used to build verifiable presentations, which can also be cryptographically verified.
  • -
  • DID URL: A DID plus any additional syntactic component that conforms to the definition in Section 3.2 DID URL Syntax of [DID-CORE]. This includes an optional DID path (with its leading / character), optional DID query (with its leading ? character), and optional DID fragment (with its leading # character).
  • -
  • Holder: The entity that makes a presentation. The holder may also be the issuer or subject of one or more credentials in the presentation.
  • -
  • Linked Data Proof: A type of embedded signature proof.
  • -
  • Presentation: Data derived from one or more verifiable credentials, issued by one or more [=issuers=, that is shared with a specific verifier. A verifiable presentation is a tamper-evident presentation encoded in such a way that authorship of the data can be trusted after a process of cryptographic verification.
  • -
  • Subject: A person about which claims are made.
  • -
  • Verifier: The entity that receives a verifiable credential or verifiable presentation and verifies the credential or presentation has not been tampered with.
  • -

9.2 Support for Decentralized Identifiers (DIDs)

This specification supports the use of DID URLs as an identifier for the issuer and subject of a credential, and the holder of a presentation. This specification also supports the use of DID URLs to identify the public key used to verify verifiable credentials and verifiable presentations with Linked Data Proofs. Until the Decentralized Identifiers (DIDs) v1.0 specification is approved by W3C and this specification is updated, conformance will not require DID support.

- -

10. Conformance and Certification Guide

Note
- -

A. Serialization

The data model as described in Appendix § B. Data Model is the canonical structural representation of an Open Badges verifiable credential (AchievementCredential) and verifiable presentation (ObPresentation). All serializations are representations of that data model in a specific format. This section specifies how the data model is realized in JSON-LD and plain JSON.

A.1 JSON

The data model can be encoded in Javascript Object Notation (JSON) [RFC8259] by mapping property types in the Data Model to JSON types as follows:

    -
  • Numeric values representable as [IEEE-754] MUST be represented as a Number type.
  • -
  • Boolean values MUST be represented as a Boolean type.
  • -
  • Sequence values MUST be represented as an Array type.
  • -
  • Unordered sets of values MUST be represented as an Array type.
  • -
  • Sets of properties MUST be represented as an Object type.
  • -
  • Other values MUST be represented as a String type.
  • -

When serializing the JSON, these rules MUST be followed:

    -
  • Properties defined as a single value in the Data Model MUST be represented as a single value, not a JSON Array.
  • -
  • Properties defined as an Array MUST be represented as a JSON Array, NOT as a single value.
  • -
  • Properties defined as a Class and not a Primitive or Derived Type MUST be represented as an JSON Object, NOT as a URI.
  • -
  • Properties that have a null value or empty value MUST be ommitted from the serialized JSON. This includes empty Arrays.
  • -

A.2 JSON-LD

[JSON-LD] is a JSON-based format used to serialize Linked Data. The syntax is designed to easily integrate into deployed systems already using JSON, and provides a smooth upgrade path from JSON to [JSON-LD]. It is primarily intended to be a way to use Linked Data in Web-based programming environments, to build interoperable Web services, and to store Linked Data in JSON-based storage engines.

Instances of the data model are encoded in [JSON-LD] in the same way they are encoded in JSON (Section § A.1 JSON), with the addition of the @context property. The JSON-LD context is described in detail in the [JSON-LD] specification and its use is elaborated on in Section § C. Extensions.

Multiple contexts MAY be used or combined to express any arbitrary information about verifiable credentials in idiomatic JSON. The JSON-LD context for all verifiable credentials, available at https://www.w3.org/2018/credentials/v1, is a static document that is never updated and can therefore be downloaded and cached client side. The associated vocabulary document for the Verifiable Credentials Data Model is available at https://www.w3.org/2018/credentials. The JSON-LD context for Open Badges verifiable credentials is available at https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld. The associated vocabulary document for the Open Badges Data Model is available at https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.html. Open Badges verifiable credentials MUST be serialized with both JSON-LD contexts.

Note
- Though this specification requires that a @context property be present, it is not required that the value of the @context property be processed using JSON-LD. This is to support processing using plain JSON libraries, such as those that might be used when the verifiable credential is encoded as a JWT. All libraries or processors MUST ensure that the order of the values in the @context property is what is expected for the specific application. Libraries or processors that support JSON-LD can process the @context property using full JSON-LD processing as expected. -
-
- Example 25: JSON-LD @context serialization -
"@context": [
-  "https://www.w3.org/2018/credentials/v1",
-  "https://purl.imsglobal.org/spec/ob/v3p0/context/ob_v3p0.jsonld"
-]
-
- -
-

B. Data Model

- - -

B.1 org.1edtech.ob.v3p0.model

-

- The data models in this section are specific to Open Badges Specification v3.0. -

-
-

B.2 org.1edtech.ob.v3p0.model

-

- The data models in this section are shared by Open Badges Specification v3.0 and Comprehensive Learner Record Standard v2.0. -

-
-
-
- Example 26: Sample AssertionCredential -
{
-  "@context": [
-    "https://www.w3.org/2018/credentials/v1",
-    "https://imsglobal.github.io/openbadges-specification/context.json"
-  ],
-  "id": "http://example.edu/credentials/3732",
-  "type": ["VerifiableCredential", "AssertionCredential"],
-  "issuer": {
-    "id": "https://example.edu/issuers/565049",
-    "name": "Example University"
-  },
-  "issuanceDate": "2010-01-01T00:00:00Z",
-  "credentialSubject": {
-    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21"
-  },
-  "credentialSchema": [{
-    "id": "https://imsum2.herokuapp.com/jsonschema?classId=org.1edtech.ob.v3p0.assertioncredential.class",
-    "type": "JsonSchemaValidator2020"
-  }]
-}
-
-
-
-

B.3 org.1edtech.ob.v3p0.model

-

- The data models in this section are shared by all IMS service specifications. -

-
-

B.4 org.1edtech.ob.v3p0.model

-

- The data models in this section are shared by all IMS service specifications. -

-
-

B.5 org.1edtech.ob.v3p0.model

-

- The data models in this section are shared by all IMS specifications. -

-
-

B.6 org.1edtech.ob.v3p0.model

-

- The data models in this section are shared by all IMS specifications. -

-
- - -
- -

C. Extensions

C.1 Extending the Data Model

C.2 Extending Enumerated Vocabularies

C.3 Extending the API

- -

D. List of Figures

-

E. Issue Summary

-

Issue Summary

-
- -
-

F. Revision History

- - - - - - - - - - - - - - - - - -
StatusDoc VersionRelease DateComments
Base Document1.0Work in progress
-
- -
- This is a preview of the IMS Open Badges Specification v3.0 -

Do not attempt to implement this version of the specification. Do not - reference this version as authoritative in any way. -

-
- - - -

G. References

-

G.1 Normative references

-
[DATA-INTEGRITY]
Data Integrity 1.0. Manu Sporny; Dave Longley. Credentials Community Group. CG-DRAFT. URL: https://w3c-ccg.github.io/data-integrity-spec/
[OAUTH2-SBP]
OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics-11. IETF. December 28, 2019. URL: https://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/
[OPENAPIS-3.0]
OpenAPI Specification 3.0. OpenAPI Initiative (Linux Foundation). July 2017. URL: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md
[RFC20]
ASCII format for network interchange. V.G. Cerf. IETF. October 1969. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc20
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC2617]
HTTP Authentication: Basic and Digest Access Authentication. J. Franks; P. Hallam-Baker; J. Hostetler; S. Lawrence; P. Leach; A. Luotonen; L. Stewart. IETF. June 1999. Draft Standard. URL: https://www.rfc-editor.org/rfc/rfc2617
[RFC6749]
The OAuth 2.0 Authorization Framework. D. Hardt, Ed.. IETF. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6749
[RFC6750]
The OAuth 2.0 Authorization Framework: Bearer Token Usage. M. Jones; D. Hardt. IETF. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6750
[RFC7009]
OAuth 2.0 Token Revocation. T. Lodderstedt, Ed.; S. Dronia; M. Scurtescu. IETF. August 2013. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7009
[RFC7591]
OAuth 2.0 Dynamic Client Registration Protocol. J. Richer, Ed.; M. Jones; J. Bradley; M. Machulak; P. Hunt. IETF. July 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7591
[RFC7636]
Proof Key for Code Exchange by OAuth Public Clients. N. Sakimura, Ed.; J. Bradley; N. Agarwal. IETF. September 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7636
[SEC-11]
IMS Global Security Framework v1.1. C. Smythe; C. Vervoort; M. McKell. IMS Global Learning Consortium. July 19th, 2021. IMS Final Release. URL: https://www.imsglobal.org/spec/security/v1p1/
-
-

G.2 Informative references

-
[CEDS]
Common Education Data Standards (CEDS) Version 7 Data Model Guide. URL: https://ceds.ed.gov/pdf/CEDS-7-0-Data-Model-Guide_for_508.pdf
[CLR-20]
Comprehensive Learner Record Standard v2.0. IMS Global Learning Consortium. IMS Base Document. URL: https://www.imsglobal.org/spec/clr/v2p0/
[did-core]
Decentralized Identifiers (DIDs) v1.0. Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed. W3C. 3 August 2021. W3C Proposed Recommendation. URL: https://www.w3.org/TR/did-core/
[did-use-cases]
Use Cases and Requirements for Decentralized Identifiers. Joe Andrieu; Phil Archer; Kim Duffy; Ryan Grant; Adrian Gropper. W3C. 17 March 2021. W3C Note. URL: https://www.w3.org/TR/did-use-cases/
[IEEE-754]
IEEE Standard for Floating-Point Arithmetic. Institute of Electrical and Electronics Engineers. 29 August 2008. URL: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933
[JSON-LD]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 3 November 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld/
[json-ld11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
[OB-20]
Open Badges v2.0. Otto, Nate; Bohrer, Jeff; Cook, Timothy; Gylling, Markus; Hripak, Alexander; Pitcher, Justin. IMS Global Learning Consortium. April 2018. IMS Final Release. URL: https://www.imsglobal.org/spec/ob/v2p0/
[OB-21]
Open Badges Specification v2.1. Jeff Bohrer; Andy Miller. IMS Global Learning Consortium. October 7, 2020. IMS Candidate Final Public. URL: https://www.imsglobal.org/spec/ob/v2p1/
[OB-30]
Open Badges Specification v3.0. IMS Global Learning Consortium. IMS Base Document. URL: https://www.imsglobal.org/spec/ob/v3p0/
[OB-CERT-30]
Open Badges Specification Conformance and Certification Guide v3.0. IMS Global Learning Consortium. IMS Base Document. URL: https://www.imsglobal.org/spec/ob/v3p0/cert/
[OB-JSON-30]
Open Badges Specification JSON Schema v3.0. IMS Global Learning Consortium. IMS Base Document. URL: https://www.imsglobal.org/spec/ob/v3p0/schema/json
[OPENAPIS]
OpenAPI Specification. Darrell Miller; Jeremy Whitlock; Marsh Gardiner; Mike Ralphson; Ron Ratovsky; Uri Sarid; Tony Tam; Jason Harmon. OpenAPI Initiative. URL: https://www.openapis.org/
[RFC3629]
UTF-8, a transformation format of ISO 10646. F. Yergeau. IETF. November 2003. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3629
[RFC8259]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8259
[RFC8949]
Concise Binary Object Representation (CBOR). C. Bormann; P. Hoffman. IETF. December 2020. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8949
[RSD]
Rich Skill Descriptors. URL: https://www.openskillsnetwork.org/rsd
[vc-data-model]
Verifiable Credentials Data Model v1.1. Manu Sporny; Grant Noble; Dave Longley; Daniel Burnett; Brent Zundel; Kyle Den Hartog. W3C. 3 March 2022. W3C Recommendation. URL: https://www.w3.org/TR/vc-data-model/
-
-

H. List of Contributors

-

The following individuals contributed to the development of this document:

- - - - - - - - - -
NameOrganizationRole
Nate OttoConcentric SkyEditor
Kerri LemoieConcentric SkyEditor
Phillip LongConcentric SkyEditor
-
-
-

- IMS Global Learning Consortium, Inc. ("IMS Global") is publishing the - information contained in this document ("Specification") for purposes of - scientific, experimental, and scholarly collaboration only. -

-

- IMS Global makes no warranty or representation regarding the accuracy or - completeness of the Specification. -

-

This material is provided on an "As Is" and "As Available" basis.

-

- The Specification is at all times subject to change and revision without - notice. -

-

- It is your sole responsibility to evaluate the usefulness, accuracy, and - completeness of the Specification as it relates to you. -

-

- IMS Global would appreciate receiving your comments and suggestions. -

-

- Please contact IMS Global through our website at - http://www.imsglobal.org. -

-

- Please refer to Document Name: Open Badges Specification - 3.0 -

-

Date: 10 March 2022

-
-
-
\ No newline at end of file From 58273d8a3fbecbce8bb72b9a4c7522d25199b97a Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:16:32 -0400 Subject: [PATCH 07/24] Delete ob_next/README.md --- ob_next/README.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 ob_next/README.md diff --git a/ob_next/README.md b/ob_next/README.md deleted file mode 100644 index 5dfdf775..00000000 --- a/ob_next/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# OB Next Collection Box - -This folder is a place to store files related to **potential** new features of future versions of the Open Badges specification as approved by the IMS OB Project Group. From b9d48a38ad397e9f88e3971489dc86dd1e584a75 Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:17:02 -0400 Subject: [PATCH 08/24] Delete ob_next/use-cases.md Only use cases was for Rubrics in OB3, which was completed. --- ob_next/use-cases.md | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 ob_next/use-cases.md diff --git a/ob_next/use-cases.md b/ob_next/use-cases.md deleted file mode 100644 index 0230fc71..00000000 --- a/ob_next/use-cases.md +++ /dev/null @@ -1,40 +0,0 @@ -# Open Badges Next Use Cases - -This document contains use cases submitted by the members of the Open Badges Workgroup for consideration in the next -version of the Open Badges Specification. Each use case contains a title, user stories and/or information about a -specific problem or opportunity, information about the motivation or importance, and a description of a -specification-level capability or restriction that could serve the use case when implemented in the ecosystem. New use -cases may be submitted by pull request. All information submitted must be compatible with IMS Global intellectual -property rights policies for open implementation of specifications resulting from the contribution. - -When the next version of the specification is assigned a version number and drafted as draft documents, selected use -cases from this document will be incorporated, and this document will be deleted. - -## Describe a Rubric in a Badgeclass and associated Results in an Assertion -As an Issuer, I would like to augment a BadgeClass with a Rubric, which is a matrix of Rubric Criteria and Performance -Levels at which learners or recipients may be expected to perform. - -I would like to augment an Assertion of a BadgeClass that features a Rubric with a Result, which describes how a -particular learner or recipient performed in terms of an achieved Performance Level for one or more Rubric Criteria in -the BadgeClass that this Assertion recognizes. - -The related Comprehensive Learner Record specification added the concept of -[ResultDescription](https://www.imsglobal.org/sites/default/files/spec/clr/v1p0/InfoModel/clr_InfoModel.html#Data_ResultDescription) -and [Result](https://www.imsglobal.org/sites/default/files/spec/clr/v1p0/InfoModel/clr_InfoModel.html#Data_Result) to -CLR Achievements (BadgeClass) and Assertions, respectively. This concept is a natural fit with the matching Open Badges -classes and could be imported into the Open Badges Specification to enable badge issuers to describe the available -performance levels that assessments may recognize for a BadgeClass and the performance levels particular learners -achieved. Each ResultDescription has an identifier that is unique within the BadgeClass, and each Result in the -Assertion identifies which ResultDescription it applies to and which achievedLevel applies. - -This introduces the concept that an assertion may recognize an achievement that has not yet "passed" a threshold -"required level". The mere existence of an Assertion may no longer be enough to recognize that the Issuer's desired -criteria have been met to the full satisfaction of the Issuer, only that at least some progress toward those criteria -was made. This may pose complications with systems whose existing logic relies on the existence of an assertion. -Specific guidance for interpretation by inspectors or consumers should be provided in the specification for how such -assertions should be interpreted. - -The value of incorporating Rubrics into Open Badges comes from the ability to better describe achievement at a more -granular level. This potentially results in capabilities like understanding how an individual's skill has improved over -time across multiple Assertions of the same BadgeClass. Additionally, application forms and assessment forms within -applications that serve issuers might be automatically generated from Rubric data. From b4ff484ab46836ada460e3ccf34e7c6c2440599f Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:18:03 -0400 Subject: [PATCH 09/24] Delete ob_next/roadmap.md DIDs were added to OB3/CLR2 --- ob_next/roadmap.md | 68 ---------------------------------------------- 1 file changed, 68 deletions(-) delete mode 100644 ob_next/roadmap.md diff --git a/ob_next/roadmap.md b/ob_next/roadmap.md deleted file mode 100644 index c73df9af..00000000 --- a/ob_next/roadmap.md +++ /dev/null @@ -1,68 +0,0 @@ - -# Roadmap - -This document outlines the steps we believe are required to gain acceptance of DIDs in Open Badges along with usecases that align with the roadmap. - - -## Tasks - -Tasks define tangible work items that accomplish use cases and progress the timeline. - - Task | Notes | Status | -|-----------------|----------------|----------| -| Document "What is a DID" | Present in [did-in-badges](dids-in-badges.md) | Draft | -| Document "How to get a DID" | Present in [did-in-badges](dids-in-badges.md) | Draft | -| Document DIDs in Badges Value Proposition | Present in [did-in-badges](dids-in-badges.md) | Draft | -| Document Spec Changes | Present in [did-in-badges](dids-in-badges.md) | Draft | -| Pilot Program Proposal | Propose a pilot program with a pilot roadmap, check-ins with IMS staff and workgroup, identified low-risk high-reward items, and piloting principles | TODO | -| Extension Example | Example Extension/Additional Properties Approach AND Example next version “pure OB 2.2” of what this could look like. | TODO | - - -## Use Cases - -The use cases listed below are what we believe to be the enumeration of problems to be solved in adding DIDs to Open Badges. The order reflect current prioritization and is subject to change. - - Capability | Complexity | Potential Value | Priority | -|-----------------|----------------|-------------------|----------| -| Prove ownership of a DID as a potential recipient | lg | lg | 1 | -| Provide a proof that a particular host account is held by the holder of a particular DID | lg | lg | 1 | -| Determine if a DID-based issuer identity is a trustworthy representation of a real-world (“meatspace”) organization | lg | lg | 1 | -| Award a badge to a DID-based recipient | sm | md | 2 | -| Claim a DID as a recipient and present it to issuer & host | med | med | 2 | -| Include DID-based profile identification in Badge Connect APIs | med | med | 3 | -| Use a DID as an issuer identifier, tied to signing keys for assertions | med | lg | 3 | -| Describe a Badge Connect service (SIOP?) that I use in my DID document | med | med | 3 | - -## Timeline - -The timeline proposed is broken into three stages of three month intervals. The timeline is subject to changes. - -### Stage 1 - -**August 2020 - October 2020** - -- Recipient brings a DID to an Issuer platform. Issuer platform verifies their control of DID -- Alternatively an Issuer can generate DID for a Recipient -- Consumer trusts Issuer validation for a Recipient’s control of DID -- Create first draft of the specification -- Create supporting documentation for working with DIDs -- Create working sample as an OB Extension - -### Stage 2 - -**October 2020 - December 2020** - -- Look to standardize on technical standard (e.g. OIDC SIOP) for Issuers to validate Recipient control of DID -- Support DIDs in Badge Connect -- Look for two Badge Platforms to trial use of DIDs -- Refine supported DIDs based on experiences from Stage 1 -- Update draft specification - -### Stage 3 - -**December 2020 - February 2021** - -- Look to standardize on technical standard for Open Badge stakeholders (Backpacks, Displayers, Consumers) to validate Recipient control of DID -- Finalize specification -- Create compliance tooling -- Make it into OB v.Next From 182e4014641cc271be9bbb39bab071a3afb00575 Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:18:32 -0400 Subject: [PATCH 10/24] Delete ob_next/dids-in-badges.md DIDs added to OB3/CLR2 --- ob_next/dids-in-badges.md | 136 -------------------------------------- 1 file changed, 136 deletions(-) delete mode 100644 ob_next/dids-in-badges.md diff --git a/ob_next/dids-in-badges.md b/ob_next/dids-in-badges.md deleted file mode 100644 index 6a5e0303..00000000 --- a/ob_next/dids-in-badges.md +++ /dev/null @@ -1,136 +0,0 @@ -# Introduction - -## Design Goals and Rationale - -This draft proposal adds to the [Open Badges specification](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html) to enable recipients of badges to use [Decentralized Identifiers (DIDs)](https://w3c.github.io/did-core/) in their [IdentityObject](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#IdentityObject). The use of DIDs will enable recipients to use a cryptographically verifiable pseudonymous identifier in their issued Badges. For other stakeholders such as Issuers or Consumers DIDs enable cryptographic verification capabilities to ensure control of the Recipient over their badges. - -## Use Cases - -_This section is non-normative._ - -* A recipient of a Badge wants to use a DID as a pseudonymous identifier. - -* A candidate recipient of a Badge provides their DID to a Badge Issuer - -* A Badge Issuer generates a DID for a recipient - -* An Issuer leverages DID infrastructure to cryptographically verify that a recipient controls a DID identifier. - -* A Consumer leverages DID infrastructure to cryptographically verify that a recipient controls a Badge. - - -## Terminology - -The following terms are used throughout this document: - -* *Badge Issuer*: A service that allows for the creation of [BadgeClasses](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#BadgeClass) and the subsequent issuing of [Assertions](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Assertion) to recipients that conform to the Open Badges specification. Beginning with Open Badges 2.0, the candidate platform must issue a valid [Baked Badge](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Baking) and demonstrate how the recipient retrieves the Badge. - -* *Badge Displayer*: An application that displays verified badges to viewers. Beginning with Open Badges 2.0, the candidate platform must display a minimum set of badge metadata and support viewer-initiated verification of a Badge. - -* *Badge Host*: An application that can import, aggregate, and publicly host [Assertions](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Assertion) for recipients. It also supports export of Badges at user request. Beginning with Open Badges 2.0, the candidate platform must be able to import all formats of Open Badges as well as prove that Badge metadata is not lost upon export of the badge. - -* *DID*: [Decentralized Identifiers (DIDs)](https://w3c.github.io/did-core/) are a type of identifier that enables a verifiable, decentralized digital identity. - -* *ID*: Unique [IRI](https://tools.ietf.org/html/rfc3987) for the [Assertion](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Assertion). If using [Hosted Verification](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#HostedBadge), this should be the [URI](https://tools.ietf.org/html/rfc3986) where the assertion is accessible. For [Signed Assertions](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#SignedBadge), it is recommended to use a [UUID in the urn:uuid namespace](https://tools.ietf.org/html/rfc4122). - -# Value Proposition - -## What Is a DID? - -[Decentralized Identifiers](https://w3c.github.io/did-core), or DIDs, "are a new type of identifier to provide verifiable, decentralized digital identity." In brief, DIDs are URLs, often backed by a distributed ledger, that can be resolved to a "DID Document" containing cryptographic key material of which the "controller" can prove ownership. The identity provides a mechanism for trustable interactions with the subject of a DID. - -Unlike email addresses — controlled by a provider such as Google, Apple, or another corporation, or telephone numbers — controlled by telecom companies such as a Verizon, AT&T, and regulated by government agencies, DIDs are intended to be controlled by individual entities (individuals or organizations). This restriction is applied by the source the DID is backed with, which could be a centralized website (see: [did:github](https://github.com/decentralized-identity/github-did)), or a public decentralized blockchain (see: [did:btcr](https://w3c-ccg.github.io/didm-btcr)). DIDs enable high-trust interactions by leveraging public key cryptography. - -DIDs are a key piece of decentralized infrastructure that are called out specifically in the [Verifiable Credentials Data Model](https://www.w3.org/TR/vc-data-model/) and [Identity Hub](https://github.com/decentralized-identity/identity-hub/blob/master/explainer.md) specifications among many others in the Self Sovereign and Digital Identity space. - -An example DID document, [taken from the spec](https://w3c.github.io/did-core/#example-2-minimal-self-managed-did-document), is provided below: -``` -{ - "@context": "https://www.w3.org/ns/did/v1", - "id": "did:example:123456789abcdefghi", - "authentication": [{ - "id": "did:example:123456789abcdefghi#keys-1", - "type": "RsaVerificationKey2018", - "controller": "did:example:123456789abcdefghi", - "publicKeyPem": "-----BEGIN PUBLIC KEY...END PUBLIC KEY-----\r\n" - }], - "service": [{ - "id":"did:example:123456789abcdefghi#vcs", - "type": "VerifiableCredentialService", - "serviceEndpoint": "https://example.com/vc/" - }] -} -``` - -A corresponding example Verifiable Credential, where the subject (who the credential is issued to) is a DID: - -``` -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://www.w3.org/2018/credentials/examples/v1" - ], - "id": "http://example.edu/credentials/3732", - "type": ["VerifiableCredential", "UniversityDegreeCredential"], - "credentialSubject": { - "id": "did:example:123456789abcdefghi", - "degree": { - "type": "BachelorDegree", - "name": "Bachelor of Science and Arts" - } - }, - "proof": { ... } -} -``` - - -## How Does Someone Get a DID? - -There are two paths to get a DID: claim one yourself or join an Identity Platform that facilitates DIDs. A list of DID methods that are in development is [provided by the W3C](https://w3c.github.io/did-spec-registries/#did-methods). At present, there are over 50 DID methods! Each DIDs can be [“resolved”](https://w3c.github.io/did-core/#resolution) to a DID Document expressing information about the holder by resolvers that support the relevant DID method. Multiple DID resolution services have arisen, one such is hosted by the [DIF here](https://dev.uniresolver.io/). - -Typically, recipients will get a DID upon joining an Identity Platform supporting DIDs. There are a number of companies currently in or joining the Identity space to facilitate individuals getting DIDs. To obtain more information on a specific DID method, and how to attain a DID for that method, it is recommended to go to the [DID registry](https://w3c.github.io/did-spec-registries/#did-methods) and find the method-specific documentation. - -Recipients can have a single DID or multiple DIDs for greater privacy. DID management typically requires extensive infrastructure. When looking to claim a DID it is important to consider what a DID method, and Identity Platform provide for you: what security practices are being followed, what is the backing store for the DID, who makes up the organization(s) controlling the DID method, what are the legal implications of claiming such a DID, what DID operations are supported, and what control are you giving up, if any, in claiming a certain DID? - -## Why DIDs Make Open Badges Better - -The benefits of adding DIDs to Open Badges can be broken into three key points: security, portability, and interoperability. - -As of Open Badges v2.0, trust in Open Badges is obtained in two ways: signed assertions and hosting. Both are viable methods that allow for trusted interactions with Badges allowing Badges to be transmitted as JWTs and trust to be derived from a web host, often over TLS. Adding DIDs to Badges would allow new trust interactions. One could challenge a recipient to prove they control a DID, or, a Badge can be wrapped in a [Verifiable Presentation](https://w3c.github.io/vc-data-model/#presentations-0). Adding DIDs to Badges could even invite new signed assertion mechanisms using [Linked Data Proofs](https://w3c-ccg.github.io/ld-proofs). Giving DIDs to recipients enables individual attestation by design. Giving DIDs to issuers enables trusted issuance of Badges to trusted parties. - -Portability is the next important point. Most often, today, we see Badges in a Badge-host backpack. By adopting DIDs, Badges become more _[self sovereign](http://www.lifewithalacrity.com/2016/04/the-path-to-self-soverereign-identity.html)_ meaning that individuals can take control of their data without having to trust a corporation or other intermediary. With DIDs in a Badges, combined with innovations like the Badge Connect API, Badges could move freely between backpacks or other digital wallets a user controls. - -If we consider corporate email addresses, we find another portability benefit of moving to DIDs. With a corporate email address an individual may be issued an achievement in the form of a Badge that represents some training completed. Sometimes, this training may be useful to future employers; however, once an individual leaves a company they likely do not have access to their corporate email address, and consequently lose access to their Badge. If the Badge, instead, was issued to a DID, the individual would retain control of their DID and achievement independent of their employer. This is one such example, though many more can be imagined, that show the strength of user-centric identity that is decentralized and portable. - -Another strong benefits to DIDs is that they themselves are cryptographically verifiable. There are up-and-coming challenge protocols to better facilitate verifiability, but the concept is straight from a security textbook: if you claim to control a private key, I can challenge you to prove that control if I know your public key. DIDs expose public keys for exactly this purpose. Unlike email addresses, where other schemes like email-verification-links or seperate multi-factor-auth (MFA) solutions are needed, DIDs are verifiable out of the box. - -The last main benefit of adding DIDs to Open Badges is interoperability. Open Badges are an excellent technology for displaying achievement. There are other technologies that have complementary strengths like [Verifiable Credentials](https://w3c.github.io/vc-data-model), which aren't so user friendly or visually appealing, but do contain trusted data in a similar way to Badges. Verifiable Credentials are one of many technologies utilizing DIDs, that could interoperate with Open Badges should they share the same recipient type. Tie-ins to other DID-infrastructure both strengthens the capabilities and reach of Open Badges, while simultaneously building a stronger decentralized ecosystem. - -DIDs in Badges give new optionality to issuers and recipients operating in the Badging ecosystem, enabling, if one wishes, high-trust interactions, tie-in to other up-and-coming standards, and contributes to a narrative of user-centric data. - -## Considerations for DIDs in Open Badges - -Though Decentralized Identifiers are an official W3C specification, they have yet to see widespread adoption. Drawbacks in this sense are similar to drawbacks for all new, or up-and-coming technologies. We believe this drawback is minimized by the endorsement of the DID specification by the W3C, and a number of prominent technology companies and enthusiasts. - -Additionally, introducing DIDs welcomes complexity around trust interactions and dealing with cryptographic operations. It is not trivial to properly implement systems that handle key management, signing, and verification. Much dilligence and attention must be paid to properly adhereing to security standards and guidelines, and keeping an eye on the space for potential vulnerabilities, leaks, and the advancement of the technology at hand. - -Related to the previous point is the fact that not all DID methods are created equal. For example, if we take a look at the [did:key](https://w3c-ccg.github.io/did-method-key/) method we can see it is a fairly lightweight DID. The method is legitimate, and has appropriate uses, but, it lacks _key rotation_, _deactivation_, and numerous other properties of robustness that other DID methods offer. It may not be the best choice when advocating for _durable_ DIDs. This same scrutiny should be applied to all DID methods that implementers choose to support when incorporating DIDs in Badges. - -The proposal as it stands is an optional addition to the specification. Those who do not choose to uptake it will still be compliant with the Open Badge standard. However, as we see an increase in mobility for Badges, with the Connect API, there may be uptake required for Badging Platforms to support DIDs in Badges. - -# Sample Changes to Open Badge Specification - -## Modified Profile Identifier Properties -When [Profiles](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Profile) are referenced elsewhere in the Open Badges Specification, they may be identified precisely by dereferenceable id, such as when a [BadgeClass](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#BadgeClass) links to an issuer Profile by its id URL. Other times, such as when identifying the recipient of an [Assertion](https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Assertion), Profiles may be identified by the value of a specific property unique to the individual or organization represented in a Profile. All properties that serve as profile identifiers must have values with a string datatype. - -Properties considered serviceable identifiers include: - -**email** - -**url** - -**telephone** - -**id** - -Many platforms that allow badge issuers and recipients to establish their identities as Profiles support only [email](https://schema.org/email) as an identifier property. From e183d9c060a6f8cd5f985c70e751f86b31da9962 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 17 Apr 2026 12:31:12 +0200 Subject: [PATCH 11/24] Update revocation mechanism in Displayer certification profile --- ob_v3p0/cert/displayer.md | 2 +- ob_v3p0/cert/ob-cert-v3p0.html | 12 ++++++++++-- ob_v3p0/microsites/cert/displayer.md | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ob_v3p0/cert/displayer.md b/ob_v3p0/cert/displayer.md index 4f392d62..841738d2 100644 --- a/ob_v3p0/cert/displayer.md +++ b/ob_v3p0/cert/displayer.md @@ -8,7 +8,7 @@ An Open Badges Displayer is an application that displays and verifies badges for The tests within this section refer to possible values of the status of a badge. The meaning of these values and how to determine them from a credential is defined in sections 9.1 and 9.2 of [[OB-30]]. As a quick summary: - - A Credential is revoked if the \`credentialStatus\` property is present, and the \`type\` of the CredentialStatus object is "1EdTechRevocationList". + - A Credential is revoked if the \`credentialStatus\` property is present, and the \`type\` of the CredentialStatus object is "BitstringStatusListEntry", and the \`statusPurpose\` of the CredentialStatus object is "revocation". - A Credential is expired if the current date and time is after the \`validUntil\`. ### Tests {#display-tests} diff --git a/ob_v3p0/cert/ob-cert-v3p0.html b/ob_v3p0/cert/ob-cert-v3p0.html index e040dd0f..e48d1afb 100644 --- a/ob_v3p0/cert/ob-cert-v3p0.html +++ b/ob_v3p0/cert/ob-cert-v3p0.html @@ -23,9 +23,9 @@ specNature: "normative", // spec nature is "normative" or "informative" specType: "cert", // spec type is "main", "cert", "impl", "errata" or other agreed upon string specVersion: "3.0", - docVersion: "1.3", + docVersion: "1.4", specStatus: "Final Release", - specDate: "December 12, 2025", + specDate: "April 17, 2026", contributors: _contributors, localBiblio: _localBiblio, iprs: _iprs, @@ -123,6 +123,14 @@

Revision History

Added JSON-LD Safe mode requirement for issuer certification profile. + + Final + 1.4 + April 17, 2026 + + Updated revocation mechanism in Displayer certification profile. + + diff --git a/ob_v3p0/microsites/cert/displayer.md b/ob_v3p0/microsites/cert/displayer.md index 93176a83..5e9b19e3 100644 --- a/ob_v3p0/microsites/cert/displayer.md +++ b/ob_v3p0/microsites/cert/displayer.md @@ -6,7 +6,7 @@ An Open Badges Displayer is an application that displays and verifies badges for The tests within this section refer to possible values of the status of a badge. The meaning of these values and how to determine them from a credential is defined in sections 9.1 and 9.2 of [[OB-30]]. As a quick summary: - - A Credential is revoked if the `credentialStatus` property is present, and the `type` of the CredentialStatus object is "1EdTechRevocationList". + - A Credential is revoked if the \`credentialStatus\` property is present, and the \`type\` of the CredentialStatus object is "BitstringStatusListEntry", and the \`statusPurpose\` of the CredentialStatus object is "revocation". - A Credential is expired if the current date and time is after the `validUntil`. ### Tests {#display-tests} From e429c0d84fde69c2b356f5709cb1816cb0fa0159 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 17 Apr 2026 12:31:23 +0200 Subject: [PATCH 12/24] Update examples to use BitstringStatusListEntry for credential status and increment document version to 1.4.2 --- ob_v3p0/examples/endorsement.html | 12 +-- ob_v3p0/examples/fullOpenBadge.html | 117 +++++++++++++++----------- ob_v3p0/microsites/spec/ob-v3p0.md | 124 +++++++++++++++++----------- ob_v3p0/ob_v3p0.html | 14 +++- 4 files changed, 162 insertions(+), 105 deletions(-) diff --git a/ob_v3p0/examples/endorsement.html b/ob_v3p0/examples/endorsement.html index 5a1ab7b3..e1bf2b0c 100644 --- a/ob_v3p0/examples/endorsement.html +++ b/ob_v3p0/examples/endorsement.html @@ -3,7 +3,7 @@
     {
@@ -41,15 +41,17 @@
         }
       ],
       "credentialStatus": {
-        "id": "https://state.gov/credentials/3732/revocations",
-        "type": "1EdTechRevocationList"
+        "id": "https://1edtech.edu/credentials/revocationList#23",
+        "type": "BitstringStatusListEntry",
+        "statusPurpose": "revocation",
+        "statusListIndex": 23,
+        "statusListCredential": "https://1edtech.edu/credentials/revocationList"
       },
       "refreshService": {
         "id": "http://state.gov/credentials/3732",
         "type": "1EdTechCredentialRefresh"
       }
     }
-    
+ `; diff --git a/ob_v3p0/examples/fullOpenBadge.html b/ob_v3p0/examples/fullOpenBadge.html index f854f218..81baf452 100644 --- a/ob_v3p0/examples/fullOpenBadge.html +++ b/ob_v3p0/examples/fullOpenBadge.html @@ -3,7 +3,7 @@
   {
@@ -99,7 +99,8 @@
             {
               "@context": [
                 "https://www.w3.org/ns/credentials/v2",
-                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
               ],
               "id": "http://1edtech.edu/endorsementcredential/3732",
               "type": [
@@ -134,28 +135,30 @@
                 }
               ],
               "credentialStatus": {
-                "id": "https://1edtech.edu/credentials/3732/revocations",
-                "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
               },
               "refreshService": {
                 "id": "http://1edtech.edu/credentials/3732",
                 "type": "1EdTechCredentialRefresh"
               },
-              "proof": [
-                {
-                  "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                  "created": "2022-05-26T18:17:08Z",
-                  "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
-                  "proofPurpose": "assertionMethod",
-                  "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
-                }
-              ]
+              "proof": [{
+                "type": "DataIntegrityProof",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
+                "proofPurpose": "assertionMethod",
+                "proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
+             }]
             },
             {
               "@context": [
                 "https://www.w3.org/ns/credentials/v2",
-                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
               ],
               "id": "http://1edtech.edu/endorsementcredential/3733",
               "type": [
@@ -190,8 +193,11 @@
                 }
               ],
               "credentialStatus": {
-                "id": "https://state.gov/credentials/3732/revocations",
-                "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
               },
               "refreshService": {
                 "id": "http://state.gov/credentials/3732",
@@ -199,12 +205,12 @@
               },
               "proof": [
                 {
-                  "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                  "created": "2022-05-26T18:25:59Z",
-                  "verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC",
-                  "proofPurpose": "assertionMethod",
-                  "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC"
+                    "type": "DataIntegrityProof",
+                    "created": "2010-01-01T19:23:24Z",
+                    "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                    "cryptosuite": "eddsa-rdfc-2022",
+                    "proofPurpose": "assertionMethod",
+                    "proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
                 }
               ]
             }
@@ -263,7 +269,8 @@
           {
             "@context": [
               "https://www.w3.org/ns/credentials/v2",
-              "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+              "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
             ],
             "id": "http://1edtech.edu/endorsementcredential/3734",
             "type": [
@@ -298,8 +305,11 @@
               }
             ],
             "credentialStatus": {
-              "id": "https://1edtech.edu/credentials/3732/revocations",
-              "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
             },
             "refreshService": {
               "id": "http://1edtech.edu/credentials/3732",
@@ -308,11 +318,11 @@
             "proof": [
               {
                 "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                "created": "2022-05-26T18:17:08Z",
-                "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
                 "proofPurpose": "assertionMethod",
-                "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+                "proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
               }
             ]
           }
@@ -512,7 +522,8 @@
       {
         "@context": [
           "https://www.w3.org/ns/credentials/v2",
-          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+          "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
         ],
         "id": "http://1edtech.edu/endorsementcredential/3735",
         "type": [
@@ -547,8 +558,11 @@
           }
         ],
         "credentialStatus": {
-          "id": "https://1edtech.edu/credentials/3732/revocations",
-          "type": "1EdTechRevocationList"
+            "id": "https://1edtech.edu/credentials/revocationList#23",
+            "type": "BitstringStatusListEntry",
+            "statusPurpose": "revocation",
+            "statusListIndex": 23,
+            "statusListCredential": "https://1edtech.edu/credentials/revocationList"
         },
         "refreshService": {
           "id": "http://1edtech.edu/credentials/3732",
@@ -557,11 +571,11 @@
         "proof": [
           {
             "type": "DataIntegrityProof",
-            "cryptosuite": "eddsa-rdf-2022",
-            "created": "2022-05-26T18:17:08Z",
-            "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+            "created": "2010-01-01T19:23:24Z",
+            "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+            "cryptosuite": "eddsa-rdfc-2022",
             "proofPurpose": "assertionMethod",
-            "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+            "proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
           }
         ]
       }
@@ -602,7 +616,8 @@
         {
           "@context": [
             "https://www.w3.org/ns/credentials/v2",
-            "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+            "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+            "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
           ],
           "id": "http://1edtech.edu/endorsementcredential/3736",
           "type": [
@@ -637,8 +652,11 @@
             }
           ],
           "credentialStatus": {
-            "id": "https://1edtech.edu/credentials/3732/revocations",
-            "type": "1EdTechRevocationList"
+            "id": "https://1edtech.edu/credentials/revocationList#23",
+            "type": "BitstringStatusListEntry",
+            "statusPurpose": "revocation",
+            "statusListIndex": 23,
+            "statusListCredential": "https://1edtech.edu/credentials/revocationList"
           },
           "refreshService": {
             "id": "http://1edtech.edu/credentials/3732",
@@ -646,12 +664,12 @@
           },
           "proof": [
             {
-              "type": "DataIntegrityProof",
-            "cryptosuite": "eddsa-rdf-2022",
-              "created": "2022-05-26T18:17:08Z",
-              "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
-              "proofPurpose": "assertionMethod",
-              "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+                "type": "DataIntegrityProof",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
+                "proofPurpose": "assertionMethod",
+                "proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
             }
           ]
         }
@@ -709,8 +727,11 @@
       }
     ],
     "credentialStatus": {
-      "id": "https://1edtech.edu/credentials/3732/revocations",
-      "type": "1EdTechRevocationList"
+        "id": "https://1edtech.edu/credentials/revocationList#23",
+        "type": "BitstringStatusListEntry",
+        "statusPurpose": "revocation",
+        "statusListIndex": 23,
+        "statusListCredential": "https://1edtech.edu/credentials/revocationList"
     },
     "refreshService": {
       "id": "http://1edtech.edu/credentials/3732",
diff --git a/ob_v3p0/microsites/spec/ob-v3p0.md b/ob_v3p0/microsites/spec/ob-v3p0.md
index e3d6f02e..434e956a 100644
--- a/ob_v3p0/microsites/spec/ob-v3p0.md
+++ b/ob_v3p0/microsites/spec/ob-v3p0.md
@@ -1117,7 +1117,7 @@ In this example, all required and optional properties are populated.
 > **Note**: The endorsements were signed by different issuers and provided to the issuer of this OpenBadgeCredential.
 
 ```obv3p0 org.1edtech.ob.v3p0.achievementcredential.class
-{
+  {
     "@context": [
       "https://www.w3.org/ns/credentials/v2",
       "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
@@ -1210,7 +1210,8 @@ In this example, all required and optional properties are populated.
             {
               "@context": [
                 "https://www.w3.org/ns/credentials/v2",
-                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
               ],
               "id": "http://1edtech.edu/endorsementcredential/3732",
               "type": [
@@ -1245,28 +1246,30 @@ In this example, all required and optional properties are populated.
                 }
               ],
               "credentialStatus": {
-                "id": "https://1edtech.edu/credentials/3732/revocations",
-                "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
               },
               "refreshService": {
                 "id": "http://1edtech.edu/credentials/3732",
                 "type": "1EdTechCredentialRefresh"
               },
-              "proof": [
-                {
-                  "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                  "created": "2022-05-26T18:17:08Z",
-                  "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
-                  "proofPurpose": "assertionMethod",
-                  "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
-                }
-              ]
+              "proof": [{
+                "type": "DataIntegrityProof",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
+                "proofPurpose": "assertionMethod",
+                "proofValue": "z27zr9VnabHMVwHsrqu9j8mSmm6Yp2cJCrMcg4Cownc8h7kw4qwMkxFHdg8h4CVYVK1TGd1vgoPBgFkQodMtjWQ8f"
+             }]
             },
             {
               "@context": [
                 "https://www.w3.org/ns/credentials/v2",
-                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+                "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
               ],
               "id": "http://1edtech.edu/endorsementcredential/3733",
               "type": [
@@ -1301,8 +1304,11 @@ In this example, all required and optional properties are populated.
                 }
               ],
               "credentialStatus": {
-                "id": "https://state.gov/credentials/3732/revocations",
-                "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
               },
               "refreshService": {
                 "id": "http://state.gov/credentials/3732",
@@ -1310,12 +1316,12 @@ In this example, all required and optional properties are populated.
               },
               "proof": [
                 {
-                  "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                  "created": "2022-05-26T18:25:59Z",
-                  "verificationMethod": "https://accrediter.edu/issuers/565049#z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC",
-                  "proofPurpose": "assertionMethod",
-                  "proofValue": "z5bDnmSgDczXwZGya6ZjxKaxkdKxzsCMiVSsgEVWxnaWK7ZqbKnzcCd7mUKE9DQaAL2QMXP5AquPeW6W2CWrZ7jNC"
+                    "type": "DataIntegrityProof",
+                    "created": "2010-01-01T19:23:24Z",
+                    "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                    "cryptosuite": "eddsa-rdfc-2022",
+                    "proofPurpose": "assertionMethod",
+                    "proofValue": "z4TUqPBaJx7Ld3QMxMy25dRU29fAPEwemPEUEZSRDS979nUKtfon7zu6ocgRyRCniXE9heY46NKPzwbFdqmKbUhkG"
                 }
               ]
             }
@@ -1374,7 +1380,8 @@ In this example, all required and optional properties are populated.
           {
             "@context": [
               "https://www.w3.org/ns/credentials/v2",
-              "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+              "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+                "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
             ],
             "id": "http://1edtech.edu/endorsementcredential/3734",
             "type": [
@@ -1409,8 +1416,11 @@ In this example, all required and optional properties are populated.
               }
             ],
             "credentialStatus": {
-              "id": "https://1edtech.edu/credentials/3732/revocations",
-              "type": "1EdTechRevocationList"
+                "id": "https://1edtech.edu/credentials/revocationList#23",
+                "type": "BitstringStatusListEntry",
+                "statusPurpose": "revocation",
+                "statusListIndex": 23,
+                "statusListCredential": "https://1edtech.edu/credentials/revocationList"
             },
             "refreshService": {
               "id": "http://1edtech.edu/credentials/3732",
@@ -1419,11 +1429,11 @@ In this example, all required and optional properties are populated.
             "proof": [
               {
                 "type": "DataIntegrityProof",
-                "cryptosuite": "eddsa-rdf-2022",
-                "created": "2022-05-26T18:17:08Z",
-                "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
                 "proofPurpose": "assertionMethod",
-                "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+                "proofValue": "z3R4NfPDo67k5AXBqCLcqsFo9grbWND3zkQYSvBRFwYZ1JjZE5z4FBnpFNrckzSvDHPekBsyy5z8RL4H3J9r5VUGF"
               }
             ]
           }
@@ -1623,7 +1633,8 @@ In this example, all required and optional properties are populated.
       {
         "@context": [
           "https://www.w3.org/ns/credentials/v2",
-          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+          "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+          "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
         ],
         "id": "http://1edtech.edu/endorsementcredential/3735",
         "type": [
@@ -1658,8 +1669,11 @@ In this example, all required and optional properties are populated.
           }
         ],
         "credentialStatus": {
-          "id": "https://1edtech.edu/credentials/3732/revocations",
-          "type": "1EdTechRevocationList"
+            "id": "https://1edtech.edu/credentials/revocationList#23",
+            "type": "BitstringStatusListEntry",
+            "statusPurpose": "revocation",
+            "statusListIndex": 23,
+            "statusListCredential": "https://1edtech.edu/credentials/revocationList"
         },
         "refreshService": {
           "id": "http://1edtech.edu/credentials/3732",
@@ -1668,11 +1682,11 @@ In this example, all required and optional properties are populated.
         "proof": [
           {
             "type": "DataIntegrityProof",
-            "cryptosuite": "eddsa-rdf-2022",
-            "created": "2022-05-26T18:17:08Z",
-            "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
+            "created": "2010-01-01T19:23:24Z",
+            "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+            "cryptosuite": "eddsa-rdfc-2022",
             "proofPurpose": "assertionMethod",
-            "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+            "proofValue": "z3PbutAvPaLRfYRqSex4XcAcpBqj3Vhx5vxpCxtngeTuXoutFUx3yRf7J7yrc1vL8oksMWt7FVAa4ryd9XLpnKdQA"
           }
         ]
       }
@@ -1713,7 +1727,8 @@ In this example, all required and optional properties are populated.
         {
           "@context": [
             "https://www.w3.org/ns/credentials/v2",
-            "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
+            "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
+            "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
           ],
           "id": "http://1edtech.edu/endorsementcredential/3736",
           "type": [
@@ -1748,8 +1763,11 @@ In this example, all required and optional properties are populated.
             }
           ],
           "credentialStatus": {
-            "id": "https://1edtech.edu/credentials/3732/revocations",
-            "type": "1EdTechRevocationList"
+            "id": "https://1edtech.edu/credentials/revocationList#23",
+            "type": "BitstringStatusListEntry",
+            "statusPurpose": "revocation",
+            "statusListIndex": 23,
+            "statusListCredential": "https://1edtech.edu/credentials/revocationList"
           },
           "refreshService": {
             "id": "http://1edtech.edu/credentials/3732",
@@ -1757,12 +1775,12 @@ In this example, all required and optional properties are populated.
           },
           "proof": [
             {
-              "type": "DataIntegrityProof",
-            "cryptosuite": "eddsa-rdf-2022",
-              "created": "2022-05-26T18:17:08Z",
-              "verificationMethod": "https://accrediter.edu/issuers/565049#zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA",
-              "proofPurpose": "assertionMethod",
-              "proofValue": "zvPkQiUFfJrgnCRhyPkTSkgrGXbnLR15pHH5HZVYNdM4TCAwQHqG7fMeMPLtYNRnEgoV1aJdR5E61eWu5sWRYgtA"
+                "type": "DataIntegrityProof",
+                "created": "2010-01-01T19:23:24Z",
+                "verificationMethod": "https://accrediter.edu/issuers/565049#z6MkqHLdLYHwKr169xzu9qvH1cq94pUjeQpfrPU5Xv3MtNzt",
+                "cryptosuite": "eddsa-rdfc-2022",
+                "proofPurpose": "assertionMethod",
+                "proofValue": "z3KqayPvBkJ196JzwYTgjuxZTYd7XQFSCauLg3Lo2xZKCcQTewydijTwfTouadyf2jBVYqAZg1CWXnug5JZkivUP6"
             }
           ]
         }
@@ -1820,8 +1838,11 @@ In this example, all required and optional properties are populated.
       }
     ],
     "credentialStatus": {
-      "id": "https://1edtech.edu/credentials/3732/revocations",
-      "type": "1EdTechRevocationList"
+        "id": "https://1edtech.edu/credentials/revocationList#23",
+        "type": "BitstringStatusListEntry",
+        "statusPurpose": "revocation",
+        "statusListIndex": 23,
+        "statusListCredential": "https://1edtech.edu/credentials/revocationList"
     },
     "refreshService": {
       "id": "http://1edtech.edu/credentials/3732",
@@ -1868,8 +1889,11 @@ In this example, all required and optional properties are populated.
         }
       ],
       "credentialStatus": {
-        "id": "https://state.gov/credentials/3732/revocations",
-        "type": "1EdTechRevocationList"
+        "id": "https://1edtech.edu/credentials/revocationList#23",
+        "type": "BitstringStatusListEntry",
+        "statusPurpose": "revocation",
+        "statusListIndex": 23,
+        "statusListCredential": "https://1edtech.edu/credentials/revocationList"
       },
       "refreshService": {
         "id": "http://state.gov/credentials/3732",
diff --git a/ob_v3p0/ob_v3p0.html b/ob_v3p0/ob_v3p0.html
index f80a2e97..557a35bf 100644
--- a/ob_v3p0/ob_v3p0.html
+++ b/ob_v3p0/ob_v3p0.html
@@ -27,9 +27,9 @@
       specNature: "normative", // spec nature is "normative" or "informative"
       specType: "main", // spec type is "main", "cert", "impl", "errata" or other agreed upon string
       specVersion: "3.0",
-      docVersion: "1.4.1",
+      docVersion: "1.4.2",
       specStatus: "Final Release",
-      specDate: "November 6, 2025",
+      specDate: "April 17, 2026",
       contributors: _contributors,
       localBiblio: _localBiblio,
       iprs: _iprs,
@@ -250,6 +250,16 @@ 

Revision History

+ + Final + 1.4.2 + April 17, 2026 + +
    +
  • Updated CredentialStatus of all examples to BitstringStatusListEntry
  • +
+ + From 106d15e4eeab2a38e6fc8148325d8379af78107b Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Wed, 22 Apr 2026 09:27:19 +0200 Subject: [PATCH 13/24] Fix links to OpenAPI files in the Open Badges API section and update document version to 1.4.3 --- ob_v3p0/api.html | 4 ++-- ob_v3p0/ob_v3p0.html | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ob_v3p0/api.html b/ob_v3p0/api.html index d08770b7..7bb17aed 100644 --- a/ob_v3p0/api.html +++ b/ob_v3p0/api.html @@ -34,13 +34,13 @@
  • JSON OpenAPI File
  • YAML OpenAPI File
  • diff --git a/ob_v3p0/ob_v3p0.html b/ob_v3p0/ob_v3p0.html index 557a35bf..15b3a463 100644 --- a/ob_v3p0/ob_v3p0.html +++ b/ob_v3p0/ob_v3p0.html @@ -27,9 +27,9 @@ specNature: "normative", // spec nature is "normative" or "informative" specType: "main", // spec type is "main", "cert", "impl", "errata" or other agreed upon string specVersion: "3.0", - docVersion: "1.4.2", + docVersion: "1.4.3", specStatus: "Final Release", - specDate: "April 17, 2026", + specDate: "April 22, 2026", contributors: _contributors, localBiblio: _localBiblio, iprs: _iprs, @@ -260,6 +260,16 @@

    Revision History

+ + Final + 1.4.3 + April 22, 2026 + + + + From 5e29477d5ea5f7ca9e885a21c3bac829fb189ffb Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Thu, 23 Apr 2026 15:15:49 +0200 Subject: [PATCH 14/24] Update release dates and comments in Open Badges specification; fix OpenAPI file links --- ob_v3p0/microsites/spec/ob-v3p0.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/ob_v3p0/microsites/spec/ob-v3p0.md b/ob_v3p0/microsites/spec/ob-v3p0.md index 434e956a..02d1b25c 100644 --- a/ob_v3p0/microsites/spec/ob-v3p0.md +++ b/ob_v3p0/microsites/spec/ob-v3p0.md @@ -178,36 +178,44 @@ ipDisclosures: releases: - version: "Candidate Final" docVersion: "1.0" - date: July 14, 2022" + date: 2022/07/14 comments: "Open Badges 3.0 first Candidate Final release" - version: "Candidate Public Final" docVersion: "1.0.1" - date: "February 9, 2023" + date: 2023/02/09 comments: "Open Badges 3.0 first Candidate Public Final release" - version: "Final" docVersion: "1.0" - date: "May 27, 2024" + date: 2024/05/27 comments: "Open Badges 3.0 Final Release" - version: "Final" docVersion: "1.1" - date: "July 26, 2024" + date: 2024/07/26 comments: "Fixed some typos. See [[OB-ERRATA-30]]\nAdded [[VC-DATA-MODEL-1.1]] compatible JSON schema in Document Set" - version: "Final" docVersion: "1.2" - date: "Dec 23, 2024" + date: 2024/12/23 comments: "Clarified proof mechanism and algorithm selection. See [[OB-ERRATA-30]]" - version: "Final" docVersion: "1.3" - date: "October 9, 2025" + date: 2025/10/09 comments: "Updated JSON Schemas with support for [[JSON-LD11-API]] compaction process\nDeprecated [[VCRL-10]] in favour of [[vc-bitstring-status-list]]" - version: "Final" docVersion: "1.4" - date: "October 14, 2025" + date: 2025/10/14 comments: "Credential Status' id is an optional field as defined at [[vc-data-model-2.0]]" - version: "Final" docVersion: "1.4.1" - date: "November 6, 2025" + date: 2025/11/06 comments: "Updated JSON-LD Context, adding the term `jti`" + - version: "Final" + docVersion: "1.4.2" + date: 2026/04/17 + comments: "Updated CredentialStatus of all examples to BitstringStatusListEntry" + - version: "Final" + docVersion: "1.4.3" + date: 2026/04/22 + comments: "Fixed links to OpenAPI files in Open Badges API section" --- @spec/abstract.md @@ -232,8 +240,8 @@ The API defined here is intended for [=Clients=] and [=servers=] that give indiv In addition to the documentation in this section, there are [OpenAPI](#docs-openapi) files for the Open Badges API in both JSON and YAML format: -* [JSON OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/imsob_v3p0.json) -* [YAML OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/imsob_v3p0.yaml) +* [JSON OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/ob_v3p0_oas.json) +* [YAML OpenAPI File](https://purl.imsglobal.org/spec/ob/v3p0/schema/openapi/ob_v3p0_oas.yaml) ## Architecture From 3857f7422bb7b2f4eca560bf7db45198aa200940 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 1 May 2026 12:32:18 +0200 Subject: [PATCH 15/24] Rearranged microsite content --- .microsite | 13 +++++++++++ Dockerfile | 6 ++--- .../microsite/{ob-ace-v1p0.md => v1p0.md} | 0 .../microsite/{ob-assess-v2p0.md => v2p0.md} | 0 .../microsite/{ob-issuer-v2p0.md => v2p0.md} | 0 .../microsites/{spec/ob-v3p0.md => v3p0.md} | 22 +++++++++---------- .../{cert/ob-cert-v3p0.md => v3p0/cert.md} | 12 +++++----- .../microsites/{ => v3p0}/cert/abstract.md | 0 .../microsites/{ => v3p0}/cert/conformance.md | 0 .../microsites/{ => v3p0}/cert/displayer.md | 0 ob_v3p0/microsites/{ => v3p0}/cert/host.md | 0 .../{ => v3p0}/cert/introduction.md | 0 ob_v3p0/microsites/{ => v3p0}/cert/issuer.md | 0 .../{errata/ob-err-v3p0.md => v3p0/errata.md} | 2 +- .../microsites/{ => v3p0}/errata/errata.md | 0 .../{impl/ob-impl-v3p0.md => v3p0/impl.md} | 16 +++++++------- .../microsites/{ => v3p0}/impl/conformance.md | 0 .../microsites/{ => v3p0}/impl/extensions.md | 0 .../{ => v3p0}/impl/getting-started.md | 0 ob_v3p0/microsites/{ => v3p0}/impl/help.md | 0 .../{ => v3p0}/impl/introduction.md | 0 .../microsites/{ => v3p0}/impl/migrating.md | 0 .../{ => v3p0}/impl/recommended-practices.md | 0 .../{ => v3p0}/impl/reference-impls.md | 0 .../microsites/{ => v3p0}/spec/abstract.md | 0 .../microsites/{ => v3p0}/spec/docformat.md | 0 .../spec/equality-and-comparison.md | 0 .../microsites/{ => v3p0}/spec/extending.md | 0 .../{ => v3p0}/spec/gettingstarted.md | 0 .../microsites/{ => v3p0}/spec/integrity.md | 0 .../{ => v3p0}/spec/introduction.md | 0 .../microsites/{ => v3p0}/spec/overview.md | 0 .../{ => v3p0}/spec/serialization.md | 0 .../microsites/{ => v3p0}/spec/usecases.md | 0 .../{ => v3p0}/spec/verification.md | 0 35 files changed, 42 insertions(+), 29 deletions(-) rename extensions/aceExtension/v1p0/microsite/{ob-ace-v1p0.md => v1p0.md} (100%) rename extensions/assessmentExtension/v2p0/microsite/{ob-assess-v2p0.md => v2p0.md} (100%) rename extensions/issuerAccreditationExtension/v2p0/microsite/{ob-issuer-v2p0.md => v2p0.md} (100%) rename ob_v3p0/microsites/{spec/ob-v3p0.md => v3p0.md} (99%) rename ob_v3p0/microsites/{cert/ob-cert-v3p0.md => v3p0/cert.md} (97%) rename ob_v3p0/microsites/{ => v3p0}/cert/abstract.md (100%) rename ob_v3p0/microsites/{ => v3p0}/cert/conformance.md (100%) rename ob_v3p0/microsites/{ => v3p0}/cert/displayer.md (100%) rename ob_v3p0/microsites/{ => v3p0}/cert/host.md (100%) rename ob_v3p0/microsites/{ => v3p0}/cert/introduction.md (100%) rename ob_v3p0/microsites/{ => v3p0}/cert/issuer.md (100%) rename ob_v3p0/microsites/{errata/ob-err-v3p0.md => v3p0/errata.md} (99%) rename ob_v3p0/microsites/{ => v3p0}/errata/errata.md (100%) rename ob_v3p0/microsites/{impl/ob-impl-v3p0.md => v3p0/impl.md} (99%) rename ob_v3p0/microsites/{ => v3p0}/impl/conformance.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/extensions.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/getting-started.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/help.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/introduction.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/migrating.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/recommended-practices.md (100%) rename ob_v3p0/microsites/{ => v3p0}/impl/reference-impls.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/abstract.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/docformat.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/equality-and-comparison.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/extending.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/gettingstarted.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/integrity.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/introduction.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/overview.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/serialization.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/usecases.md (100%) rename ob_v3p0/microsites/{ => v3p0}/spec/verification.md (100%) diff --git a/.microsite b/.microsite index 9d738667..ac849ec8 100644 --- a/.microsite +++ b/.microsite @@ -2,7 +2,20 @@ "title": "Open Badges", "description": "Share verified skills and achievements with learning providers and employers across multiple platforms.", "categories": { + "Specification": { + "order": 1 + }, + "Normative": { + "order": 2 + }, + "Guide": { + "order": 3 + }, + "Certification": { + "order": 4 + }, "Extension": { + "order": 5, "description": "Extensions are optional additions to the Open Badges standard that provide additional functionality or support for specific use cases. They are designed to be modular and can be implemented independently of the core standard.", "image": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmxpbms9Imh0dHA6Ly93d3cub3JnLzIwMDAveGxpbmsiIHZlcnNpb249IjEuMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGQ9Ik0zOS40NywzMC43NWMtOC44NiwzLjAyLTEyLjMwLDE0LjIxLTYuNjQsMjEuNjhjMy42LDQuNzgsMTAuMDMsNi43NjEsMTUuNzAsNC44MkM1NC4xMyw1NS4zNCw1OCw0OS45Miw1OCw0NCAgQzU4LDM0LjU2LDQ4LjQyLDI3LjY5LDM5LjQ3LDMwLjc1eiBNNDkuNSw0Ni41aC0zdjNjMCwzLjIyLTUsMy4yMi01LDB2LTNoLTMgYy0zLjIyLDAuMDItMy4yMi01LDAuMDItNWgzdi0zYzAtMy4yMiw1LTMuMjIsNSwwdjNoMyAgQzUyLjcyLDQxLjUsNTIuNzIsNDYuNSw0OS41LDQ2LjV6Ii8+PHBhdGggZD0iTTIyLDU0aDkuNTEgYy01LjI4LTYuNi00LjQwLTE2LjQ3LDEuOTUtMjIuMDQgYzUuNzYtNS4wNSwxNC41Ny01LjIyOSwyMC41NC0wLjQ1VjIyYzAtMy4zMS0yLjY5LTYtNi02aC02LjY4ICBjMC45Ni0yLjAxLDAuOS00LjM2LTAuMTYtNi4zMmMtMS43Ni0zLjI3LTUuOS00LjYtOS4yMy0yLjk3Yy0zLjQsMS42Ni00Ljg4LDUuODctMy4yNSw5LjI5SDIyYy0zLjMxLDAtNiwyLjY5LTYsNnY1LjY4ICBjLTMuMTYtMS41LTcuMDYtMC4zOC04LjkyLDIuNTljLTIuMDEsMy4xOS0xLjA3LDcuNTMsMi4xLDkuNjAxYzIuMDQsMS4zMiw0LjYyLDEuNSw2LjgyLDAuNDVWNDhDMTYsNTEuMzEsMTguNjksNTQsMjIsNTR6Ii8+PC9zdmc+" } diff --git a/Dockerfile b/Dockerfile index a7f7fc5a..c6879438 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,13 +18,13 @@ COPY --chown=astro:nodejs ob_v3p0/microsites /app/src/content/standards/ COPY --chown=astro:nodejs .microsite /app/src/content/ # ACE Extension -COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/src/content/standards/ace-extension +COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/src/content/standards/ob-ace # Assessment Extension -COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/src/content/standards/assessment-extension +COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/src/content/standards/ob-assessment # Issuer Accreditation Extension -COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/src/content/standards/issuer-accreditation-extension +COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/src/content/standards/ob-accred # The base image handles everything: # 1. Runtime processes the assets (transforms paths, copies assets) diff --git a/extensions/aceExtension/v1p0/microsite/ob-ace-v1p0.md b/extensions/aceExtension/v1p0/microsite/v1p0.md similarity index 100% rename from extensions/aceExtension/v1p0/microsite/ob-ace-v1p0.md rename to extensions/aceExtension/v1p0/microsite/v1p0.md diff --git a/extensions/assessmentExtension/v2p0/microsite/ob-assess-v2p0.md b/extensions/assessmentExtension/v2p0/microsite/v2p0.md similarity index 100% rename from extensions/assessmentExtension/v2p0/microsite/ob-assess-v2p0.md rename to extensions/assessmentExtension/v2p0/microsite/v2p0.md diff --git a/extensions/issuerAccreditationExtension/v2p0/microsite/ob-issuer-v2p0.md b/extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md similarity index 100% rename from extensions/issuerAccreditationExtension/v2p0/microsite/ob-issuer-v2p0.md rename to extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md diff --git a/ob_v3p0/microsites/spec/ob-v3p0.md b/ob_v3p0/microsites/v3p0.md similarity index 99% rename from ob_v3p0/microsites/spec/ob-v3p0.md rename to ob_v3p0/microsites/v3p0.md index 02d1b25c..16db10f0 100644 --- a/ob_v3p0/microsites/spec/ob-v3p0.md +++ b/ob_v3p0/microsites/v3p0.md @@ -218,17 +218,17 @@ releases: comments: "Fixed links to OpenAPI files in Open Badges API section" --- -@spec/abstract.md +@v3p0/spec/abstract.md -@spec/introduction.md +@v3p0/spec/introduction.md -@spec/overview.md +@v3p0/spec/overview.md -@spec/usecases.md +@v3p0/spec/usecases.md -@spec/gettingstarted.md +@v3p0/spec/gettingstarted.md -@spec/docformat.md +@v3p0/spec/docformat.md # Open Badges API @@ -982,11 +982,11 @@ When the request for revocation is rejected, the [=authorization server=] return -@spec/integrity.md +@v3p0/spec/integrity.md -@spec/verification.md +@v3p0/spec/verification.md -@spec/equality-and-comparison.md +@v3p0/spec/equality-and-comparison.md # Verifiable Credentials Extensions @@ -1001,7 +1001,7 @@ This standard references four VC Extensions: > **Note**: The 1EdTech extensions are designed to work with any [=verifiable credential=] and may be contributed to the [[VC-EXTENSION-REGISTRY]] in the future. -@spec/serialization.md +@v3p0/spec/serialization.md # Data Models @@ -1078,7 +1078,7 @@ title: Verification Support Data Models The data models in this section are used by the [[[#verification-and-validation]]] process for supporting older credentials created with [[VC-DATA-MODEL-1.1]]. -@spec/extending.md +@v3p0/spec/extending.md # Examples diff --git a/ob_v3p0/microsites/cert/ob-cert-v3p0.md b/ob_v3p0/microsites/v3p0/cert.md similarity index 97% rename from ob_v3p0/microsites/cert/ob-cert-v3p0.md rename to ob_v3p0/microsites/v3p0/cert.md index ce4df5c5..204b472b 100644 --- a/ob_v3p0/microsites/cert/ob-cert-v3p0.md +++ b/ob_v3p0/microsites/v3p0/cert.md @@ -198,14 +198,14 @@ releases: comments: Added JSON-LD Safe mode requirement for issuer certification profile. --- -@cert/abstract.md +@v3p0/cert/abstract.md -@cert/introduction.md +@v3p0/cert/introduction.md -@cert/conformance.md +@v3p0/cert/conformance.md -@cert/issuer.md +@v3p0/cert/issuer.md -@cert/displayer.md +@v3p0/cert/displayer.md -@cert/host.md +@v3p0/cert/host.md diff --git a/ob_v3p0/microsites/cert/abstract.md b/ob_v3p0/microsites/v3p0/cert/abstract.md similarity index 100% rename from ob_v3p0/microsites/cert/abstract.md rename to ob_v3p0/microsites/v3p0/cert/abstract.md diff --git a/ob_v3p0/microsites/cert/conformance.md b/ob_v3p0/microsites/v3p0/cert/conformance.md similarity index 100% rename from ob_v3p0/microsites/cert/conformance.md rename to ob_v3p0/microsites/v3p0/cert/conformance.md diff --git a/ob_v3p0/microsites/cert/displayer.md b/ob_v3p0/microsites/v3p0/cert/displayer.md similarity index 100% rename from ob_v3p0/microsites/cert/displayer.md rename to ob_v3p0/microsites/v3p0/cert/displayer.md diff --git a/ob_v3p0/microsites/cert/host.md b/ob_v3p0/microsites/v3p0/cert/host.md similarity index 100% rename from ob_v3p0/microsites/cert/host.md rename to ob_v3p0/microsites/v3p0/cert/host.md diff --git a/ob_v3p0/microsites/cert/introduction.md b/ob_v3p0/microsites/v3p0/cert/introduction.md similarity index 100% rename from ob_v3p0/microsites/cert/introduction.md rename to ob_v3p0/microsites/v3p0/cert/introduction.md diff --git a/ob_v3p0/microsites/cert/issuer.md b/ob_v3p0/microsites/v3p0/cert/issuer.md similarity index 100% rename from ob_v3p0/microsites/cert/issuer.md rename to ob_v3p0/microsites/v3p0/cert/issuer.md diff --git a/ob_v3p0/microsites/errata/ob-err-v3p0.md b/ob_v3p0/microsites/v3p0/errata.md similarity index 99% rename from ob_v3p0/microsites/errata/ob-err-v3p0.md rename to ob_v3p0/microsites/v3p0/errata.md index 98c18231..aec3ac3f 100644 --- a/ob_v3p0/microsites/errata/ob-err-v3p0.md +++ b/ob_v3p0/microsites/v3p0/errata.md @@ -125,4 +125,4 @@ releases: comments: Fixed typography errors in the errata document. --- -@errata/errata.md +@v3p0/errata/errata.md diff --git a/ob_v3p0/microsites/errata/errata.md b/ob_v3p0/microsites/v3p0/errata/errata.md similarity index 100% rename from ob_v3p0/microsites/errata/errata.md rename to ob_v3p0/microsites/v3p0/errata/errata.md diff --git a/ob_v3p0/microsites/impl/ob-impl-v3p0.md b/ob_v3p0/microsites/v3p0/impl.md similarity index 99% rename from ob_v3p0/microsites/impl/ob-impl-v3p0.md rename to ob_v3p0/microsites/v3p0/impl.md index 56d59be9..2db88874 100644 --- a/ob_v3p0/microsites/impl/ob-impl-v3p0.md +++ b/ob_v3p0/microsites/v3p0/impl.md @@ -158,21 +158,21 @@ releases: comments: Fixed some typos. --- -@impl/introduction.md +@v3p0/impl/introduction.md -@impl/getting-started.md +@v3p0/impl/getting-started.md -@impl/recommended-practices.md +@v3p0/impl/recommended-practices.md -@impl/reference-impls.md +@v3p0/impl/reference-impls.md -@impl/conformance.md +@v3p0/impl/conformance.md -@impl/migrating.md +@v3p0/impl/migrating.md -@impl/extensions.md +@v3p0/impl/extensions.md -@impl/help.md +@v3p0/impl/help.md ## Linked Data Proof Test Vector for Open Badges 3.0 diff --git a/ob_v3p0/microsites/impl/conformance.md b/ob_v3p0/microsites/v3p0/impl/conformance.md similarity index 100% rename from ob_v3p0/microsites/impl/conformance.md rename to ob_v3p0/microsites/v3p0/impl/conformance.md diff --git a/ob_v3p0/microsites/impl/extensions.md b/ob_v3p0/microsites/v3p0/impl/extensions.md similarity index 100% rename from ob_v3p0/microsites/impl/extensions.md rename to ob_v3p0/microsites/v3p0/impl/extensions.md diff --git a/ob_v3p0/microsites/impl/getting-started.md b/ob_v3p0/microsites/v3p0/impl/getting-started.md similarity index 100% rename from ob_v3p0/microsites/impl/getting-started.md rename to ob_v3p0/microsites/v3p0/impl/getting-started.md diff --git a/ob_v3p0/microsites/impl/help.md b/ob_v3p0/microsites/v3p0/impl/help.md similarity index 100% rename from ob_v3p0/microsites/impl/help.md rename to ob_v3p0/microsites/v3p0/impl/help.md diff --git a/ob_v3p0/microsites/impl/introduction.md b/ob_v3p0/microsites/v3p0/impl/introduction.md similarity index 100% rename from ob_v3p0/microsites/impl/introduction.md rename to ob_v3p0/microsites/v3p0/impl/introduction.md diff --git a/ob_v3p0/microsites/impl/migrating.md b/ob_v3p0/microsites/v3p0/impl/migrating.md similarity index 100% rename from ob_v3p0/microsites/impl/migrating.md rename to ob_v3p0/microsites/v3p0/impl/migrating.md diff --git a/ob_v3p0/microsites/impl/recommended-practices.md b/ob_v3p0/microsites/v3p0/impl/recommended-practices.md similarity index 100% rename from ob_v3p0/microsites/impl/recommended-practices.md rename to ob_v3p0/microsites/v3p0/impl/recommended-practices.md diff --git a/ob_v3p0/microsites/impl/reference-impls.md b/ob_v3p0/microsites/v3p0/impl/reference-impls.md similarity index 100% rename from ob_v3p0/microsites/impl/reference-impls.md rename to ob_v3p0/microsites/v3p0/impl/reference-impls.md diff --git a/ob_v3p0/microsites/spec/abstract.md b/ob_v3p0/microsites/v3p0/spec/abstract.md similarity index 100% rename from ob_v3p0/microsites/spec/abstract.md rename to ob_v3p0/microsites/v3p0/spec/abstract.md diff --git a/ob_v3p0/microsites/spec/docformat.md b/ob_v3p0/microsites/v3p0/spec/docformat.md similarity index 100% rename from ob_v3p0/microsites/spec/docformat.md rename to ob_v3p0/microsites/v3p0/spec/docformat.md diff --git a/ob_v3p0/microsites/spec/equality-and-comparison.md b/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md similarity index 100% rename from ob_v3p0/microsites/spec/equality-and-comparison.md rename to ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md diff --git a/ob_v3p0/microsites/spec/extending.md b/ob_v3p0/microsites/v3p0/spec/extending.md similarity index 100% rename from ob_v3p0/microsites/spec/extending.md rename to ob_v3p0/microsites/v3p0/spec/extending.md diff --git a/ob_v3p0/microsites/spec/gettingstarted.md b/ob_v3p0/microsites/v3p0/spec/gettingstarted.md similarity index 100% rename from ob_v3p0/microsites/spec/gettingstarted.md rename to ob_v3p0/microsites/v3p0/spec/gettingstarted.md diff --git a/ob_v3p0/microsites/spec/integrity.md b/ob_v3p0/microsites/v3p0/spec/integrity.md similarity index 100% rename from ob_v3p0/microsites/spec/integrity.md rename to ob_v3p0/microsites/v3p0/spec/integrity.md diff --git a/ob_v3p0/microsites/spec/introduction.md b/ob_v3p0/microsites/v3p0/spec/introduction.md similarity index 100% rename from ob_v3p0/microsites/spec/introduction.md rename to ob_v3p0/microsites/v3p0/spec/introduction.md diff --git a/ob_v3p0/microsites/spec/overview.md b/ob_v3p0/microsites/v3p0/spec/overview.md similarity index 100% rename from ob_v3p0/microsites/spec/overview.md rename to ob_v3p0/microsites/v3p0/spec/overview.md diff --git a/ob_v3p0/microsites/spec/serialization.md b/ob_v3p0/microsites/v3p0/spec/serialization.md similarity index 100% rename from ob_v3p0/microsites/spec/serialization.md rename to ob_v3p0/microsites/v3p0/spec/serialization.md diff --git a/ob_v3p0/microsites/spec/usecases.md b/ob_v3p0/microsites/v3p0/spec/usecases.md similarity index 100% rename from ob_v3p0/microsites/spec/usecases.md rename to ob_v3p0/microsites/v3p0/spec/usecases.md diff --git a/ob_v3p0/microsites/spec/verification.md b/ob_v3p0/microsites/v3p0/spec/verification.md similarity index 100% rename from ob_v3p0/microsites/spec/verification.md rename to ob_v3p0/microsites/v3p0/spec/verification.md From 8ca219ff149e20ead65649eaad64605935c241a5 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 1 May 2026 12:53:31 +0200 Subject: [PATCH 16/24] Fixed image path --- .../images/figure01-openbadges-2.0-diagram.png | Bin 0 -> 40039 bytes ob_v3p0/microsites/v3p0/images/ob30-concept.png | Bin 0 -> 27376 bytes ob_v3p0/microsites/v3p0/spec/introduction.md | 2 +- ob_v3p0/microsites/v3p0/spec/overview.md | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png create mode 100644 ob_v3p0/microsites/v3p0/images/ob30-concept.png diff --git a/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png b/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0dd9f9474e305ce858950ebff45e1e041d71f3 GIT binary patch literal 40039 zcmeFZcR1YN^Ek?8^(aA~q{IdkUBnVIv7(9yb0PI`qD4-b!A zT}?$74-c}4`w|m^5GFdbKC8#_m9JUq3Cq!c2Zgi*TS_45J= zBPD3wvq|U@G@jZQFW=xEi8?H|EtTrN%B{yP1S26YXuBaoFL*xGK`QCmLJ;?K+L~Zd zA(cXOj)kj~vY&o8`KC)m z3m!o*kqut!PmRy-qv3M51zTC^-H~WiMWP+ zh08#o6A#aWwqm91E0y*Z;+Y+F9{gGOH7TFh3fitSv~QE%`Ez_~pc2Q!)1H5NwG%JC zgi3}pAw9Z{Jsjr9HA8ZXcmcNBe)*|4F{jVRhMk?c1lf>sk{MybU?t_$w1bq?&Y-Al zp18iBSG#@c%6LEek>$^b^)8=pKRK((E9kUwWnhmIh(8Ete;u1KH8C`Ybfx1GBF%cl z?%Wj=Ng#Uug>hb^amFUKW0N9rUDKFWtW{mf93!hmC}a8jP&a#nFxqudlF5uFP`P+*$a}p>MRIX=`#YKWNF| zOY(XTmC8Z4-@@17KKcq9D-Ek(=*@#k`6~IBu0bx(3uIFy1yz3cX>TWt=coPLYGnK} zmodS_q0maJ1^;sKg7fr+ka)@q&+wS0iQgmThzVe!&3smsjAe5(Sn5ZWu+Wc6X3W_i z>0AUCt~LLXP+PrC**_Dw=T!lEZKT zu18^Ttuq6Y%iSyzOiYVUUU&hKLwPrtKsWosQ+!sn&-gF~m0-hi+NVgoybC0TB$Xct z<0(l$dX|$VhMwkJVTRsrx!!+K3+XmZ{ejRagmnXN2dTILi4O6yU=D#Xs~`*GrSmQ@ zD$U1}w>|p-W8)zv4YkaL@-R{>it;dx5nooir6YBp1gof^#GUKbf4PvXj%Zi8wclZp zCOV{3gnT$8X8KTs#^xjPDYOBq_1vK4;ZxRz%R*tO>DH$-{uE7w`z-+*WZoAEbgt5} z?-j)9(nCx`CqgEo5N()8_2n17UuUK$h`rHKI}_rL?+jK22Y;tU}Z<0r-eB+dQsidx?OHq{Qp6H%7qjy6`UF!WQ`6s~w6Nx-b+qq0fOR-``NI;iN2EvZvaD^PsA062D(@`B>b`;A zh`GT#z{5iAU%-Kb?xV_##Hj@LPOU z#NYX`BQ2u3vvBmu7sH-ZM25AA^GW|R%NeK2PkCLxFucQwcCYR0Mt0sYI@&m26G4g8 zKcYyNNhRyqf9=)N`qk|<_iKZjWg{VuA1l997uGD+A0g zy|q1aW@eVF6yy}Gv4pWCv3|^cX<|0SZe-h)H0_;(c8!C)1#!I;y^Osb8Rt(co~nCD z{SvKi@x~AOh$OgB>RZY@qA?;b@!U9MeBUYHcinI1eZGBe)+1KgxGQnC0($zSDM+s_vKgl)^vW{621XN7ghx)$5zY_)9H?2abirp~6_rniB6fet5QC)dxAXEG;# zqehNG^|5kSrWwk`r*q-PYO7PO}z{J1)u`7ur@ zT3P?u33DVlIY|j|z!e*oWR~GeTIA+*fjlRs&urT;FNj`Vds+EqkLPpYL1A6t{=nqG zt$~2++g8KvCQ;ZIm)kLIKWE;|*w3`n9ScmNy+tPFOV*Ly zlHIY~7SwNOD7gIRp>D;JRuQXhauIJ$gnv8zCd(o!OO^QQHAlah%~gBtG8Z{l{k8SG ztaKm9G@zVH!jEb<9z+Ipoh9xUeJny3(bx^x#Vj4{Jljd&xO}g8@ssP?94gr>qUZDB zOw;9Fe$NtyB&ddcUc7rmHCO2Kiy9-=*D9SKpQbsbT~1@uS1plk((p-og5Aa1pd`uy zljqWRTd(X~`Tcs&ablHx^wi;@1OJHP3iSxOY{WdfCQzh9cww4w=J^nL^Dm=0y1Awa zhQ^AU+Wf-Y&eKfI&db}Ex3~@)(@n(J&go7|HpY82jU`0VT@IPQ_(R{Hqd zX~t>vchk3=Z^@#em21}7-2`)Tm$NR%_=)X1PHqPZJ3H^o#|4ldqxa~4pYJqo9M>lW zCTTuUeZYnNzWjB$fanc{`$@}5ZmH_qcjfbUN(wRS7T-UTdBl2ngo{xkP~j`qyRG4~ zlvA=Z0eSf!-{e-loHX>NWlmxVIJ5c`=M_u9>Y&goJGqhYQ`=8VN1IkmQ4^J}noiIY zAXp)2%6&l#Q&U%+buhZMFs4^mz^8@En)H0`eQo_~+vxi$E5r=urCa9$;aCbzER+6%uvybDza@Vn)aVeoXuAr4h?#6Z}m=09!xd?t4MkO+waD@Y@eVL#a`vF zts%EH;xt$t|&Mbrqw+Xl3-U>1}3+TI(kfLzgt(fjM1Ki%Nmw(2NY)b49H2y71!I<-8?-*uQC38z`2p|Om8cH<^#PCNlO7yibT zG#Z`?JRN5U+(cH+T$@DfG}|JwC1_@e(O-iZuh8iNjDsi`rjo)wM*J|674I30|I>vQ z3}$Or_~o_HvAZ1{H#y&`ceb@LJq~P3gKXq`Sz0#uSkBxb*If<38=KVZ+f8`m&VUy; zxTmkBC>LHZf8N}=^YuK1^}OigV*=0V>?3U+O2!I~*Vj~lxf^M1sBWXFiN^63pFV&6UU>B!j|h}dgRgfE z-yM6T31E&@9y9~IgTgp?oXwKg}uDI zguHGDIlI~lUzd`S5*85^78Ml)EdZ2fskba36ek@Q3HGU)-~*YS76G zPCPs~p1O+SeQ*5LOsR6tTbSp&{u@Z!3o&E|BH|(gYZWRN>7vLb5%|3hp`UFk#_-x- zFX8#O*tn#F|L~i$&nyEqJw1vwbeD^J)dLt^%JNLK0}DjA%XIaZf}BcPBk}Nw;dl_L zU_2-cJU)YMC=l;Z1-20Xcj-ka)gm+TzuMrM6RY4MS-&u*LjJoqRJ!9YD1QTlT!QBi zxe~tnFZgggWbgI=Mu~(2*vJed?|(yw=eS+`?@ll(e5fzX)`Ij8jepkwk}mvrr+-NL zhfDvKCAc{>@Ng~#Th@G5SGPauXRtrvWp1ANR^pGuJbeTj(mzj*WT%R2p;S02Kl)w2 zt{-%=*|9wC+&n?tLB#59vHOKH?)~qk=htg!EZaUfO#>Od}eUNfu4cHmLCTPpo)+|Ze9WJBF^rh*}PqzC$(iex* zq&D8u1uJMV6%W#AweamGacZ#2K)Q32)C>NO81wbIl~P3&`R%VaX7k*$xmXuMj&J~a ztsOMh6?5*WHSdi%v`XMxF-Q*_9?Zsd3>Yf}?Ty;Dx)^qE9IcdXVl-DQQ^9@*})diu%%IdDtT{^V}(zN{TvNnNf%*cZwFs&OD$<$6=C?+nJt0!Cs0&iH%G1r9((gi%e z={U5`bsLN{YUZSvxLfKHl4#eg%ku>kXJ`9wb(UjWPZJx* z$L>s&FvaP~QbD%9Rqk?~h95Q-6ZWLO_j}Fq+a_Ly1p}FSCo5f+Is-+-0aMDWB>y5S zYkH*o0u7dnZrooV)9r`Typ1&Qoc-UAj=YAU{#e%$1b-7B-;?aXqb1eEhbHPO0q3Xt z>5ZSLgQydzQ|rczA|-1|5I6a_@pHd_&rthryura;(CLiiVTXwUJ<Go1e^hm&A8_HyZz*l*gz z8Jzf0jTPP*mXGiaA~nb+Uo%wc@DtR0))#CZ!+aN9du^|b;W;g-nS3o8kT73&)$!Dp zP9q_Jx_=fnz?W`sck|`ahu1j<6OjgfTz9rhB5XG+*DyUw=G;PPSo#B-Muc^OEVlic z-YnB-Rms$BagUuw&UgnG%0+aUx_IJ|Wmz>C6I4P&gY@M{9b4znwM|bmUX&VxZS~M6la z-sQ+oAG&k((!>u#(w|azby9i~oTX)-oSv;1ip8!l6dZ5+lC`mD)AM#~h)9>2-+8&z zP){tofL*z7+H0#=$Ry*Tj0$mP-R()T{0aM5dYd9kBd4q^gHmF`C}+iHyq0ZiGvTRY zm6IfvB;2VQn|)HOvp4FqU>0y=709nbMoV<|l^YKN>CX?_o}QMpwg>5XydnffQjP;; zT(~p=*h`POr%Nd2&VCii`|yWggcCm+^LS3oyxHQ@8!y!zHg57_vd)+qFD*i__M%3L z>N3jo3)V{4GRx-n>5>tCvzes^MC0Ne-&R*!O^<(j+Lsk~2e_Z2{bwboZsd$8W4gUp zw0yEZeIQ>SnQFJr$nL{!1-{o>Sa-4-?@aY(1wVU9kk&S85+9!uEI^RoWq5zs$#F>j zaej)#_1=lAMpdndp>G1QHEX-9DQU&sJ`SI}iZgE6^Clt;7#EIqi@mWAx7S<4(o1?B4@N^eae6xi0qhdB^~S!4Petn+Be$shNR3^Y!gS9F20 z5GWr9o#U4+vEvYR7tl=o(fKjIG+=SLoST?(2tOeVBy@cq`tSQ|$Ic zXe3A`>M%|9FK(^ymoVin)d}cyyqR2@H5j=WJ7PP^&(8lywrNRM93{-fIhP`05E!M6 z)yonv{K99Z7?7xzT#g;I?P|~%8PwUKWpoor`|i10dvR7&D}hSim~J69rDV&i)68ys ztKQ^rIpMu%>0Z-nHX{~VcThZacJtv#J`Iga8H-;*15#7|6?9y)krh-xY6hIpqpE+40+rG3%5E_L5A5)G{{6&U%{ zw3gbqJob46Egr{W+f-Z=hOJn8^G8hX5ySf5dP8JjRH-e7IYi<&8|?!VssxM}`@y9yA0()s9CTjyK|L z@oy^PPGN9&&|;DGlRPmLW^w7EQwp(#z7b7>wlT{Fc}DZu(Mmtt#M7eF?@%0EDoJzD zdV5z+F1)1|dZI!jR}uD<8B%9i8ZZz3$c_5WL}D5a9xqCk=#T-v0Nryn7~Z#d(-F6$ z{Cx^rOa|75@yNI9e<1!j1|p+@DrIbZ-t)&;{;S;tH9W^_#Yh^b%W#AO0P!!uig`Oy z&iL=sBRt0#5aeWfr{iDHK|4{<({|^IxbolK06h0Qc*w~Thb4x8QxObT1wEt9T5bLf z9uMgR_*U;B$P)S=YQL!AA+rV?zF+(g8U2Fba9C5CZ}nf)GJ>8re96<<{~jbDqmC;W zzCMh0zxW?&VVt0+YT2V3|3yX(82UtAa_pbk_zUkpO#A;D(_r|>p!4G?lJ{+G(NI?3 z#oUjpcT$9`#n}D`#8)7YeH`ZnhQJ_M_)XIJ>|hC+d&zWu^JJ~{c(nX z)k3*M7aanZhm4e(DyJ^E8Pn6 zvq163$nUeqPOg{LajOQ^ypAArvoSmFPwnZCQ>L)yF;t7aL5F{ z%VX+>tXFv45e0dg##F&Ayg)r^E2fFV`gxJMIaNd-^tibf^?fd9I=fIyUZi2iLp}s+ z?V-wJFapdaI0J%H`Gl7wv4fpEvf!#V4#F+qxG|@FxE$8PNW~L&$v~*D<)>o(7YQjv zme7Zw{v)7)=U3Dp z0Rv40AA0n0k%t%`&?iO6K?Tpby#Wyi+N1;US>c-Ia!5-WK%AY{8tO@pWF5MmN&q0< z1#m>9NtN&*#O|?3Vu1NlLohiY;yPI4aq0)4O2kR^Rf3h%*=gIcZX|PrNQI{xht9X6qjz{NG`1vG)B0 zE~3`uK814=xs8?!sQUFLnJgr|#U;ooBuAGE=xiRaZr>c(F$1&e@ukJ=fW6V>5%VAx z=*o>g*#xGe=w0EagPCQ}<F}{7|>q0^F~8v2_yf$e*YQgA@HZQ2*yC1nb~Yj^r`b z;vctPQ9;&~Qa+R)&c(6}e179q1)G)UTiwDaK#BkEuLSMMVYbX@9?gK?x!Lvcw{zB& zB4mL!z6R9E-N{e-#8A$7#T*JR^n`ZK+Hvmslh9B<6M+*6GJHa_?t1-`?FjllWXiruD^Kd{(sXL7zcu4EQ;x*KE2W|ioD4yf0k3OruBrY>Qku^6{s z=D;6O+KXbDNG*E0-nd_ibHOF;g~U038zRr3#?Fz1Y}Nl3ZN?OPlSR!~*N=J6B^l_O z2kc_){cjXv>I$=JrULzT2elQ*4_W;;K5DW(Mllp3#*0-(i>15QM2d}1bu%@B7BamE zjZM;K+RCd(?Cvyh^rz%#rQP^Z2sPk~3TIQSeOuF`yl^xd4>5b0>rsFNOp?1R`Gn?qr!ASF&#|qo|LB~eH{>x7| zi@`xq#knNx7s955V4doGyH87`d_WC5Iqs4nHCe2zR{<_m*jZRf)y0W@m15^R+ zkJ4t^#haJR99peYyl>?QD`tuVOCbtu&CP0cL*&R_5*50|x-Efw(sZeGd9(a0t`B%4 zM~tP4LxzRWi~39}Ydl`nv;Mx=B$qiR^BAFR9@8KSOg`x{x=%Qot3&BHOVbrqEtCtKGf*T~Ju7O+PBQ=6>{fzRG<7t76I z&7Q82du;@|24(qT&zuQT?#ZF$zxSf!n|n%K8uk+$)@zSU$&Qm<&d@q+d)Sd>S?i40 zj}9ZHe>6qqd3F@q%)Itp_EsR<&zLvFuyo4U1 z%9^BQmmc@BP!Cdnn$1ZU;hH{OD9BoT-m`gQ$m7DhZS{*QHo9S3@3f=V{D7dx(uBB- z*S);|(HawB5%r6Uz;_L5`y*S=Ux?s{ckC@WhzAhV327ZP4tj^d$$;fT)(Eri=C*@g zC%MrZ52r;6eLUH3J`eC-?mVb?k#D@ibBko%H1J_{gKpDgYZD)vx#4ipKJ^myX5iH~ zS#>j8dIl98yBWGU-R*2aCobD}cWY6<$F(Th10=Dw(4!)?!CqPbUyJ7V-5L)kzlT)$hhuKA`IMQ4u~+REgMm0K*}(3G))Nbhm}a#@D(YCMOUG#UuoE1Wiq>_lq z3b;X7SF`4HxBjSUWDwa-z%5rz+2iX`)~CPoW*!^(TtGQfPt+hre3nOCg??R+DtM>u z$DzX-`o4pirUTYOm!dM|8Lf%cymw@8a6DOR)+ntte*-F%0k3W3`!rGyQ2RCR&dR%e zG`=}J80Or`aC7TY(vsY^X@rp|Ly@IS z0$koB2BAa)vJ0#cYZ6obZdBdWKX6+Qtbxlvz^ZU1-VobUFn8vbWFR%gu-qW6*e}1+ z!4~x6UMuQZS=)y|yXuSRx&@U=m6~Uj<7Vb-tXYMXnzAeH2B%vK*T*J@RYwc-nr`Q0 zzY<4iUh+OWTnPWQGE$~(%}EZa0;YD=3riaw`m5JMQst$IP;W?ftVC1bo*&kmj`fem z>8=KH{l4t}pn-N1ElNFdq^Dz+BqjD;OK!|1<>^<9m)$z8PuF2QDy0CX#WYTQ@af?* zGP-fctMWuZ(kT=s9_7Zp6VM4pxydQOjUf+CuNYpc%}l+$`MQu~oCX{%B%56d|VgoZ9dkCdj3 z(|1GKEQd5+Z3#jf7>X$9^5|YABG{)7bv#74G4Xkh{P=wlU&BkT^2WineJ^?|T3**! zZqfR>XPNiA9Of}I^lW0opJyT&qOY67b2EZ-wW&7y}`=<>8OUY9dv zQCds8St=2EKCWC)nQx8FsM9f^S|md{BZhIK0T4H=5iqw#Fr&b@1^b$78P_U>NB7ys`s z_2`#LApz_gB|W}il=fWehjb9L==(%ux@78I7^)5bLg`c*V}K?p7)Oi#tHj$m+;W5s zunGn)4-0M^zw5eQhVjxa_Me=*j=h8dmhDVo1?JmG6k6~x0dF2^1g7< zOsVU+7i2_7-8i-%-PSTK;HESC^k+4Xau^y& z9T|RKcyXvy1r7~~H=xClOWg+ux79zw{f}_}Bi#RJ?te7*|F<=_RRzv0X-7MZ=)b19 zEJ^XV`M}Zt-+Lw0mtV1qEvf~aB%6ztk9Jqm_ZyHcMZ}4a(`76wR88T*c=ZM3D-f&6 z`*=(Tybg4}WXa%|Mx6c5nNuf{v(#+z`EyEcn1$l6carL2BxWhF>Dib3i+B3hQJPR+ z-5`$s1nE-cszz9?1ND+YsmV{icgPK2cBmN9Bsf%h%(lm9p1ycPPC6-|(z4CoF{4DW zSojchwEfdjud0zJrk=Y(E4ZbCF3dV^*KB&nC(F)jT+z67a?#Cz$leoQYSu$+=oz1S~z@4^|?3kFHR5z zTeuhA92WDF)Zj660 zfL@R=9^$LuaIC#popX(|KUCVLR{(m%%>Io%J{*L_;>yZtA$p**p1ayOC2kQqhtV!bd87g8W;5cu)#FB~xfK_nJdn69!1D!7Os3^kNfrYD7KyZ^0=L&bT zVeelceo29p1=T+OVfj?4fX3`M%471N;JBYO5qQjT`Ityt98EQtHXKd`9$>MHEf)b` zZrmhNRI%%@2gA$Y?4%G9z&RRe!9w5`%ZW|9L57sS{lcC27pU%=OlK3jFb3GaeG}NGath!ze*DtN9~d=sUpfg2i|YC^(X@hRgxCJuXW$2gDN_FTp;u zQ#}J5e8DL#asdF2074Mk>PUPabmG?mbE*W!^-PP*UKAo%Xf^*;DW~re2MfdpRBs=U z-eDKHg@=^C6s5r3M4!b~n;Vzy$?v*wR4)VyTv>zJNGSR)>KhDUuf;=atS|0|iZ#C2*fhf90+| z0g~VhRdXSR0)|n}yrB3Bz<6*#`!yCsNusu=sc|uH3?i*_i@qHbrN??Xo`@j5pX1O#arW& z)>lCWLX+_IEoIm>u%_-dKdvVIS6+cTP#}{@GD}|>K@c&!Vmt1K2lVJAviHG0@I;pZ zkA49bWO_CGuAxW7N6$eHE_NY1sObn)8hA~3j4XphT0=y4J+C{`Ioa_TQhy6eMXU~w zs)I~D4|AtfRkW~$TM0E_<_tZ`{Y4?L5AsG!LFAzx3o?rvj;2E?#nH0I zt5v8!PP;>#lOI6sbkCFcPk?0W3upQjZS3AV#Yx}^{#X73E?b{lp6cpz5A+GhYc`WR zm=0B5p`I0PKH1thOENHfsQ#XRXp4g6_SrrlpAur~DVb4>sOjJbd1C!XG4~w~vqry3 z5U(mvCt58fBGy`i8>E18pxj9)lb-ThZ$tqqoh#|)9+bn_Y=PGj6xI0d4BYN`Se%V$ zy+A1|LVRZQ&OGqYdUvI)nL-`y51!|2P@25`4jxG^rCup#s0=NQ9daaQ-EmfDxX%yl z(mA_KMZ;Ui3QyFW6BY^tq{KLE4+p|7S+0tLgkcH3& z@t6@zRQY})!t~kcP^|#6ihhxLj=GYR4P=PVFPD~5ou94;vCVKbWrMtJ?D2YY^AQLg zg`--iTS+62*J`HpwG~cx<~6E`=0KwLjl8AjIuW`Pw98`J6!zv4&zA}B5s)A<1=KcT zxA_{YM|>`GGgTJ`0$*U4_=_i4-c12xEZb=5G(wE8Kw&MypgdLId|@nbwW8zsp8Eq6 zZb{PlynUgvz&j>S21Za$@ej($TZzsTLGlAjHtDRhH*Hx$cdc{ONr~=Sda-HU!d92@ zBxU8DQB%ZyQ@tshC8)`E;zEJx*fmP1=%tOZUsgY6o$UQ(;*O+lHpyX3Mn06hN?389 z6fM~^lU95*a)OqA(S2)rm7tDrXzFaQ=A%RYlf?c2keg40J zOm`w8Wq0{;i@~a?*^>O`B?nXMkpo>*92#M zD3R}>{uwLZhhNW=xi4!=vFd_Jf64HQU?#(woT4hk; z9i^68#aXbtHtq*Tl}N!q8e7OwK4ICB7?_i2?=nvwF&vDj*E;dISH@g}Zn)yrCDALx zI(w!08&lVUiwr|ovpmTUjvq$mhfQd+i{Z^vz(qa`qOA>wCm@1G`D|xdcHC@a#{Ek@ zt0XRtrYuLthV;uscKa6+>J?`@2uBF2i_f zq^vEhPpl`6j5McIZd;^coLKIgQh(^5V76neJou zGJ5%;TDMv{7QJ)%JJQWX%n+UIk)zl@=>IS=KHWgDeq;QwV|;^3>bry)qBo%?yuI9 zuB=8uWQ~{3@-ta#UzDDJQj{8P~l*iqxb2?irmtJJ4}*@PNC>x@pr==J)NA5~GZ+q+Q>W*zIJWcFbW_ zSzS!`7-sCdS4I~V2-PAHv$@QAtX}yHdmpw?9cm>RwK3yk+-38$HRv_0XPuncF*qij z$0-ERIpV*^Xa8wTNOo^-V0s`8UGs{^X;}lk!boZO*_o*t-Czc{p7L!zdFl##RN7am zD4w$0DW7@T?V0bFGd^4?zuU>pgvJP#PGH7fk(XAd5dAITq9kC-e#V7by|k($>FvBn>QYp5g{kwsSb zI;zjQ60{igW8DJwz7LR;hd%Q=j7gqxK!DYdXjLG4N#At5Yu*0s_<#fBJ80c1H%Qci zuu@*Bx8~`{oax@Y7pooT6UUv8V2X!V{^^Uyb zvR?MPZg`NKcKCwBim>mp9be$;D^~4y^)0*0IWmezJ+CAG z=p*7-oy^xabkae-|84IMl;HD{I#kTTk*I5g`Zr!KKi+ucz3eXFdFL$`~)o|RL; zD;Zg9^|hGn`RRuIlKL@2ew6r~@tXxPvpa2Eaxs>&nDFS6P`EA_wy3%G<3U@wiLbLx zf-T`4@9d+GmmYV$m4dq%DcqFr_OS?1l99dKxgD0J`>yuWHeAZ7d+&kPY9GQIx{7j;~gKgg+ME5aEhrP<5D0NV;*5c6!Rcv zCB-~&^j_=RM2`^TcHVnF9@Gkf6m{*XtS?Q5Q8WamJWLA@GRF83_a|l#6y9q@`WEFe=Pa0LM|WCmkn31~VzXK{ z$s3_SmLQJ|HQl<2-ZUw^H>o0&m>PWtJ#b z_E<{yB-z@mSt>TL^TlF4N3Um5YV_9Gm-*6a$aKjztj7TdfI{{+PGUI7;4C7LLLR1q zY(Zu?+|tnzR9KAV3xd2J3(-T{gSV&ovtKo}U@heugi*%J5@=eg;f-2sbrQ_9CZ-N(kg z>C}z4|Gs-_7#zHpxQs%WDq7t$Yrz*IL57h$5v~s@O?AWiKeB~7vLadgdFxZF167xo z=X=so;jF$-JeI!Yn?}YH{o57?0|Dm?2sid_BD~piZ4B01X4Yubt;GCaDaU^~G!lR- z=5I&G;$vfE!Wtz$OtsL z%(hc`9d6Byf5Tmjz~8FPa#{JBW$Cpra8=^>t0a&H+Y&)?KsqkeBbw}$tHMewplp#{AwY%} zio10znmlMv2vo~OGo$ejeJU+i?IHU$t!i@uv4`IoYi(IE)Zkdn+?xjUn(8De>1!7KkiPl_Pdwa)j#`mwz34 z6AL%*zb-}&GKlXAE=SMFJ$l6gA)`*c(k&X5utt!X@WBr1E4rYm3B3#H%!sJ9)wHk| z;Oy@^>d)CGA#tqtZa36g{0hSbjwCG&ZoH%01qoK`M&ySe@f2Lj5M0i1Bzj754Q@dR z86UQR9qkOjW>t%Z zLbu8QhT9s77Iu)?DBBE2;kB1P)%?y1G`9ANrWm`bD~h;InvM(#pv1D}RNn!MXP_mFtJ7+er4=gYn-kP5hb z^COU*2*qKQyVhz;{EK56hjd}fSjFMe;-$vQx0*&nWhS+vFLqd>;>p3AO4NYw)k$dZ zjTX4>;!4y1`Gyw8?N}rPU?(<{>?aglrd|YTzAy!R688X3-1`GuX)F-EYt1~v;g=ST zGMqqobeuEt4g6DVAo0O7LU#8Gc`PJfN8WYS(l~F=jkCp2KBj}QyWpq)?~-z+>0V9? z7i8(jAP`WM5#%I<(5nSEg7iWD>!k<-C~?N?mbvbfL-EZo{SVXQE+#H}agz>8we&s}wt zv+(|YJIq?9%#gq>?DKSm%WAjOFHz(|is0`-#+k|RD=2}o5Fz(Hk$5;#hxS!fGU>H0 z-RMht@YYtr#Hd^o-M%SjdcWSRGhZ8D8v`!`F9r1Qe$QPmY^kaC+Hzq1ySjzf{2s;E z)Plh4AW#P80UoIN?S(#xZ0E+^;gU7~U^oQ?)fShgY2+yE^ed;wDqjURqimp%wJ2o@==H@lnmQqGv3KfJ46orMpML`F^}N)x zVsBhlN?ZtoigGkO{?V}K)_D~&!3L#TxD}i5S!RwB+Gg>-{`B+S7-ix0SBdgr!3x=h zvXE2S$fD@x@ADtLrEhCwX|-ghj|3tmBj5|Lr@kAyqHOrW0#ZfU?U!BLuSjUjaZUH} zIw%y~{&Hl+K|g-!Ria!{F#V!Kvs#8pjvJNa&1hbFt`>DUjq+m2)OJQocCD5UcF3t% zmWg9_dyMWO$pP8to7!3I{o5UMbhfy-?>f)3dl~F>Gth<)Cdco`i^Lvz^GS8hT>~Ly zl}n4YoMe7gK#ct=uMpbdoi9x-qShv@?CsizI=zZ0Q$!jK69lCjK4 zR@)b0lK4>Ri?h&j9b6Q5nFQ*~dntnLEeL^hyyWbky;wm7kcB_Wz@yUuWNFJG;lf-T zn^w5%s*+!IBWkD7^Cx!au!F6ds4ztwXOdxjuhY8>w z+&@hCf1L@pW50llJ2gk(eIO`YIH(TXK*8AKE^HLz-sv;yIgY4#uy^QSer&Y6TNV_+ zzy6&~V~fjR9Ek3#|7nH2SIRjD4H3`Q!TW9=PPldp5?SeR9D(RyVQJ&u*fNrcRWkKF z^`gSjKwL3SxnjwL8+0bXHJ$V~TbtnZF_Zp*DQz!EhSa2uE@N^?w;XSL*ua`Yd zypxH)?v(C;;Zc0!EDcJU0c1%5qQgssh#*l)S=a~4A;6dcV6R#_0Hw6!@HKTO^LDKG1{{-sn> z{!6Lov-e|%3bK5QanV=49-Vb#jAhl@)X{JaU(eOJmv?hg$`d~)k5#8kM}K^@Dh;&X z%>OtysyXSz!{jN{x%IEwjzRd+;B?ubxfplp=vulB7A-cv9(3;K7Fr-~A5gdFpjq3D z)VtAdq_rL6?Em&*`x`FNy3N71n$@QBv*Vtykl|JbMC~d{E9geyuz$C<>HR0Q5y@=_ zd24m4I#OH{?tJE7ZLt;3<-)0QPRB=%|3L{?TtSx3YdGR!N?1Vg@r_USjuAc` zqhmIOlPoJUo7b%uaPMmiPK5nlUjz&kFVV$aUroK zaY}lr_CPnY-sx+#^Mzk=Td3c_lUQ5SCj`C1xvS8P5>NYLkZ$HPmvk-4_7OdS;b3U zSsz3dk3I_ry37$N94Kz%jwJ)Kg`XFbjGmem+1kmh40*1VrFc2+jbnW6zS^WW9?l5| z`Ls`h1v=`8a#m~9oqFs$2QH$aS9=@;bJ9<{Y&*LSe9_w3<7eM77=_~79(+LomG*ao z4t|C+nS;P*<>1^@MH5eRMX9jb74y~XlR@+Jn3LmPucoTG<|M{tY{$>+vz>z6;)m6y zE>#s5TW@)J48#ojw9V+uzIKT!-9*~78~P^{qLm-c^2yh&A;7xSQ*70aeVz%oO0WoUE8I_0++Y<%^)wjCAArF z_607PYUTqU5(q4DV(PAXHWxE`>Q#hc#D-}nv?RiUX1o%cB+yJ>sNWuCo`i_9OusZ` zU5}D))|^}6l1x_^wHsgFD(j}N|8AGEznfNa)G3wTW9l*1>*?S5Gl) zM&IIuM#)S0-ZDw8rQB&W{Jo`pINp@nS3tZYZaZpVKk^bovCjr9q^Q5;cZT|3HVly8 z)ER#A=4y+tHy4NXjeFm4UDohaw(?u65|kUQiEecqLnRGt#g^u+ReE(%(~pkVsN|Vu zW3f&tTWQ&An1_t(*;`RbTUV;Al0O{GsT`j;kL3D>-<79$7#euRF8MFtwa&VzJ(%;W$a^_G5qdi zeBR&B_xJhz{`>y%eLUWOc|2a`-h1vj=bn4+z2`hnof^Ft8x}n^(l36-LfHW!u+uBN zHFkXXyzO0665=&Rm(kSS@3dGwTZ~Wx>6sIT`+JGS$G^QW(@YhU zZoK_1wx>H&H~BK+kXG*(WMvnHUI|?zRBGs`F?c1D7gzcrCE;+k;T>VUt#kEyH5G?2 zr^a$z1N+SFB4apl=)#C7563a<2o=t@NkItl0r5e*I6yP-XWE+<@K~=DJvfFj-WX_m zhn~u_I$TN!kw;r9H@zoJ5g6IEe)iNkh?H@4uK7<_6*Xs^M^zX7R^(bu-q03NP)7-lB z^{nTJ4(>JI{(`4J&rO`smvvK}HYZzyBlAx4?s!~lSp)Z4k4QcT&be-cxoR$4^f;Ou z%UVgCyqRXGU%z?ot&7vq;G*F3w?@`AWgoZjk&FzsG9r$UdT%27ei+{gccb@aoAFUS zGd%tdMldYJThdyR9+q@QrQfxGZ1E^|zN}tS8eiq7`tt&<%NR5AyC8QqHwVr~03~tR zJH|ULV{;oMsv41r{q>`b25Aq}COZdwXENjS!uSGxJ(uMTEiudHB2IeDIOv4I#E3+3 z^{nFOdWD6`_mW0IY<+g6m9B7>c(uoTNpGVFMKZW+_X`*nET>B)>O;S0c@|1MkxnIK zGXzB0>6LoZFR2aPy#Z@RN2x#?O~kR$$K;QlZ5utOrMt$#-rUzMTi;l+^ICV)CzcTS za55&!$Gk^BcCIBT=LPG4*Ve#jsERwA+>WPVx_JPq-f3_;+|rcKz&@?kc73KZ7jsdz z-pE))KgCh#(zcJ~0nwSeSCa0{fuIn0om@`+_Ep=3BzTe2?CuOS$j@FZjsJ$>buG?q zTOnT0QQwIu`^P^9(5uYSu zf-HTeFvq}|i7{BIpRQ>Upj7ysutCWLOZ?Tj!IKJ*Ak(*+oX5V|q@7wCdpwgIO00X) z_ViDQcS6oW@=9C3V(bs=b4mmrE`q3bWv5Iz^jE;cTA0Kon0o7nz7w`7rIq2U-DUDe=l7{S?j z$i1U1WA}>a&I}hu@+lN>(F5Wlgw~_^W(XORf599<)F+e$Z|%0q-;6DSpw9 z!(jLqT<}gxX(ms_E=UyhP9jmfna^%ZMGj{wR=&Vu7w0yNf3hf>)~DVUlD(38&9(X) z_NZ%td%qtc=ChMRAad%Z&27%-|F9(0ewSBqUXEE`U)3!jK%`NUKabb02IBF^H$l

mt-Qem3?Pxy_6PZq7{j_om@U@RUkGq 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 Y1kqlG5Ec=DLv%n(Ltnki_@% literal 0 HcmV?d00001 diff --git a/ob_v3p0/microsites/v3p0/images/ob30-concept.png b/ob_v3p0/microsites/v3p0/images/ob30-concept.png new file mode 100644 index 0000000000000000000000000000000000000000..ce31fa1bb7b3fbebfbcbfe2cbd76d7d30d513e20 GIT binary patch literal 27376 zcmeFZXH-+)w>BC;M5%U=Dx%Va0Me_9f`UjBkQx+`5<>5gfT$oMAX24@G^r7V&_X~E zA|Sm)x)^$ZKtg~dguKDu|CIN==iK|@jyuNvaPon%#~Q25XU@6jUh|o25o>Z^pNpNJ z9RL7u-Mw?m3;Qz5bUttY+vE*23@q`4R{nA*YMbL zI#XKOEZx-rTc#UivF_d&=XXD1fa_t+MB6*BSLmlvsVA%nterO#zOy==y!iR&ZSN@2 z%o_CG0Pc*PxVQGE`VXg5gP4|DCG#Vo)l`rR1r-%HdQ(ArWoUy{Q0SZoM%#-<;i=+GCGx!)2#V<~fgHUl|V zA4G|@J0~XuU~3)xGtc7wqu-wp>RBT!qeDYV)kjqo3AfzQ#pguBXT_}=@S=8zIoFNS z4fqC$fLel{e29CYvnYM@$WW8=Z50JiGoU|MOa%jt68E z8$Z@f?23UlK_o^`8=LFW&;`L*(~3bsVhGZQFy}z>WPrXBcM=$xgpCgd*SY~

DIpuoNRrpe(l6+**p@WIl-_di8 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 Y*cPR7@M${TVKroIXnv{q;?2na1G@ZpJ^%m! literal 0 HcmV?d00001 diff --git a/ob_v3p0/microsites/v3p0/spec/introduction.md b/ob_v3p0/microsites/v3p0/spec/introduction.md index dc26ea9f..315ab774 100644 --- a/ob_v3p0/microsites/v3p0/spec/introduction.md +++ b/ob_v3p0/microsites/v3p0/spec/introduction.md @@ -195,7 +195,7 @@ In the diagram below, the concepts are shown in gray boxes (e.g. Assertion). Ple Starting with this version of the Open Badges Specification, an Assertion is also a Verifiable Credential (VC) as defined by the [[vc-data-model-2.0]] specification. The diagram includes labels that show the relationships between VC terminology and Open Badges terminology (e.g. Issuer is identified by the VC "issuer"). -![Diagram shows the major conceptual components of an Open Badge Verifiable Credential](/standards/images/ob30-concept.png) +![Diagram shows the major conceptual components of an Open Badge Verifiable Credential](../images/ob30-concept.png) *Diagram shows the major conceptual components of an Open Badge Verifiable Credential* diff --git a/ob_v3p0/microsites/v3p0/spec/overview.md b/ob_v3p0/microsites/v3p0/spec/overview.md index 5e608938..273066ac 100644 --- a/ob_v3p0/microsites/v3p0/spec/overview.md +++ b/ob_v3p0/microsites/v3p0/spec/overview.md @@ -13,11 +13,11 @@ This specification changes the structure of the Open Badges [Assertion](#achieve Previous versions of an Open Badges Assertion, illustrated in the graphic below, structures its objects like this: An Assertion identifies a recipient with a "recipient" relationship to an IdentityObject that contains identifying properties. It identifies which badge it represents with a "badge" relationship to a BadgeClass. It identifies its verification information with a "verification" relationship to a VerificationObject. It identifies its issuer with an "issuer" relationship between the BadgeClass and the Issuer. -![Open Badges 2.0 Diagram](/standards/images/figure01-openbadges-2.0-diagram.png) +![Open Badges 2.0 Diagram](../images/figure01-openbadges-2.0-diagram.png) The Verifiable Credentials structure in this specification depicted below offers the same information with a slightly different structure: A Verifiable Credential identifies its recipient with a "credentialSubject" relationship to a subject class that is identified by an identifier. It identifies its issuer with an "issuer" relationship directly to an Issuer. The Credential claims the subject has met the criteria of a specific Achievement (also known as the BadgeClass in previous versions) with an "achievement" relationship to that defined achievement. And it identifies its verification information with a proof. -![Diagram show the major conceptual components of an Open Badge Verifiable Credential](/standards/images/ob30-concept.png) +![Diagram show the major conceptual components of an Open Badge Verifiable Credential](../images/ob30-concept.png) ## Benefits and Opportunities From 3d77af2ddf8d8e4c8028f2f3cfb7a4dbc69e3dc7 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 1 May 2026 12:53:36 +0200 Subject: [PATCH 17/24] Update ASTRO_BASE_PATH in Dockerfile to point to /openbadges/ --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c6879438..d856c648 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM us-central1-docker.pkg.dev/specautomation-458709/microsites/microsites-base:dev -ARG ASTRO_BASE_PATH=/case/ -ENV ASTRO_BASE_PATH=/case/ +ARG ASTRO_BASE_PATH=/openbadges/ +ENV ASTRO_BASE_PATH=/openbadges/ # This clears some test upstream content bundled in the base image, preserving content.config.ts RUN if [ -f /app/src/content/content.config.ts ]; then \ From b5fe2fe0f0b55a807a07b36be947fc62c13513cc Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 1 May 2026 17:36:29 +0200 Subject: [PATCH 18/24] Add LATEST_SPEC_VERSION to environment variables in Cloud Run deployment workflow --- .github/workflows/deploy-cloud-run.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index b5a746b4..3a5d8026 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -26,6 +26,7 @@ env: AUTH0_AUDIENCE: ${{ vars.AUTH0_AUDIENCE }} AUTH_REDIRECT_URI: ${{ vars.AUTH_REDIRECT_URI }} AUTH_POST_LOGIN_REDIRECT: ${{ vars.AUTH_POST_LOGIN_REDIRECT }} + LATEST_SPEC_VERSION: ${{ vars.LATEST_SPEC_VERSION }} # Secrets AUTH0_CLIENT_SECRET: ${{ secrets.AUTH0_CLIENT_SECRET }} @@ -100,6 +101,7 @@ jobs: --set-env-vars AUTH_REDIRECT_URI=${{ env.AUTH_REDIRECT_URI }} --set-env-vars AUTH_POST_LOGIN_REDIRECT=${{ env.AUTH_POST_LOGIN_REDIRECT }} --set-env-vars MPS_API_KEY=${{ env.MPS_API_KEY }} + --set-env-vars LATEST_SPEC_VERSION=${{ env.LATEST_SPEC_VERSION }} - name: Output URL From 9ebd0251f44066f24ecf2f705c7ef93fd416db30 Mon Sep 17 00:00:00 2001 From: tcouper Date: Mon, 25 May 2026 13:22:59 +0100 Subject: [PATCH 19/24] fix: updated for microsites --- .github/workflows/deploy-cloud-run.yml | 23 ++++++- Dockerfile | 33 +++------- docker-compose.yml | 48 ++++++++++++++ .../aceExtension/v1p0/microsite/v1p0.md | 2 +- .../v2p0/microsite/v2p0.md | 4 +- .../v2p0/microsite/v2p0.md | 4 +- ob_v3p0/microsites/v3p0.md | 58 ++++++++-------- ob_v3p0/microsites/v3p0/cert.md | 48 +++++++------- ob_v3p0/microsites/v3p0/errata.md | 12 ++-- ob_v3p0/microsites/v3p0/impl.md | 66 +++++++++---------- 10 files changed, 175 insertions(+), 123 deletions(-) create mode 100644 docker-compose.yml diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index 3a5d8026..e6b754fd 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -27,11 +27,21 @@ env: AUTH_REDIRECT_URI: ${{ vars.AUTH_REDIRECT_URI }} AUTH_POST_LOGIN_REDIRECT: ${{ vars.AUTH_POST_LOGIN_REDIRECT }} LATEST_SPEC_VERSION: ${{ vars.LATEST_SPEC_VERSION }} - + # Image service (diagram rendering at startup build) + IMAGE_SERVICE_URL: ${{ vars.IMAGE_SERVICE_URL }} + IMAGE_SERVICE_AUTH0_DOMAIN: ${{ vars.IMAGE_SERVICE_AUTH0_DOMAIN }} + IMAGE_SERVICE_AUTH0_AUDIENCE: ${{ vars.IMAGE_SERVICE_AUTH0_AUDIENCE }} + IMAGE_SERVICE_M2M_CLIENT_ID: ${{ vars.IMAGE_SERVICE_M2M_CLIENT_ID }} + # FastComments (discussion) + FASTCOMMENTS_TENANT_ID: ${{ vars.FASTCOMMENTS_TENANT_ID }} + FASTCOMMENTS_ENABLED: ${{ vars.FASTCOMMENTS_ENABLED }} + COMMENTS_SITE_KEY: ${{ vars.COMMENTS_SITE_KEY }} # Secrets AUTH0_CLIENT_SECRET: ${{ secrets.AUTH0_CLIENT_SECRET }} AUTH_COOKIE_SECRET: ${{ secrets.AUTH_COOKIE_SECRET }} MPS_API_KEY: ${{ secrets.MPS_API_KEY }} + IMAGE_SERVICE_M2M_CLIENT_SECRET: ${{ secrets.IMAGE_SERVICE_M2M_CLIENT_SECRET }} + FASTCOMMENTS_API_SECRET: ${{ secrets.FASTCOMMENTS_API_SECRET }} jobs: deploy: @@ -102,8 +112,15 @@ jobs: --set-env-vars AUTH_POST_LOGIN_REDIRECT=${{ env.AUTH_POST_LOGIN_REDIRECT }} --set-env-vars MPS_API_KEY=${{ env.MPS_API_KEY }} --set-env-vars LATEST_SPEC_VERSION=${{ env.LATEST_SPEC_VERSION }} - + --set-env-vars IMAGE_SERVICE_URL=${{ env.IMAGE_SERVICE_URL }} + --set-env-vars IMAGE_SERVICE_AUTH0_DOMAIN=${{ env.IMAGE_SERVICE_AUTH0_DOMAIN }} + --set-env-vars IMAGE_SERVICE_AUTH0_AUDIENCE=${{ env.IMAGE_SERVICE_AUTH0_AUDIENCE }} + --set-env-vars IMAGE_SERVICE_M2M_CLIENT_ID=${{ env.IMAGE_SERVICE_M2M_CLIENT_ID }} + --set-env-vars IMAGE_SERVICE_M2M_CLIENT_SECRET=${{ env.IMAGE_SERVICE_M2M_CLIENT_SECRET }} + --set-env-vars FASTCOMMENTS_TENANT_ID=${{ env.FASTCOMMENTS_TENANT_ID }} + --set-env-vars FASTCOMMENTS_ENABLED=${{ env.FASTCOMMENTS_ENABLED }} + --set-env-vars FASTCOMMENTS_API_SECRET=${{ env.FASTCOMMENTS_API_SECRET }} + --set-env-vars COMMENTS_SITE_KEY=${{ env.COMMENTS_SITE_KEY }} - name: Output URL run: echo "Deployed to ${{ steps.deploy.outputs.url }}" - diff --git a/Dockerfile b/Dockerfile index d856c648..d3235a6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,19 @@ FROM us-central1-docker.pkg.dev/specautomation-458709/microsites/microsites-base:dev -ARG ASTRO_BASE_PATH=/openbadges/ -ENV ASTRO_BASE_PATH=/openbadges/ +ARG ASTRO_BASE_PATH=/open-badges/ +ENV ASTRO_BASE_PATH=/open-badges/ +ENV MICROSITE_CONTENT_ROOT=/app/content -# This clears some test upstream content bundled in the base image, preserving content.config.ts -RUN if [ -f /app/src/content/content.config.ts ]; then \ - cp /app/src/content/content.config.ts /tmp/content.config.ts; \ - fi && \ - rm -rf /app/src/content && \ - mkdir -p /app/src/content/standards && \ - if [ -f /tmp/content.config.ts ]; then \ - cp /tmp/content.config.ts /app/src/content/content.config.ts; \ - rm /tmp/content.config.ts; \ - fi +# Remove bundled upstream example content (mdexamples, diagram-examples, etc.) +RUN rm -rf /app/content/docs - -COPY --chown=astro:nodejs ob_v3p0/microsites /app/src/content/standards/ -COPY --chown=astro:nodejs .microsite /app/src/content/ +COPY --chown=astro:nodejs ob_v3p0/microsites /app/content/docs/standards/ +COPY --chown=astro:nodejs .microsite /app/content/.microsite # ACE Extension -COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/src/content/standards/ob-ace +COPY --chown=astro:nodejs extensions/aceExtension/v1p0/microsite /app/content/docs/standards/ob-ace # Assessment Extension -COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/src/content/standards/ob-assessment +COPY --chown=astro:nodejs extensions/assessmentExtension/v2p0/microsite /app/content/docs/standards/ob-assessment # Issuer Accreditation Extension -COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/src/content/standards/ob-accred - -# The base image handles everything: -# 1. Runtime processes the assets (transforms paths, copies assets) -# 2. Starts the Astro server -# No additional commands needed! \ No newline at end of file +COPY --chown=astro:nodejs extensions/issuerAccreditationExtension/v2p0/microsite /app/content/docs/standards/ob-accred diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..5714af1e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +services: + image-service: + image: us-central1-docker.pkg.dev/specautomation-458709/microsites/microsites-image-service:dev + platform: linux/amd64 + container_name: ob-image-service-dev + ports: + - "8080:8080" + environment: + NODE_ENV: development + IN_DOCKER: "true" + IMAGE_SERVICE_AUTH_DISABLED: "true" + CACHE_DIR: /cache + CACHE_PUBLIC_HOST: http://image-service:8080 + volumes: + - diagram-cache:/cache + + web: + build: + context: . + dockerfile: Dockerfile + args: + ASTRO_BASE_PATH: "/open-badges/" + platform: linux/amd64 + image: ob-microsite:local + container_name: ob-microsite-dev + ports: + - "4321:4321" + depends_on: + - image-service + environment: + NODE_ENV: development + IN_DOCKER: "true" + ASTRO_BASE_PATH: "/open-badges/" + MICROSITE_CONTENT_ROOT: "/app/content" + DISABLE_AUTH: "true" + HOST: "0.0.0.0" + IMAGE_SERVICE_URL: http://image-service:8080 + IMAGE_SERVICE_AUTH_DISABLED: "true" + LATEST_SPEC_VERSION: "v3p0" + # Optional: uncomment and set for MPS blocks or FastComments local testing + # MPS_API_KEY: "" + # MPS_HOST: "https://mps.1edtech.org" + # FASTCOMMENTS_TENANT_ID: "" + # FASTCOMMENTS_ENABLED: "true" + # COMMENTS_SITE_KEY: "open-badges" + +volumes: + diagram-cache: diff --git a/extensions/aceExtension/v1p0/microsite/v1p0.md b/extensions/aceExtension/v1p0/microsite/v1p0.md index 12bb55db..48a36e0f 100644 --- a/extensions/aceExtension/v1p0/microsite/v1p0.md +++ b/extensions/aceExtension/v1p0/microsite/v1p0.md @@ -3,7 +3,7 @@ author: 1Edtech Consortium category: Extension title: Open Badges American Council for Education (ACE) Extension shortcode: OB-ACE-10 -status: Candidate Final Public +status: PublicCandidateFinal lastUpdated: 2025-10-09 version: '1.0' nature: normative diff --git a/extensions/assessmentExtension/v2p0/microsite/v2p0.md b/extensions/assessmentExtension/v2p0/microsite/v2p0.md index f1ec8e1d..bf59345b 100644 --- a/extensions/assessmentExtension/v2p0/microsite/v2p0.md +++ b/extensions/assessmentExtension/v2p0/microsite/v2p0.md @@ -3,11 +3,11 @@ author: 1Edtech Consortium category: Extension title: Open Badges Assessment Extension shortcode: OB-ASSESSMENT-20 -status: Candidate Final Public +status: PublicCandidateFinal lastUpdated: 2025-07-08 version: '2.0' nature: normative -docType: spec +docType: specification contributors: - name: Nate Otto affiliation: Skybridge Skills diff --git a/extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md b/extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md index fde22660..974ec801 100644 --- a/extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md +++ b/extensions/issuerAccreditationExtension/v2p0/microsite/v2p0.md @@ -3,11 +3,11 @@ author: 1Edtech Consortium category: Extension title: Open Badges Issuer Accreditation Extension shortcode: OB-ACCRED-20 -status: Base Document +status: Final lastUpdated: 2024-07-24 version: '2.0' nature: normative -docType: spec +docType: specification contributors: - name: Nate Otto affiliation: Skybridge Skills diff --git a/ob_v3p0/microsites/v3p0.md b/ob_v3p0/microsites/v3p0.md index 16db10f0..322cddc4 100644 --- a/ob_v3p0/microsites/v3p0.md +++ b/ob_v3p0/microsites/v3p0.md @@ -4,7 +4,7 @@ category: Specification title: Open Badges Specification shortcode: OB-30 status: Final -lastUpdated: November 6, 2025 +lastUpdated: 2025-11-06 version: '3.0' nature: normative docType: specification @@ -104,117 +104,117 @@ contributors: role: Editor ipDisclosures: - organization: Concentric Sky - date: October 24, 2019 + date: 2019-10-24 claim: false type: RF RAND (Required & Optional Elements) - organization: Arizona State University - date: June 21, 2022 + date: 2022-06-21 claim: false type: RF RAND (Required & Optional Elements) - organization: Temple University - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: Credly - date: October 3, 2019 + date: 2019-10-03 claim: false type: RF RAND (Required & Optional Elements) - organization: Workday, Inc. - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: RANDA Solutions - date: June 9, 2022 + date: 2022-06-09 claim: false type: RF RAND (Required & Optional Elements) - organization: Anthology - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Unicon - date: April 22, 2024 + date: 2024-04-22 claim: false type: RF RAND (Required & Optional Elements) - organization: Bowdoin College - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) - organization: American Association of Collegiate Registrars and Admissions Officers (AACARO) - date: April 15, 2024 + date: 2024-04-15 claim: false type: RF RAND (Required & Optional Elements) - organization: Desire to Learn (D2L) - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Digital Knowledge EdTech Lab Inc. - date: April 24, 2024 + date: 2024-04-24 claim: false type: RF RAND (Required & Optional Elements) - organization: IQC Italian Quality Company - date: April 19, 2024 + date: 2024-04-19 claim: false type: RF RAND (Required & Optional Elements) - organization: Skybridge Skills - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Navigatr - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: T3 Innovation Network, US Chamber of Commerce Foundation - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: Territorium - date: April 23, 2024 + date: 2024-04-23 claim: false type: RF RAND (Required & Optional Elements) - organization: 'Western Governors University (WGU) ' - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) releases: - version: "Candidate Final" docVersion: "1.0" - date: 2022/07/14 + date: 2022-07-14 comments: "Open Badges 3.0 first Candidate Final release" - version: "Candidate Public Final" docVersion: "1.0.1" - date: 2023/02/09 + date: 2023-02-09 comments: "Open Badges 3.0 first Candidate Public Final release" - version: "Final" docVersion: "1.0" - date: 2024/05/27 + date: 2024-05-27 comments: "Open Badges 3.0 Final Release" - version: "Final" docVersion: "1.1" - date: 2024/07/26 + date: 2024-07-26 comments: "Fixed some typos. See [[OB-ERRATA-30]]\nAdded [[VC-DATA-MODEL-1.1]] compatible JSON schema in Document Set" - version: "Final" docVersion: "1.2" - date: 2024/12/23 + date: 2024-12-23 comments: "Clarified proof mechanism and algorithm selection. See [[OB-ERRATA-30]]" - version: "Final" docVersion: "1.3" - date: 2025/10/09 + date: 2025-10-09 comments: "Updated JSON Schemas with support for [[JSON-LD11-API]] compaction process\nDeprecated [[VCRL-10]] in favour of [[vc-bitstring-status-list]]" - version: "Final" docVersion: "1.4" - date: 2025/10/14 + date: 2025-10-14 comments: "Credential Status' id is an optional field as defined at [[vc-data-model-2.0]]" - version: "Final" docVersion: "1.4.1" - date: 2025/11/06 + date: 2025-11-06 comments: "Updated JSON-LD Context, adding the term `jti`" - version: "Final" docVersion: "1.4.2" - date: 2026/04/17 + date: 2026-04-17 comments: "Updated CredentialStatus of all examples to BitstringStatusListEntry" - version: "Final" docVersion: "1.4.3" - date: 2026/04/22 + date: 2026-04-22 comments: "Fixed links to OpenAPI files in Open Badges API section" --- diff --git a/ob_v3p0/microsites/v3p0/cert.md b/ob_v3p0/microsites/v3p0/cert.md index 204b472b..f010f3f9 100644 --- a/ob_v3p0/microsites/v3p0/cert.md +++ b/ob_v3p0/microsites/v3p0/cert.md @@ -4,7 +4,7 @@ category: Certification title: Open Badges Specification Conformance and Certification Guide shortcode: OB-CERT-30 status: Final -lastUpdated: December 12, 2025 +lastUpdated: 2025-12-12 version: '3.0' nature: normative docType: conformance @@ -104,97 +104,97 @@ contributors: role: Editor ipDisclosures: - organization: Concentric Sky - date: October 24, 2019 + date: 2019-10-24 claim: false type: RF RAND (Required & Optional Elements) - organization: Arizona State University - date: June 21, 2022 + date: 2022-06-21 claim: false type: RF RAND (Required & Optional Elements) - organization: Temple University - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: Credly - date: October 3, 2019 + date: 2019-10-03 claim: false type: RF RAND (Required & Optional Elements) - organization: Workday, Inc. - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: RANDA Solutions - date: June 9, 2022 + date: 2022-06-09 claim: false type: RF RAND (Required & Optional Elements) - organization: Anthology - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Unicon - date: April 22, 2024 + date: 2024-04-22 claim: false type: RF RAND (Required & Optional Elements) - organization: Bowdoin College - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) - organization: American Association of Collegiate Registrars and Admissions Officers (AACARO) - date: April 15, 2024 + date: 2024-04-15 claim: false type: RF RAND (Required & Optional Elements) - organization: Desire to Learn (D2L) - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Digital Knowledge EdTech Lab Inc. - date: April 24, 2024 + date: 2024-04-24 claim: false type: RF RAND (Required & Optional Elements) - organization: IQC Italian Quality Company - date: April 19, 2024 + date: 2024-04-19 claim: false type: RF RAND (Required & Optional Elements) - organization: Skybridge Skills - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Navigatr - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: T3 Innovation Network, US Chamber of Commerce Foundation - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: Territorium - date: April 23, 2024 + date: 2024-04-23 claim: false type: RF RAND (Required & Optional Elements) - organization: 'Western Governors University (WGU) ' - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) releases: - version: Candidate Public Final docVersion: 1.0 - date: November 10, 2022 + date: 2022-11-10 comments: Open Badges 3.0 first Candidate Public Final release - version: Final docVersion: 1.0 - date: May 27, 2024 + date: 2024-05-27 comments: Open Badges 3.0 Final Release - version: Final docVersion: 1.1 - date: Dec 23, 2024 + date: 2024-12-23 comments: Added supported proof mechanisms for Issuer.\nAdded supported proof mechanisms for Displayer. Removed invalid Host tests. - version: Final docVersion: 1.2 - date: July 11, 2025 + date: 2025-07-11 comments: Added ECDSA Cryptosuite ecdsa-sd-2023 to Issuer and Displayer supported proof mechanisms. - version: Final docVersion: 1.3 - date: December 12, 2025 + date: 2025-12-12 comments: Added JSON-LD Safe mode requirement for issuer certification profile. --- diff --git a/ob_v3p0/microsites/v3p0/errata.md b/ob_v3p0/microsites/v3p0/errata.md index aec3ac3f..24a4c4d1 100644 --- a/ob_v3p0/microsites/v3p0/errata.md +++ b/ob_v3p0/microsites/v3p0/errata.md @@ -4,7 +4,7 @@ category: Specification title: Open Badges Errata shortcode: OB-ERRATA-30 status: Final -lastUpdated: July 17, 2024 +lastUpdated: 2024-07-17 version: '3.0' nature: informative docType: errata @@ -105,23 +105,23 @@ contributors: releases: - version: Version 3.0 Candidate Final docVersion: 1.0 - date: March 6, 2023 + date: 2023-03-06 comments: Added changes in context.json file - version: Version 3.0 Final docVersion: 1.0 - date: June 17, 2024 + date: 2024-06-17 comments: Added typography errors - version: Version 3.0 Final docVersion: 1.1 - date: July 26, 2024 + date: 2024-07-26 comments: Added typography errors - version: Version 3.0 Final docVersion: 1.2 - date: Dec 23, 2024 + date: 2024-12-23 comments: Consolidated with version 1.2 of the specification.\nClarified proof mechanism and algorithm selection. - version: Version 3.0 Final docVersion: 1.3 - date: June 16, 2025 + date: 2025-06-16 comments: Fixed typography errors in the errata document. --- diff --git a/ob_v3p0/microsites/v3p0/impl.md b/ob_v3p0/microsites/v3p0/impl.md index 2db88874..8ae81033 100644 --- a/ob_v3p0/microsites/v3p0/impl.md +++ b/ob_v3p0/microsites/v3p0/impl.md @@ -4,7 +4,7 @@ category: Guide title: Open Badges Implementation Guide shortcode: OB-IMPL-30 status: Final -lastUpdated: Apr 7th, 2025 +lastUpdated: 2025-04-07 version: '3.0' nature: informative docType: guide @@ -28,133 +28,133 @@ contributors: role: Editor ipDisclosures: - organization: Concentric Sky - date: October 24, 2019 + date: 2019-10-24 claim: false type: RF RAND (Required & Optional Elements) - organization: Arizona State University - date: June 21, 2022 + date: 2022-06-21 claim: false type: RF RAND (Required & Optional Elements) - organization: Temple University - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: Credly - date: October 3, 2019 + date: 2019-10-03 claim: false type: RF RAND (Required & Optional Elements) - organization: Workday, Inc. - date: June 10, 2022 + date: 2022-06-10 claim: false type: RF RAND (Required & Optional Elements) - organization: RANDA Solutions - date: June 9, 2022 + date: 2022-06-09 claim: false type: RF RAND (Required & Optional Elements) - organization: Anthology - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Unicon - date: April 22, 2024 + date: 2024-04-22 claim: false type: RF RAND (Required & Optional Elements) - organization: Bowdoin College - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) - organization: American Association of Collegiate Registrars and Admissions Officers (AACARO) - date: April 15, 2024 + date: 2024-04-15 claim: false type: RF RAND (Required & Optional Elements) - organization: Desire to Learn (D2L) - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Digital Knowledge EdTech Lab Inc. - date: April 24, 2024 + date: 2024-04-24 claim: false type: RF RAND (Required & Optional Elements) - organization: IQC Italian Quality Company - date: April 19, 2024 + date: 2024-04-19 claim: false type: RF RAND (Required & Optional Elements) - organization: Skybridge Skills - date: April 16, 2024 + date: 2024-04-16 claim: false type: RF RAND (Required & Optional Elements) - organization: Navigatr - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: T3 Innovation Network, US Chamber of Commerce Foundation - date: April 25, 2024 + date: 2024-04-25 claim: false type: RF RAND (Required & Optional Elements) - organization: Territorium - date: April 23, 2024 + date: 2024-04-23 claim: false type: RF RAND (Required & Optional Elements) - organization: 'Western Governors University (WGU) ' - date: June 11, 2022 + date: 2022-06-11 claim: false type: RF RAND (Required & Optional Elements) releases: - version: Version 3.0 IMS Candidate Final docVersion: 1.0 - date: November 10, 2022 + date: 2022-11-10 comments: Covers Issuer, Displayer, and Host conformance and certification. - version: Version 3.0 IMS Candidate Final docVersion: 1.1 - date: June 20, 2023 + date: 2023-06-20 comments: Updated Linked Data Proof to the new EdDSA Cryptosuite v2022 [[VC-DI-EDDSA]]. - version: Version 3.0 IMS Candidate Final docVersion: 1.2 - date: July 14, 2023 + date: 2023-07-14 comments: New version of the context.json (`context-3.0.2.json`) file. See [[OB-ERRATA-30]] for detailed changes - version: Version 3.0 IMS Candidate Final docVersion: 1.3 - date: September 8, 2023 + date: 2023-09-08 comments: Reorganized some sections of the document to highlight Issuer, Displayer and Host roles.\nAdded recommended practice for including additional info of the recipient of a credential.\nAdded recommended practice for supporting old cryptosuites.\nAdded test vector data for signing Open Badges and Comprehensive Learner Record. - version: Version 3.0 IMS Candidate Final docVersion: 1.4 - date: September 22, 2023 + date: 2023-09-22 comments: Added a section about including older Open Badges in CLR 2.0. - version: Version 3.0 IMS Candidate Final docVersion: 1.5 - date: November 9, 2023 + date: 2023-11-09 comments: Added a section about issuer's key provenance. - version: Version 3.0 IMS Candidate Final docVersion: 1.6 - date: December 13, 2023 + date: 2023-12-13 comments: New version of the context.json (`context-3.0.3.json`) file. See [[OB-ERRATA-30]] for detailed changes - version: Version 3.0 IMS Candidate Final docVersion: 1.7 - date: December 15, 2023 + date: 2023-12-15 comments: Added sections about alignment of achievements with non-1EdTech vocabularies, such Credential Engine. - version: Version 3.0 IMS Candidate Final docVersion: 1.8 - date: January 26, 2023 + date: 2023-01-26 comments: Language of related achievement now uses the new attribute `inLanguage` instead of `@language`. - version: Version 3.0 IMS Candidate Final docVersion: 1.9 - date: April 2, 2024 + date: 2024-04-02 comments: Upgraded to [[VC-DATA-MODEL-2.0]] - version: Version 3.0 IMS Candidate Final docVersion: 1.10 - date: October 1, 2024 + date: 2024-10-01 comments: Added section about extensions.\nAdded section about privacy. - version: Final Release docVersion: 1.0 - date: December 23, 2024 + date: 2024-12-23 comments: Clarified proof mechanism and algorithm selection. - version: Final Release docVersion: 1.1 - date: February 12, 2025 + date: 2025-02-12 comments: Reorganization.\nClarified some paragraphs. - version: Final Release docVersion: 2.0 - date: April 7, 2025 + date: 2025-04-07 comments: Fixed some typos. --- From 44865ff059638c89425d61f4aa2bbb2f1bd85afa Mon Sep 17 00:00:00 2001 From: tcouper Date: Mon, 25 May 2026 14:30:54 +0100 Subject: [PATCH 20/24] fix: added docType segment to allow the inclusion within other files --- ob_v3p0/microsites/v3p0.md | 22 +++++++++---------- ob_v3p0/microsites/v3p0/cert.md | 12 +++++----- ob_v3p0/microsites/v3p0/cert/abstract.md | 9 ++++++++ ob_v3p0/microsites/v3p0/cert/conformance.md | 9 ++++++++ ob_v3p0/microsites/v3p0/cert/displayer.md | 9 ++++++++ ob_v3p0/microsites/v3p0/cert/host.md | 9 ++++++++ ob_v3p0/microsites/v3p0/cert/introduction.md | 9 ++++++++ ob_v3p0/microsites/v3p0/cert/issuer.md | 9 ++++++++ ob_v3p0/microsites/v3p0/errata.md | 2 +- ob_v3p0/microsites/v3p0/errata/errata.md | 9 ++++++++ ob_v3p0/microsites/v3p0/impl.md | 16 +++++++------- ob_v3p0/microsites/v3p0/impl/conformance.md | 9 ++++++++ ob_v3p0/microsites/v3p0/impl/extensions.md | 9 ++++++++ .../microsites/v3p0/impl/getting-started.md | 9 ++++++++ ob_v3p0/microsites/v3p0/impl/help.md | 9 ++++++++ ob_v3p0/microsites/v3p0/impl/introduction.md | 9 ++++++++ ob_v3p0/microsites/v3p0/impl/migrating.md | 9 ++++++++ .../v3p0/impl/recommended-practices.md | 9 ++++++++ .../microsites/v3p0/impl/reference-impls.md | 9 ++++++++ ob_v3p0/microsites/v3p0/spec/abstract.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/docformat.md | 11 +++++++++- .../v3p0/spec/equality-and-comparison.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/extending.md | 9 ++++++++ .../microsites/v3p0/spec/gettingstarted.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/integrity.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/introduction.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/overview.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/serialization.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/usecases.md | 11 +++++++++- ob_v3p0/microsites/v3p0/spec/verification.md | 11 +++++++++- 30 files changed, 270 insertions(+), 36 deletions(-) diff --git a/ob_v3p0/microsites/v3p0.md b/ob_v3p0/microsites/v3p0.md index 322cddc4..236afeee 100644 --- a/ob_v3p0/microsites/v3p0.md +++ b/ob_v3p0/microsites/v3p0.md @@ -218,17 +218,17 @@ releases: comments: "Fixed links to OpenAPI files in Open Badges API section" --- -@v3p0/spec/abstract.md +@standards/v3p0/spec/abstract.md -@v3p0/spec/introduction.md +@standards/v3p0/spec/introduction.md -@v3p0/spec/overview.md +@standards/v3p0/spec/overview.md -@v3p0/spec/usecases.md +@standards/v3p0/spec/usecases.md -@v3p0/spec/gettingstarted.md +@standards/v3p0/spec/gettingstarted.md -@v3p0/spec/docformat.md +@standards/v3p0/spec/docformat.md # Open Badges API @@ -982,11 +982,11 @@ When the request for revocation is rejected, the [=authorization server=] return -@v3p0/spec/integrity.md +@standards/v3p0/spec/integrity.md -@v3p0/spec/verification.md +@standards/v3p0/spec/verification.md -@v3p0/spec/equality-and-comparison.md +@standards/v3p0/spec/equality-and-comparison.md # Verifiable Credentials Extensions @@ -1001,7 +1001,7 @@ This standard references four VC Extensions: > **Note**: The 1EdTech extensions are designed to work with any [=verifiable credential=] and may be contributed to the [[VC-EXTENSION-REGISTRY]] in the future. -@v3p0/spec/serialization.md +@standards/v3p0/spec/serialization.md # Data Models @@ -1078,7 +1078,7 @@ title: Verification Support Data Models The data models in this section are used by the [[[#verification-and-validation]]] process for supporting older credentials created with [[VC-DATA-MODEL-1.1]]. -@v3p0/spec/extending.md +@standards/v3p0/spec/extending.md # Examples diff --git a/ob_v3p0/microsites/v3p0/cert.md b/ob_v3p0/microsites/v3p0/cert.md index f010f3f9..9405fc9f 100644 --- a/ob_v3p0/microsites/v3p0/cert.md +++ b/ob_v3p0/microsites/v3p0/cert.md @@ -198,14 +198,14 @@ releases: comments: Added JSON-LD Safe mode requirement for issuer certification profile. --- -@v3p0/cert/abstract.md +@standards/v3p0/cert/abstract.md -@v3p0/cert/introduction.md +@standards/v3p0/cert/introduction.md -@v3p0/cert/conformance.md +@standards/v3p0/cert/conformance.md -@v3p0/cert/issuer.md +@standards/v3p0/cert/issuer.md -@v3p0/cert/displayer.md +@standards/v3p0/cert/displayer.md -@v3p0/cert/host.md +@standards/v3p0/cert/host.md diff --git a/ob_v3p0/microsites/v3p0/cert/abstract.md b/ob_v3p0/microsites/v3p0/cert/abstract.md index 14e6d3b9..fef20bbf 100644 --- a/ob_v3p0/microsites/v3p0/cert/abstract.md +++ b/ob_v3p0/microsites/v3p0/cert/abstract.md @@ -1,3 +1,12 @@ +--- +title: "Abstract" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Abstract for the Open Badges 3.0 certification document" +--- + ## Abstract Open Badges are visual symbols of accomplishments packed with verifiable metadata according to the Open Badges specification. The Open Badges 3.0 specification [[OB-30]] defines the properties necessary to define an achievement and award it to a recipient, as well as procedures for verifying badge authenticity and “baking” badge information into portable image files. It includes term definitions for representations of data in Open Badges and defines an API for exchanging badge information. These term definitions appear in the current Open Badges JSON-LD Context File. diff --git a/ob_v3p0/microsites/v3p0/cert/conformance.md b/ob_v3p0/microsites/v3p0/cert/conformance.md index c97dddd1..e2d46bce 100644 --- a/ob_v3p0/microsites/v3p0/cert/conformance.md +++ b/ob_v3p0/microsites/v3p0/cert/conformance.md @@ -1,3 +1,12 @@ +--- +title: "Conformance and Certification" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Overview of Open Badges 3.0 conformance and certification requirements" +--- + ## Conformance and Certification The goal of 1EdTech certification for Open Badges [[OB-30]] is to ensure interoperable implementations of badging systems that generate and issue digital badges as well as those that host and display badges. diff --git a/ob_v3p0/microsites/v3p0/cert/displayer.md b/ob_v3p0/microsites/v3p0/cert/displayer.md index 5e9b19e3..d8670cae 100644 --- a/ob_v3p0/microsites/v3p0/cert/displayer.md +++ b/ob_v3p0/microsites/v3p0/cert/displayer.md @@ -1,3 +1,12 @@ +--- +title: "Open Badges 3.0 Displayer Service Conformance" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Displayer service conformance requirements for Open Badges 3.0 certification" +--- + ## Open Badges 3.0 Displayer Service Conformance {#displayer-conformance} An Open Badges Displayer is an application that displays and verifies badges for viewers. The candidate platform must support viewer-initiated verification of a badge. diff --git a/ob_v3p0/microsites/v3p0/cert/host.md b/ob_v3p0/microsites/v3p0/cert/host.md index a1e10ef4..37f82a63 100644 --- a/ob_v3p0/microsites/v3p0/cert/host.md +++ b/ob_v3p0/microsites/v3p0/cert/host.md @@ -1,3 +1,12 @@ +--- +title: "Open Badges 3.0 Host Service Conformance" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Host service conformance requirements for Open Badges 3.0 certification" +--- + ## Open Badges 3.0 Host Service Conformance {#host-conformance} An Open Badges **Host** is an application that can aggregate and publicly host OpenBadgeCredential for recipients. It also supports export of badges at user request. The candidate platform must be able to import all formats of Open Badges as well as prove that badge metadata is not lost upon export of the badge. The candidate platform must also meet [[[#service-provider-write]]] requirements and accept an AchievementCredential or a Profile from an Issuer application. And meet [[[#service-consumer-read]]] and [[[#service-provider-read]]] requirements for exchanging AchievementCredentials with other Host applications. diff --git a/ob_v3p0/microsites/v3p0/cert/introduction.md b/ob_v3p0/microsites/v3p0/cert/introduction.md index a3caf712..204a90cc 100644 --- a/ob_v3p0/microsites/v3p0/cert/introduction.md +++ b/ob_v3p0/microsites/v3p0/cert/introduction.md @@ -1,3 +1,12 @@ +--- +title: "Introduction" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Introduction for Open Badges 3.0 certification" +--- + ## Introduction ### Conformance Statements {#conformance} diff --git a/ob_v3p0/microsites/v3p0/cert/issuer.md b/ob_v3p0/microsites/v3p0/cert/issuer.md index 0dafab89..59a00183 100644 --- a/ob_v3p0/microsites/v3p0/cert/issuer.md +++ b/ob_v3p0/microsites/v3p0/cert/issuer.md @@ -1,3 +1,12 @@ +--- +title: "Open Badges 3.0 Issuer Service Conformance" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Issuer service conformance requirements for Open Badges 3.0 certification" +--- + ## Open Badges 3.0 Issuer Service Conformance {#issuer-conformance} A Open Badges **Issuer** is an application that allows for the creation of OpenBadgeCredentials and the subsequent delivery of OpenBadgeCredentials to recipients that conform to the Open Badges Specification. The candidate platform must issue a valid badge and demonstrate how the badge is retrieved by the recipient. The candidate platform may also meet Service Consumer (Write) requirements and can send an AchievementCredential or a Profile to a product that conforms to Service Provider (Write) requirements. diff --git a/ob_v3p0/microsites/v3p0/errata.md b/ob_v3p0/microsites/v3p0/errata.md index 24a4c4d1..838a0359 100644 --- a/ob_v3p0/microsites/v3p0/errata.md +++ b/ob_v3p0/microsites/v3p0/errata.md @@ -125,4 +125,4 @@ releases: comments: Fixed typography errors in the errata document. --- -@v3p0/errata/errata.md +@standards/v3p0/errata/errata.md diff --git a/ob_v3p0/microsites/v3p0/errata/errata.md b/ob_v3p0/microsites/v3p0/errata/errata.md index bf465999..ad6feeea 100644 --- a/ob_v3p0/microsites/v3p0/errata/errata.md +++ b/ob_v3p0/microsites/v3p0/errata/errata.md @@ -1,3 +1,12 @@ +--- +title: "Errata for Open Badges 3.0 Specification" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Errata for the Open Badges 3.0 specification" +--- + ## Errata for Open Badges 3.0 Specification ### Context file diff --git a/ob_v3p0/microsites/v3p0/impl.md b/ob_v3p0/microsites/v3p0/impl.md index 8ae81033..369f7e63 100644 --- a/ob_v3p0/microsites/v3p0/impl.md +++ b/ob_v3p0/microsites/v3p0/impl.md @@ -158,21 +158,21 @@ releases: comments: Fixed some typos. --- -@v3p0/impl/introduction.md +@standards/v3p0/impl/introduction.md -@v3p0/impl/getting-started.md +@standards/v3p0/impl/getting-started.md -@v3p0/impl/recommended-practices.md +@standards/v3p0/impl/recommended-practices.md -@v3p0/impl/reference-impls.md +@standards/v3p0/impl/reference-impls.md -@v3p0/impl/conformance.md +@standards/v3p0/impl/conformance.md -@v3p0/impl/migrating.md +@standards/v3p0/impl/migrating.md -@v3p0/impl/extensions.md +@standards/v3p0/impl/extensions.md -@v3p0/impl/help.md +@standards/v3p0/impl/help.md ## Linked Data Proof Test Vector for Open Badges 3.0 diff --git a/ob_v3p0/microsites/v3p0/impl/conformance.md b/ob_v3p0/microsites/v3p0/impl/conformance.md index bb16818f..6a8e4c3a 100644 --- a/ob_v3p0/microsites/v3p0/impl/conformance.md +++ b/ob_v3p0/microsites/v3p0/impl/conformance.md @@ -1,3 +1,12 @@ +--- +title: "Conformance and Certification" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Conformance and certification for Open Badges 3.0 implementations" +--- + ## Conformance and Certification{.informative} The [[OB-CERT-30]] covers the specific requirements that implementers must cover diff --git a/ob_v3p0/microsites/v3p0/impl/extensions.md b/ob_v3p0/microsites/v3p0/impl/extensions.md index 918bd99b..d8c68ed7 100644 --- a/ob_v3p0/microsites/v3p0/impl/extensions.md +++ b/ob_v3p0/microsites/v3p0/impl/extensions.md @@ -1,3 +1,12 @@ +--- +title: "Open Badges Extensions" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Open Badges 3.0 extensions" +--- + ## Open Badges Extensions{#informative} [Open Badges 3.0](/ob/specifications/ob-v3p0#extending) and [Comprehensive Learner Record 2.0](http://www.imsglobal.org/spec/clr/v2p0#extending) allows extensibility in several ways: data model, extensible enumerated vocabularies and API. diff --git a/ob_v3p0/microsites/v3p0/impl/getting-started.md b/ob_v3p0/microsites/v3p0/impl/getting-started.md index ca5c4bff..3d8fd322 100644 --- a/ob_v3p0/microsites/v3p0/impl/getting-started.md +++ b/ob_v3p0/microsites/v3p0/impl/getting-started.md @@ -1,3 +1,12 @@ +--- +title: "Getting Started (for Developers)" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Getting started guide for Open Badges 3.0 developers" +--- + ## Getting Started (for Developers){.informative} It may seem like an overwhelming task to implement Open Badges 3.0 or CLR 2.0, diff --git a/ob_v3p0/microsites/v3p0/impl/help.md b/ob_v3p0/microsites/v3p0/impl/help.md index 4a9b774e..9e6955fc 100644 --- a/ob_v3p0/microsites/v3p0/impl/help.md +++ b/ob_v3p0/microsites/v3p0/impl/help.md @@ -1,3 +1,12 @@ +--- +title: "Getting Help" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Getting help with Open Badges 3.0 implementations" +--- + ## Getting Help{.informative} If you have questions or need help with implementing Open Badges 3.0 or diff --git a/ob_v3p0/microsites/v3p0/impl/introduction.md b/ob_v3p0/microsites/v3p0/impl/introduction.md index 732375d0..43ce68c8 100644 --- a/ob_v3p0/microsites/v3p0/impl/introduction.md +++ b/ob_v3p0/microsites/v3p0/impl/introduction.md @@ -1,3 +1,12 @@ +--- +title: "Introduction" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Introduction to the Open Badges 3.0 implementation guide" +--- + ## Introduction The 1EdTech digital credentials specifications, Open Badges and Comprehensive diff --git a/ob_v3p0/microsites/v3p0/impl/migrating.md b/ob_v3p0/microsites/v3p0/impl/migrating.md index 27e18641..3518e863 100644 --- a/ob_v3p0/microsites/v3p0/impl/migrating.md +++ b/ob_v3p0/microsites/v3p0/impl/migrating.md @@ -1,3 +1,12 @@ +--- +title: "Migrating from OB 2.0, OB 2.1, and CLR 1.0" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Migration guide for Open Badges 3.0" +--- + ## Migrating from OB 2.0, OB 2.1, and CLR 1.0{#informative} Open Badges 3.0 and Comprehensive Learner Record 2.0 are major releases, and diff --git a/ob_v3p0/microsites/v3p0/impl/recommended-practices.md b/ob_v3p0/microsites/v3p0/impl/recommended-practices.md index f79aa677..8b5725a6 100644 --- a/ob_v3p0/microsites/v3p0/impl/recommended-practices.md +++ b/ob_v3p0/microsites/v3p0/impl/recommended-practices.md @@ -1,3 +1,12 @@ +--- +title: "Recommended Practices" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Recommended practices for Open Badges 3.0 implementations" +--- + ## Recommended Practices{.informative} Conformance certification ensures consistency across an important but focused diff --git a/ob_v3p0/microsites/v3p0/impl/reference-impls.md b/ob_v3p0/microsites/v3p0/impl/reference-impls.md index 69f7d7f7..9948f13d 100644 --- a/ob_v3p0/microsites/v3p0/impl/reference-impls.md +++ b/ob_v3p0/microsites/v3p0/impl/reference-impls.md @@ -1,3 +1,12 @@ +--- +title: "Using Reference Implementations" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Reference implementations for Open Badges 3.0" +--- + ## Using Reference Implementations{.informative} The Reference Implementation is an 1EdTech implementation of Open Badges 3.0 and diff --git a/ob_v3p0/microsites/v3p0/spec/abstract.md b/ob_v3p0/microsites/v3p0/spec/abstract.md index ef5a5114..891b5361 100644 --- a/ob_v3p0/microsites/v3p0/spec/abstract.md +++ b/ob_v3p0/microsites/v3p0/spec/abstract.md @@ -1,3 +1,12 @@ -# Abstract +--- +title: "Abstract" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Abstract for the Open Badges 3.0 specification" +--- + +## Abstract This specification is a new version of the [1EdTech Open Badges Specification](https://www.imsglobal.org/activity/digital-badges) that aligns with the conventions of the [[VC-DATA-MODEL-2.0]] for the use cases of [=Defined Achievement Claim=] and a [=Skill Claim=]. The credentials that are produced are easily be bundled into [=Comprehensive Learner Records=] and [=Verifiable Presentations=]. Portability and learner data privacy are improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model. diff --git a/ob_v3p0/microsites/v3p0/spec/docformat.md b/ob_v3p0/microsites/v3p0/spec/docformat.md index 3908d9e8..bec927f6 100644 --- a/ob_v3p0/microsites/v3p0/spec/docformat.md +++ b/ob_v3p0/microsites/v3p0/spec/docformat.md @@ -1,4 +1,13 @@ -# Open Badges Document Formats {#docformat} +--- +title: "Open Badges Document Formats" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Document formats for Open Badges 3.0 credentials" +--- + +## Open Badges Document Formats {#docformat} [OpenBadgeCredentials](#org.1edtech.ob.v3p0.achievementcredential.class) can be exchanged as documents as defined in this section, or by using the [Open Badges API](#api). Documents can be exchanged as a text file, a web resource, or embedded in an image. The contents of an Open Badge document MUST meet the following criteria: diff --git a/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md b/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md index e2bb4a50..05060fd2 100644 --- a/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md +++ b/ob_v3p0/microsites/v3p0/spec/equality-and-comparison.md @@ -1,4 +1,13 @@ -# Credential equality and comparison algorithm{#credential-equality-and-comparison} +--- +title: "Credential equality and comparison algorithm" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Credential equality and comparison for Open Badges 3.0" +--- + +## Credential equality and comparison algorithm{#credential-equality-and-comparison} Credential equality and comparison is the process to determine whether a [=verifiable credential=] is semantically equivalent to another one. diff --git a/ob_v3p0/microsites/v3p0/spec/extending.md b/ob_v3p0/microsites/v3p0/spec/extending.md index 3b6fbb81..f4640957 100644 --- a/ob_v3p0/microsites/v3p0/spec/extending.md +++ b/ob_v3p0/microsites/v3p0/spec/extending.md @@ -1,3 +1,12 @@ +--- +title: "Extending and Profiling the Standard" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Extending and profiling the Open Badges 3.0 standard" +--- + ## Extending and Profiling the Standard {#extending} This standard can be extended in three ways: diff --git a/ob_v3p0/microsites/v3p0/spec/gettingstarted.md b/ob_v3p0/microsites/v3p0/spec/gettingstarted.md index 8edd5750..fc1a9949 100644 --- a/ob_v3p0/microsites/v3p0/spec/gettingstarted.md +++ b/ob_v3p0/microsites/v3p0/spec/gettingstarted.md @@ -1,4 +1,13 @@ -# Getting Started +--- +title: "Getting Started" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Getting started with the Open Badges 3.0 specification" +--- + +## Getting Started ## Implementation Guide diff --git a/ob_v3p0/microsites/v3p0/spec/integrity.md b/ob_v3p0/microsites/v3p0/spec/integrity.md index fa0c0a03..cd21cc00 100644 --- a/ob_v3p0/microsites/v3p0/spec/integrity.md +++ b/ob_v3p0/microsites/v3p0/spec/integrity.md @@ -1,4 +1,13 @@ -# Proofs (Signatures) {#data-integrity} +--- +title: "Proofs (Signatures)" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Data integrity proofs and signatures for Open Badges 3.0" +--- + +## Proofs (Signatures) {#data-integrity} This section describes mechanisms for ensuring the authenticity and integrity of OpenBadgeCredentials. At least one proof mechanism, and the details necessary to evaluate that proof, MUST be expressed for a [=credential=] to be a [=verifiable credential=]; that is, to be [=verifiable=]. In order to pass 1EdTech conformance tests, issuers MUST use a proof mechanism supported by the 1EdTech conformance test suite. See more about [Selecting proof methods and crypto algorithms](impl#selecting-proof-methods-and-crypto-algorithms) in the Implementation Guide. diff --git a/ob_v3p0/microsites/v3p0/spec/introduction.md b/ob_v3p0/microsites/v3p0/spec/introduction.md index 315ab774..a45b7f95 100644 --- a/ob_v3p0/microsites/v3p0/spec/introduction.md +++ b/ob_v3p0/microsites/v3p0/spec/introduction.md @@ -1,4 +1,13 @@ -# Introduction +--- +title: "Introduction" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Introduction for the Open Badges 3.0 specification" +--- + +## Introduction ## Audiences diff --git a/ob_v3p0/microsites/v3p0/spec/overview.md b/ob_v3p0/microsites/v3p0/spec/overview.md index 273066ac..ea8ef830 100644 --- a/ob_v3p0/microsites/v3p0/spec/overview.md +++ b/ob_v3p0/microsites/v3p0/spec/overview.md @@ -1,4 +1,13 @@ -# Overview{.informative} +--- +title: "Overview" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Overview of the Open Badges 3.0 specification" +--- + +## Overview{.informative} ## What is the problem this solves for? diff --git a/ob_v3p0/microsites/v3p0/spec/serialization.md b/ob_v3p0/microsites/v3p0/spec/serialization.md index 95fae19c..8ba3b3fc 100644 --- a/ob_v3p0/microsites/v3p0/spec/serialization.md +++ b/ob_v3p0/microsites/v3p0/spec/serialization.md @@ -1,4 +1,13 @@ -# Serialization +--- +title: "Serialization" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Serialization formats for Open Badges 3.0" +--- + +## Serialization The data model as described in Appendix [[[#data-models]]] is the canonical structural representation of an Open Badges [=verifiable credential=] ([AchievementCredential](#org.1edtech.ob.v3p0.achievementcredential.class)). All serializations are representations of that data model in a specific format. This section specifies how the data model is realized in JSON-LD and plain JSON. diff --git a/ob_v3p0/microsites/v3p0/spec/usecases.md b/ob_v3p0/microsites/v3p0/spec/usecases.md index 11e711fd..1943378f 100644 --- a/ob_v3p0/microsites/v3p0/spec/usecases.md +++ b/ob_v3p0/microsites/v3p0/spec/usecases.md @@ -1,4 +1,13 @@ -# Use Cases{.informative} +--- +title: "Use Cases" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Use cases for the Open Badges 3.0 specification" +--- + +## Use Cases{.informative} The use cases below drive the design of Open Badges 3.0 specification. diff --git a/ob_v3p0/microsites/v3p0/spec/verification.md b/ob_v3p0/microsites/v3p0/spec/verification.md index a6ec90b7..95451938 100644 --- a/ob_v3p0/microsites/v3p0/spec/verification.md +++ b/ob_v3p0/microsites/v3p0/spec/verification.md @@ -1,4 +1,13 @@ -# Verification and Validation +--- +title: "Verification and Validation" +docType: "segment" +status: "Final" +author: "1Edtech Consortium" +lastUpdated: 2023-08-10 +description: "Verification and validation for Open Badges 3.0 credentials" +--- + +## Verification and Validation [=Verification=] is the process to determine whether a [=verifiable credential=] or [=verifiable presentation=] is an authentic and timely statement of the issuer or presenter respectively. This includes checking that: the credential (or presentation) conforms to the specification; the proof method is satisfied; and, if present, the status check succeeds. Verification of a credential does not imply evaluation of the truth of claims encoded in the credential. From b53d78ee51ef1d427b129d6cc882dbf3102bf90b Mon Sep 17 00:00:00 2001 From: tcouper Date: Tue, 26 May 2026 11:30:38 +0100 Subject: [PATCH 21/24] fix: trigger autowarm to speed up first render --- .github/workflows/deploy-cloud-run.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index e6b754fd..2b26ef6e 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -87,6 +87,16 @@ jobs: -t ${{ steps.vars.outputs.IMAGE_URI }} \ --push . + - name: Set health probe path + run: | + BASE="${ASTRO_BASE_PATH:-/}" + BASE="${BASE%/}" + if [ -z "$BASE" ] || [ "$BASE" = "/" ]; then + echo "HEALTHZ_PATH=/healthz" >> "$GITHUB_ENV" + else + echo "HEALTHZ_PATH=${BASE}/healthz" >> "$GITHUB_ENV" + fi + - name: Deploy to Cloud Run id: deploy uses: google-github-actions/deploy-cloudrun@v2 @@ -98,7 +108,7 @@ jobs: --allow-unauthenticated --ingress=internal-and-cloud-load-balancing --port=4321 - --startup-probe=httpGet.port=4321,initialDelaySeconds=10,timeoutSeconds=10,periodSeconds=120,failureThreshold=10 + --startup-probe=httpGet.path=${{ env.HEALTHZ_PATH }},httpGet.port=4321,initialDelaySeconds=10,timeoutSeconds=10,periodSeconds=120,failureThreshold=10 --memory=2Gi --timeout=60 --min-instances=1 From 2c5413ee0ff37f190fba5120749d0a1202dfc64d Mon Sep 17 00:00:00 2001 From: Rob C <112499312+robcoyle913@users.noreply.github.com> Date: Thu, 9 Apr 2026 13:03:47 -0400 Subject: [PATCH 22/24] Delete docs directory --- .../images/figure01-openbadges-2.0-diagram.png | Bin 40039 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png diff --git a/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png b/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png deleted file mode 100644 index 8d0dd9f9474e305ce858950ebff45e1e041d71f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40039 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

mt-Qem3?Pxy_6PZq7{j_om@U@RUkGq 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 Y1kqlG5Ec=DLv%n(Ltnki_@% From 0335c7ea04afde0806a28d80ed23b62d4b8b2c22 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Fri, 1 May 2026 12:53:31 +0200 Subject: [PATCH 23/24] Fixed image path --- .../images/figure01-openbadges-2.0-diagram.png | Bin 0 -> 40039 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png diff --git a/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png b/ob_v3p0/microsites/v3p0/images/figure01-openbadges-2.0-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0dd9f9474e305ce858950ebff45e1e041d71f3 GIT binary patch literal 40039 zcmeFZcR1YN^Ek?8^(aA~q{IdkUBnVIv7(9yb0PI`qD4-b!A zT}?$74-c}4`w|m^5GFdbKC8#_m9JUq3Cq!c2Zgi*TS_45J= zBPD3wvq|U@G@jZQFW=xEi8?H|EtTrN%B{yP1S26YXuBaoFL*xGK`QCmLJ;?K+L~Zd zA(cXOj)kj~vY&o8`KC)m z3m!o*kqut!PmRy-qv3M51zTC^-H~WiMWP+ zh08#o6A#aWwqm91E0y*Z;+Y+F9{gGOH7TFh3fitSv~QE%`Ez_~pc2Q!)1H5NwG%JC zgi3}pAw9Z{Jsjr9HA8ZXcmcNBe)*|4F{jVRhMk?c1lf>sk{MybU?t_$w1bq?&Y-Al zp18iBSG#@c%6LEek>$^b^)8=pKRK((E9kUwWnhmIh(8Ete;u1KH8C`Ybfx1GBF%cl z?%Wj=Ng#Uug>hb^amFUKW0N9rUDKFWtW{mf93!hmC}a8jP&a#nFxqudlF5uFP`P+*$a}p>MRIX=`#YKWNF| zOY(XTmC8Z4-@@17KKcq9D-Ek(=*@#k`6~IBu0bx(3uIFy1yz3cX>TWt=coPLYGnK} zmodS_q0maJ1^;sKg7fr+ka)@q&+wS0iQgmThzVe!&3smsjAe5(Sn5ZWu+Wc6X3W_i z>0AUCt~LLXP+PrC**_Dw=T!lEZKT zu18^Ttuq6Y%iSyzOiYVUUU&hKLwPrtKsWosQ+!sn&-gF~m0-hi+NVgoybC0TB$Xct z<0(l$dX|$VhMwkJVTRsrx!!+K3+XmZ{ejRagmnXN2dTILi4O6yU=D#Xs~`*GrSmQ@ zD$U1}w>|p-W8)zv4YkaL@-R{>it;dx5nooir6YBp1gof^#GUKbf4PvXj%Zi8wclZp zCOV{3gnT$8X8KTs#^xjPDYOBq_1vK4;ZxRz%R*tO>DH$-{uE7w`z-+*WZoAEbgt5} z?-j)9(nCx`CqgEo5N()8_2n17UuUK$h`rHKI}_rL?+jK22Y;tU}Z<0r-eB+dQsidx?OHq{Qp6H%7qjy6`UF!WQ`6s~w6Nx-b+qq0fOR-``NI;iN2EvZvaD^PsA062D(@`B>b`;A zh`GT#z{5iAU%-Kb?xV_##Hj@LPOU z#NYX`BQ2u3vvBmu7sH-ZM25AA^GW|R%NeK2PkCLxFucQwcCYR0Mt0sYI@&m26G4g8 zKcYyNNhRyqf9=)N`qk|<_iKZjWg{VuA1l997uGD+A0g zy|q1aW@eVF6yy}Gv4pWCv3|^cX<|0SZe-h)H0_;(c8!C)1#!I;y^Osb8Rt(co~nCD z{SvKi@x~AOh$OgB>RZY@qA?;b@!U9MeBUYHcinI1eZGBe)+1KgxGQnC0($zSDM+s_vKgl)^vW{621XN7ghx)$5zY_)9H?2abirp~6_rniB6fet5QC)dxAXEG;# zqehNG^|5kSrWwk`r*q-PYO7PO}z{J1)u`7ur@ zT3P?u33DVlIY|j|z!e*oWR~GeTIA+*fjlRs&urT;FNj`Vds+EqkLPpYL1A6t{=nqG zt$~2++g8KvCQ;ZIm)kLIKWE;|*w3`n9ScmNy+tPFOV*Ly zlHIY~7SwNOD7gIRp>D;JRuQXhauIJ$gnv8zCd(o!OO^QQHAlah%~gBtG8Z{l{k8SG ztaKm9G@zVH!jEb<9z+Ipoh9xUeJny3(bx^x#Vj4{Jljd&xO}g8@ssP?94gr>qUZDB zOw;9Fe$NtyB&ddcUc7rmHCO2Kiy9-=*D9SKpQbsbT~1@uS1plk((p-og5Aa1pd`uy zljqWRTd(X~`Tcs&ablHx^wi;@1OJHP3iSxOY{WdfCQzh9cww4w=J^nL^Dm=0y1Awa zhQ^AU+Wf-Y&eKfI&db}Ex3~@)(@n(J&go7|HpY82jU`0VT@IPQ_(R{Hqd zX~t>vchk3=Z^@#em21}7-2`)Tm$NR%_=)X1PHqPZJ3H^o#|4ldqxa~4pYJqo9M>lW zCTTuUeZYnNzWjB$fanc{`$@}5ZmH_qcjfbUN(wRS7T-UTdBl2ngo{xkP~j`qyRG4~ zlvA=Z0eSf!-{e-loHX>NWlmxVIJ5c`=M_u9>Y&goJGqhYQ`=8VN1IkmQ4^J}noiIY zAXp)2%6&l#Q&U%+buhZMFs4^mz^8@En)H0`eQo_~+vxi$E5r=urCa9$;aCbzER+6%uvybDza@Vn)aVeoXuAr4h?#6Z}m=09!xd?t4MkO+waD@Y@eVL#a`vF zts%EH;xt$t|&Mbrqw+Xl3-U>1}3+TI(kfLzgt(fjM1Ki%Nmw(2NY)b49H2y71!I<-8?-*uQC38z`2p|Om8cH<^#PCNlO7yibT zG#Z`?JRN5U+(cH+T$@DfG}|JwC1_@e(O-iZuh8iNjDsi`rjo)wM*J|674I30|I>vQ z3}$Or_~o_HvAZ1{H#y&`ceb@LJq~P3gKXq`Sz0#uSkBxb*If<38=KVZ+f8`m&VUy; zxTmkBC>LHZf8N}=^YuK1^}OigV*=0V>?3U+O2!I~*Vj~lxf^M1sBWXFiN^63pFV&6UU>B!j|h}dgRgfE z-yM6T31E&@9y9~IgTgp?oXwKg}uDI zguHGDIlI~lUzd`S5*85^78Ml)EdZ2fskba36ek@Q3HGU)-~*YS76G zPCPs~p1O+SeQ*5LOsR6tTbSp&{u@Z!3o&E|BH|(gYZWRN>7vLb5%|3hp`UFk#_-x- zFX8#O*tn#F|L~i$&nyEqJw1vwbeD^J)dLt^%JNLK0}DjA%XIaZf}BcPBk}Nw;dl_L zU_2-cJU)YMC=l;Z1-20Xcj-ka)gm+TzuMrM6RY4MS-&u*LjJoqRJ!9YD1QTlT!QBi zxe~tnFZgggWbgI=Mu~(2*vJed?|(yw=eS+`?@ll(e5fzX)`Ij8jepkwk}mvrr+-NL zhfDvKCAc{>@Ng~#Th@G5SGPauXRtrvWp1ANR^pGuJbeTj(mzj*WT%R2p;S02Kl)w2 zt{-%=*|9wC+&n?tLB#59vHOKH?)~qk=htg!EZaUfO#>Od}eUNfu4cHmLCTPpo)+|Ze9WJBF^rh*}PqzC$(iex* zq&D8u1uJMV6%W#AweamGacZ#2K)Q32)C>NO81wbIl~P3&`R%VaX7k*$xmXuMj&J~a ztsOMh6?5*WHSdi%v`XMxF-Q*_9?Zsd3>Yf}?Ty;Dx)^qE9IcdXVl-DQQ^9@*})diu%%IdDtT{^V}(zN{TvNnNf%*cZwFs&OD$<$6=C?+nJt0!Cs0&iH%G1r9((gi%e z={U5`bsLN{YUZSvxLfKHl4#eg%ku>kXJ`9wb(UjWPZJx* z$L>s&FvaP~QbD%9Rqk?~h95Q-6ZWLO_j}Fq+a_Ly1p}FSCo5f+Is-+-0aMDWB>y5S zYkH*o0u7dnZrooV)9r`Typ1&Qoc-UAj=YAU{#e%$1b-7B-;?aXqb1eEhbHPO0q3Xt z>5ZSLgQydzQ|rczA|-1|5I6a_@pHd_&rthryura;(CLiiVTXwUJ<Go1e^hm&A8_HyZz*l*gz z8Jzf0jTPP*mXGiaA~nb+Uo%wc@DtR0))#CZ!+aN9du^|b;W;g-nS3o8kT73&)$!Dp zP9q_Jx_=fnz?W`sck|`ahu1j<6OjgfTz9rhB5XG+*DyUw=G;PPSo#B-Muc^OEVlic z-YnB-Rms$BagUuw&UgnG%0+aUx_IJ|Wmz>C6I4P&gY@M{9b4znwM|bmUX&VxZS~M6la z-sQ+oAG&k((!>u#(w|azby9i~oTX)-oSv;1ip8!l6dZ5+lC`mD)AM#~h)9>2-+8&z zP){tofL*z7+H0#=$Ry*Tj0$mP-R()T{0aM5dYd9kBd4q^gHmF`C}+iHyq0ZiGvTRY zm6IfvB;2VQn|)HOvp4FqU>0y=709nbMoV<|l^YKN>CX?_o}QMpwg>5XydnffQjP;; zT(~p=*h`POr%Nd2&VCii`|yWggcCm+^LS3oyxHQ@8!y!zHg57_vd)+qFD*i__M%3L z>N3jo3)V{4GRx-n>5>tCvzes^MC0Ne-&R*!O^<(j+Lsk~2e_Z2{bwboZsd$8W4gUp zw0yEZeIQ>SnQFJr$nL{!1-{o>Sa-4-?@aY(1wVU9kk&S85+9!uEI^RoWq5zs$#F>j zaej)#_1=lAMpdndp>G1QHEX-9DQU&sJ`SI}iZgE6^Clt;7#EIqi@mWAx7S<4(o1?B4@N^eae6xi0qhdB^~S!4Petn+Be$shNR3^Y!gS9F20 z5GWr9o#U4+vEvYR7tl=o(fKjIG+=SLoST?(2tOeVBy@cq`tSQ|$Ic zXe3A`>M%|9FK(^ymoVin)d}cyyqR2@H5j=WJ7PP^&(8lywrNRM93{-fIhP`05E!M6 z)yonv{K99Z7?7xzT#g;I?P|~%8PwUKWpoor`|i10dvR7&D}hSim~J69rDV&i)68ys ztKQ^rIpMu%>0Z-nHX{~VcThZacJtv#J`Iga8H-;*15#7|6?9y)krh-xY6hIpqpE+40+rG3%5E_L5A5)G{{6&U%{ zw3gbqJob46Egr{W+f-Z=hOJn8^G8hX5ySf5dP8JjRH-e7IYi<&8|?!VssxM}`@y9yA0()s9CTjyK|L z@oy^PPGN9&&|;DGlRPmLW^w7EQwp(#z7b7>wlT{Fc}DZu(Mmtt#M7eF?@%0EDoJzD zdV5z+F1)1|dZI!jR}uD<8B%9i8ZZz3$c_5WL}D5a9xqCk=#T-v0Nryn7~Z#d(-F6$ z{Cx^rOa|75@yNI9e<1!j1|p+@DrIbZ-t)&;{;S;tH9W^_#Yh^b%W#AO0P!!uig`Oy z&iL=sBRt0#5aeWfr{iDHK|4{<({|^IxbolK06h0Qc*w~Thb4x8QxObT1wEt9T5bLf z9uMgR_*U;B$P)S=YQL!AA+rV?zF+(g8U2Fba9C5CZ}nf)GJ>8re96<<{~jbDqmC;W zzCMh0zxW?&VVt0+YT2V3|3yX(82UtAa_pbk_zUkpO#A;D(_r|>p!4G?lJ{+G(NI?3 z#oUjpcT$9`#n}D`#8)7YeH`ZnhQJ_M_)XIJ>|hC+d&zWu^JJ~{c(nX z)k3*M7aanZhm4e(DyJ^E8Pn6 zvq163$nUeqPOg{LajOQ^ypAArvoSmFPwnZCQ>L)yF;t7aL5F{ z%VX+>tXFv45e0dg##F&Ayg)r^E2fFV`gxJMIaNd-^tibf^?fd9I=fIyUZi2iLp}s+ z?V-wJFapdaI0J%H`Gl7wv4fpEvf!#V4#F+qxG|@FxE$8PNW~L&$v~*D<)>o(7YQjv zme7Zw{v)7)=U3Dp z0Rv40AA0n0k%t%`&?iO6K?Tpby#Wyi+N1;US>c-Ia!5-WK%AY{8tO@pWF5MmN&q0< z1#m>9NtN&*#O|?3Vu1NlLohiY;yPI4aq0)4O2kR^Rf3h%*=gIcZX|PrNQI{xht9X6qjz{NG`1vG)B0 zE~3`uK814=xs8?!sQUFLnJgr|#U;ooBuAGE=xiRaZr>c(F$1&e@ukJ=fW6V>5%VAx z=*o>g*#xGe=w0EagPCQ}<F}{7|>q0^F~8v2_yf$e*YQgA@HZQ2*yC1nb~Yj^r`b z;vctPQ9;&~Qa+R)&c(6}e179q1)G)UTiwDaK#BkEuLSMMVYbX@9?gK?x!Lvcw{zB& zB4mL!z6R9E-N{e-#8A$7#T*JR^n`ZK+Hvmslh9B<6M+*6GJHa_?t1-`?FjllWXiruD^Kd{(sXL7zcu4EQ;x*KE2W|ioD4yf0k3OruBrY>Qku^6{s z=D;6O+KXbDNG*E0-nd_ibHOF;g~U038zRr3#?Fz1Y}Nl3ZN?OPlSR!~*N=J6B^l_O z2kc_){cjXv>I$=JrULzT2elQ*4_W;;K5DW(Mllp3#*0-(i>15QM2d}1bu%@B7BamE zjZM;K+RCd(?Cvyh^rz%#rQP^Z2sPk~3TIQSeOuF`yl^xd4>5b0>rsFNOp?1R`Gn?qr!ASF&#|qo|LB~eH{>x7| zi@`xq#knNx7s955V4doGyH87`d_WC5Iqs4nHCe2zR{<_m*jZRf)y0W@m15^R+ zkJ4t^#haJR99peYyl>?QD`tuVOCbtu&CP0cL*&R_5*50|x-Efw(sZeGd9(a0t`B%4 zM~tP4LxzRWi~39}Ydl`nv;Mx=B$qiR^BAFR9@8KSOg`x{x=%Qot3&BHOVbrqEtCtKGf*T~Ju7O+PBQ=6>{fzRG<7t76I z&7Q82du;@|24(qT&zuQT?#ZF$zxSf!n|n%K8uk+$)@zSU$&Qm<&d@q+d)Sd>S?i40 zj}9ZHe>6qqd3F@q%)Itp_EsR<&zLvFuyo4U1 z%9^BQmmc@BP!Cdnn$1ZU;hH{OD9BoT-m`gQ$m7DhZS{*QHo9S3@3f=V{D7dx(uBB- z*S);|(HawB5%r6Uz;_L5`y*S=Ux?s{ckC@WhzAhV327ZP4tj^d$$;fT)(Eri=C*@g zC%MrZ52r;6eLUH3J`eC-?mVb?k#D@ibBko%H1J_{gKpDgYZD)vx#4ipKJ^myX5iH~ zS#>j8dIl98yBWGU-R*2aCobD}cWY6<$F(Th10=Dw(4!)?!CqPbUyJ7V-5L)kzlT)$hhuKA`IMQ4u~+REgMm0K*}(3G))Nbhm}a#@D(YCMOUG#UuoE1Wiq>_lq z3b;X7SF`4HxBjSUWDwa-z%5rz+2iX`)~CPoW*!^(TtGQfPt+hre3nOCg??R+DtM>u z$DzX-`o4pirUTYOm!dM|8Lf%cymw@8a6DOR)+ntte*-F%0k3W3`!rGyQ2RCR&dR%e zG`=}J80Or`aC7TY(vsY^X@rp|Ly@IS z0$koB2BAa)vJ0#cYZ6obZdBdWKX6+Qtbxlvz^ZU1-VobUFn8vbWFR%gu-qW6*e}1+ z!4~x6UMuQZS=)y|yXuSRx&@U=m6~Uj<7Vb-tXYMXnzAeH2B%vK*T*J@RYwc-nr`Q0 zzY<4iUh+OWTnPWQGE$~(%}EZa0;YD=3riaw`m5JMQst$IP;W?ftVC1bo*&kmj`fem z>8=KH{l4t}pn-N1ElNFdq^Dz+BqjD;OK!|1<>^<9m)$z8PuF2QDy0CX#WYTQ@af?* zGP-fctMWuZ(kT=s9_7Zp6VM4pxydQOjUf+CuNYpc%}l+$`MQu~oCX{%B%56d|VgoZ9dkCdj3 z(|1GKEQd5+Z3#jf7>X$9^5|YABG{)7bv#74G4Xkh{P=wlU&BkT^2WineJ^?|T3**! zZqfR>XPNiA9Of}I^lW0opJyT&qOY67b2EZ-wW&7y}`=<>8OUY9dv zQCds8St=2EKCWC)nQx8FsM9f^S|md{BZhIK0T4H=5iqw#Fr&b@1^b$78P_U>NB7ys`s z_2`#LApz_gB|W}il=fWehjb9L==(%ux@78I7^)5bLg`c*V}K?p7)Oi#tHj$m+;W5s zunGn)4-0M^zw5eQhVjxa_Me=*j=h8dmhDVo1?JmG6k6~x0dF2^1g7< zOsVU+7i2_7-8i-%-PSTK;HESC^k+4Xau^y& z9T|RKcyXvy1r7~~H=xClOWg+ux79zw{f}_}Bi#RJ?te7*|F<=_RRzv0X-7MZ=)b19 zEJ^XV`M}Zt-+Lw0mtV1qEvf~aB%6ztk9Jqm_ZyHcMZ}4a(`76wR88T*c=ZM3D-f&6 z`*=(Tybg4}WXa%|Mx6c5nNuf{v(#+z`EyEcn1$l6carL2BxWhF>Dib3i+B3hQJPR+ z-5`$s1nE-cszz9?1ND+YsmV{icgPK2cBmN9Bsf%h%(lm9p1ycPPC6-|(z4CoF{4DW zSojchwEfdjud0zJrk=Y(E4ZbCF3dV^*KB&nC(F)jT+z67a?#Cz$leoQYSu$+=oz1S~z@4^|?3kFHR5z zTeuhA92WDF)Zj660 zfL@R=9^$LuaIC#popX(|KUCVLR{(m%%>Io%J{*L_;>yZtA$p**p1ayOC2kQqhtV!bd87g8W;5cu)#FB~xfK_nJdn69!1D!7Os3^kNfrYD7KyZ^0=L&bT zVeelceo29p1=T+OVfj?4fX3`M%471N;JBYO5qQjT`Ityt98EQtHXKd`9$>MHEf)b` zZrmhNRI%%@2gA$Y?4%G9z&RRe!9w5`%ZW|9L57sS{lcC27pU%=OlK3jFb3GaeG}NGath!ze*DtN9~d=sUpfg2i|YC^(X@hRgxCJuXW$2gDN_FTp;u zQ#}J5e8DL#asdF2074Mk>PUPabmG?mbE*W!^-PP*UKAo%Xf^*;DW~re2MfdpRBs=U z-eDKHg@=^C6s5r3M4!b~n;Vzy$?v*wR4)VyTv>zJNGSR)>KhDUuf;=atS|0|iZ#C2*fhf90+| z0g~VhRdXSR0)|n}yrB3Bz<6*#`!yCsNusu=sc|uH3?i*_i@qHbrN??Xo`@j5pX1O#arW& z)>lCWLX+_IEoIm>u%_-dKdvVIS6+cTP#}{@GD}|>K@c&!Vmt1K2lVJAviHG0@I;pZ zkA49bWO_CGuAxW7N6$eHE_NY1sObn)8hA~3j4XphT0=y4J+C{`Ioa_TQhy6eMXU~w zs)I~D4|AtfRkW~$TM0E_<_tZ`{Y4?L5AsG!LFAzx3o?rvj;2E?#nH0I zt5v8!PP;>#lOI6sbkCFcPk?0W3upQjZS3AV#Yx}^{#X73E?b{lp6cpz5A+GhYc`WR zm=0B5p`I0PKH1thOENHfsQ#XRXp4g6_SrrlpAur~DVb4>sOjJbd1C!XG4~w~vqry3 z5U(mvCt58fBGy`i8>E18pxj9)lb-ThZ$tqqoh#|)9+bn_Y=PGj6xI0d4BYN`Se%V$ zy+A1|LVRZQ&OGqYdUvI)nL-`y51!|2P@25`4jxG^rCup#s0=NQ9daaQ-EmfDxX%yl z(mA_KMZ;Ui3QyFW6BY^tq{KLE4+p|7S+0tLgkcH3& z@t6@zRQY})!t~kcP^|#6ihhxLj=GYR4P=PVFPD~5ou94;vCVKbWrMtJ?D2YY^AQLg zg`--iTS+62*J`HpwG~cx<~6E`=0KwLjl8AjIuW`Pw98`J6!zv4&zA}B5s)A<1=KcT zxA_{YM|>`GGgTJ`0$*U4_=_i4-c12xEZb=5G(wE8Kw&MypgdLId|@nbwW8zsp8Eq6 zZb{PlynUgvz&j>S21Za$@ej($TZzsTLGlAjHtDRhH*Hx$cdc{ONr~=Sda-HU!d92@ zBxU8DQB%ZyQ@tshC8)`E;zEJx*fmP1=%tOZUsgY6o$UQ(;*O+lHpyX3Mn06hN?389 z6fM~^lU95*a)OqA(S2)rm7tDrXzFaQ=A%RYlf?c2keg40J zOm`w8Wq0{;i@~a?*^>O`B?nXMkpo>*92#M zD3R}>{uwLZhhNW=xi4!=vFd_Jf64HQU?#(woT4hk; z9i^68#aXbtHtq*Tl}N!q8e7OwK4ICB7?_i2?=nvwF&vDj*E;dISH@g}Zn)yrCDALx zI(w!08&lVUiwr|ovpmTUjvq$mhfQd+i{Z^vz(qa`qOA>wCm@1G`D|xdcHC@a#{Ek@ zt0XRtrYuLthV;uscKa6+>J?`@2uBF2i_f zq^vEhPpl`6j5McIZd;^coLKIgQh(^5V76neJou zGJ5%;TDMv{7QJ)%JJQWX%n+UIk)zl@=>IS=KHWgDeq;QwV|;^3>bry)qBo%?yuI9 zuB=8uWQ~{3@-ta#UzDDJQj{8P~l*iqxb2?irmtJJ4}*@PNC>x@pr==J)NA5~GZ+q+Q>W*zIJWcFbW_ zSzS!`7-sCdS4I~V2-PAHv$@QAtX}yHdmpw?9cm>RwK3yk+-38$HRv_0XPuncF*qij z$0-ERIpV*^Xa8wTNOo^-V0s`8UGs{^X;}lk!boZO*_o*t-Czc{p7L!zdFl##RN7am zD4w$0DW7@T?V0bFGd^4?zuU>pgvJP#PGH7fk(XAd5dAITq9kC-e#V7by|k($>FvBn>QYp5g{kwsSb zI;zjQ60{igW8DJwz7LR;hd%Q=j7gqxK!DYdXjLG4N#At5Yu*0s_<#fBJ80c1H%Qci zuu@*Bx8~`{oax@Y7pooT6UUv8V2X!V{^^Uyb zvR?MPZg`NKcKCwBim>mp9be$;D^~4y^)0*0IWmezJ+CAG z=p*7-oy^xabkae-|84IMl;HD{I#kTTk*I5g`Zr!KKi+ucz3eXFdFL$`~)o|RL; zD;Zg9^|hGn`RRuIlKL@2ew6r~@tXxPvpa2Eaxs>&nDFS6P`EA_wy3%G<3U@wiLbLx zf-T`4@9d+GmmYV$m4dq%DcqFr_OS?1l99dKxgD0J`>yuWHeAZ7d+&kPY9GQIx{7j;~gKgg+ME5aEhrP<5D0NV;*5c6!Rcv zCB-~&^j_=RM2`^TcHVnF9@Gkf6m{*XtS?Q5Q8WamJWLA@GRF83_a|l#6y9q@`WEFe=Pa0LM|WCmkn31~VzXK{ z$s3_SmLQJ|HQl<2-ZUw^H>o0&m>PWtJ#b z_E<{yB-z@mSt>TL^TlF4N3Um5YV_9Gm-*6a$aKjztj7TdfI{{+PGUI7;4C7LLLR1q zY(Zu?+|tnzR9KAV3xd2J3(-T{gSV&ovtKo}U@heugi*%J5@=eg;f-2sbrQ_9CZ-N(kg z>C}z4|Gs-_7#zHpxQs%WDq7t$Yrz*IL57h$5v~s@O?AWiKeB~7vLadgdFxZF167xo z=X=so;jF$-JeI!Yn?}YH{o57?0|Dm?2sid_BD~piZ4B01X4Yubt;GCaDaU^~G!lR- z=5I&G;$vfE!Wtz$OtsL z%(hc`9d6Byf5Tmjz~8FPa#{JBW$Cpra8=^>t0a&H+Y&)?KsqkeBbw}$tHMewplp#{AwY%} zio10znmlMv2vo~OGo$ejeJU+i?IHU$t!i@uv4`IoYi(IE)Zkdn+?xjUn(8De>1!7KkiPl_Pdwa)j#`mwz34 z6AL%*zb-}&GKlXAE=SMFJ$l6gA)`*c(k&X5utt!X@WBr1E4rYm3B3#H%!sJ9)wHk| z;Oy@^>d)CGA#tqtZa36g{0hSbjwCG&ZoH%01qoK`M&ySe@f2Lj5M0i1Bzj754Q@dR z86UQR9qkOjW>t%Z zLbu8QhT9s77Iu)?DBBE2;kB1P)%?y1G`9ANrWm`bD~h;InvM(#pv1D}RNn!MXP_mFtJ7+er4=gYn-kP5hb z^COU*2*qKQyVhz;{EK56hjd}fSjFMe;-$vQx0*&nWhS+vFLqd>;>p3AO4NYw)k$dZ zjTX4>;!4y1`Gyw8?N}rPU?(<{>?aglrd|YTzAy!R688X3-1`GuX)F-EYt1~v;g=ST zGMqqobeuEt4g6DVAo0O7LU#8Gc`PJfN8WYS(l~F=jkCp2KBj}QyWpq)?~-z+>0V9? z7i8(jAP`WM5#%I<(5nSEg7iWD>!k<-C~?N?mbvbfL-EZo{SVXQE+#H}agz>8we&s}wt zv+(|YJIq?9%#gq>?DKSm%WAjOFHz(|is0`-#+k|RD=2}o5Fz(Hk$5;#hxS!fGU>H0 z-RMht@YYtr#Hd^o-M%SjdcWSRGhZ8D8v`!`F9r1Qe$QPmY^kaC+Hzq1ySjzf{2s;E z)Plh4AW#P80UoIN?S(#xZ0E+^;gU7~U^oQ?)fShgY2+yE^ed;wDqjURqimp%wJ2o@==H@lnmQqGv3KfJ46orMpML`F^}N)x zVsBhlN?ZtoigGkO{?V}K)_D~&!3L#TxD}i5S!RwB+Gg>-{`B+S7-ix0SBdgr!3x=h zvXE2S$fD@x@ADtLrEhCwX|-ghj|3tmBj5|Lr@kAyqHOrW0#ZfU?U!BLuSjUjaZUH} zIw%y~{&Hl+K|g-!Ria!{F#V!Kvs#8pjvJNa&1hbFt`>DUjq+m2)OJQocCD5UcF3t% zmWg9_dyMWO$pP8to7!3I{o5UMbhfy-?>f)3dl~F>Gth<)Cdco`i^Lvz^GS8hT>~Ly zl}n4YoMe7gK#ct=uMpbdoi9x-qShv@?CsizI=zZ0Q$!jK69lCjK4 zR@)b0lK4>Ri?h&j9b6Q5nFQ*~dntnLEeL^hyyWbky;wm7kcB_Wz@yUuWNFJG;lf-T zn^w5%s*+!IBWkD7^Cx!au!F6ds4ztwXOdxjuhY8>w z+&@hCf1L@pW50llJ2gk(eIO`YIH(TXK*8AKE^HLz-sv;yIgY4#uy^QSer&Y6TNV_+ zzy6&~V~fjR9Ek3#|7nH2SIRjD4H3`Q!TW9=PPldp5?SeR9D(RyVQJ&u*fNrcRWkKF z^`gSjKwL3SxnjwL8+0bXHJ$V~TbtnZF_Zp*DQz!EhSa2uE@N^?w;XSL*ua`Yd zypxH)?v(C;;Zc0!EDcJU0c1%5qQgssh#*l)S=a~4A;6dcV6R#_0Hw6!@HKTO^LDKG1{{-sn> z{!6Lov-e|%3bK5QanV=49-Vb#jAhl@)X{JaU(eOJmv?hg$`d~)k5#8kM}K^@Dh;&X z%>OtysyXSz!{jN{x%IEwjzRd+;B?ubxfplp=vulB7A-cv9(3;K7Fr-~A5gdFpjq3D z)VtAdq_rL6?Em&*`x`FNy3N71n$@QBv*Vtykl|JbMC~d{E9geyuz$C<>HR0Q5y@=_ zd24m4I#OH{?tJE7ZLt;3<-)0QPRB=%|3L{?TtSx3YdGR!N?1Vg@r_USjuAc` zqhmIOlPoJUo7b%uaPMmiPK5nlUjz&kFVV$aUroK zaY}lr_CPnY-sx+#^Mzk=Td3c_lUQ5SCj`C1xvS8P5>NYLkZ$HPmvk-4_7OdS;b3U zSsz3dk3I_ry37$N94Kz%jwJ)Kg`XFbjGmem+1kmh40*1VrFc2+jbnW6zS^WW9?l5| z`Ls`h1v=`8a#m~9oqFs$2QH$aS9=@;bJ9<{Y&*LSe9_w3<7eM77=_~79(+LomG*ao z4t|C+nS;P*<>1^@MH5eRMX9jb74y~XlR@+Jn3LmPucoTG<|M{tY{$>+vz>z6;)m6y zE>#s5TW@)J48#ojw9V+uzIKT!-9*~78~P^{qLm-c^2yh&A;7xSQ*70aeVz%oO0WoUE8I_0++Y<%^)wjCAArF z_607PYUTqU5(q4DV(PAXHWxE`>Q#hc#D-}nv?RiUX1o%cB+yJ>sNWuCo`i_9OusZ` zU5}D))|^}6l1x_^wHsgFD(j}N|8AGEznfNa)G3wTW9l*1>*?S5Gl) zM&IIuM#)S0-ZDw8rQB&W{Jo`pINp@nS3tZYZaZpVKk^bovCjr9q^Q5;cZT|3HVly8 z)ER#A=4y+tHy4NXjeFm4UDohaw(?u65|kUQiEecqLnRGt#g^u+ReE(%(~pkVsN|Vu zW3f&tTWQ&An1_t(*;`RbTUV;Al0O{GsT`j;kL3D>-<79$7#euRF8MFtwa&VzJ(%;W$a^_G5qdi zeBR&B_xJhz{`>y%eLUWOc|2a`-h1vj=bn4+z2`hnof^Ft8x}n^(l36-LfHW!u+uBN zHFkXXyzO0665=&Rm(kSS@3dGwTZ~Wx>6sIT`+JGS$G^QW(@YhU zZoK_1wx>H&H~BK+kXG*(WMvnHUI|?zRBGs`F?c1D7gzcrCE;+k;T>VUt#kEyH5G?2 zr^a$z1N+SFB4apl=)#C7563a<2o=t@NkItl0r5e*I6yP-XWE+<@K~=DJvfFj-WX_m zhn~u_I$TN!kw;r9H@zoJ5g6IEe)iNkh?H@4uK7<_6*Xs^M^zX7R^(bu-q03NP)7-lB z^{nTJ4(>JI{(`4J&rO`smvvK}HYZzyBlAx4?s!~lSp)Z4k4QcT&be-cxoR$4^f;Ou z%UVgCyqRXGU%z?ot&7vq;G*F3w?@`AWgoZjk&FzsG9r$UdT%27ei+{gccb@aoAFUS zGd%tdMldYJThdyR9+q@QrQfxGZ1E^|zN}tS8eiq7`tt&<%NR5AyC8QqHwVr~03~tR zJH|ULV{;oMsv41r{q>`b25Aq}COZdwXENjS!uSGxJ(uMTEiudHB2IeDIOv4I#E3+3 z^{nFOdWD6`_mW0IY<+g6m9B7>c(uoTNpGVFMKZW+_X`*nET>B)>O;S0c@|1MkxnIK zGXzB0>6LoZFR2aPy#Z@RN2x#?O~kR$$K;QlZ5utOrMt$#-rUzMTi;l+^ICV)CzcTS za55&!$Gk^BcCIBT=LPG4*Ve#jsERwA+>WPVx_JPq-f3_;+|rcKz&@?kc73KZ7jsdz z-pE))KgCh#(zcJ~0nwSeSCa0{fuIn0om@`+_Ep=3BzTe2?CuOS$j@FZjsJ$>buG?q zTOnT0QQwIu`^P^9(5uYSu zf-HTeFvq}|i7{BIpRQ>Upj7ysutCWLOZ?Tj!IKJ*Ak(*+oX5V|q@7wCdpwgIO00X) z_ViDQcS6oW@=9C3V(bs=b4mmrE`q3bWv5Iz^jE;cTA0Kon0o7nz7w`7rIq2U-DUDe=l7{S?j z$i1U1WA}>a&I}hu@+lN>(F5Wlgw~_^W(XORf599<)F+e$Z|%0q-;6DSpw9 z!(jLqT<}gxX(ms_E=UyhP9jmfna^%ZMGj{wR=&Vu7w0yNf3hf>)~DVUlD(38&9(X) z_NZ%td%qtc=ChMRAad%Z&27%-|F9(0ewSBqUXEE`U)3!jK%`NUKabb02IBF^H$l

mt-Qem3?Pxy_6PZq7{j_om@U@RUkGq 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 Y1kqlG5Ec=DLv%n(Ltnki_@% literal 0 HcmV?d00001 From 1007527bfb6b7d80355dfca2c51b3f67f98acf61 Mon Sep 17 00:00:00 2001 From: Xavi Aracil Date: Tue, 19 May 2026 09:59:03 +0200 Subject: [PATCH 24/24] Update Cloud Run deployment configuration to set CPU and concurrency limits --- .github/workflows/deploy-cloud-run.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-cloud-run.yml b/.github/workflows/deploy-cloud-run.yml index 2b26ef6e..97a81984 100644 --- a/.github/workflows/deploy-cloud-run.yml +++ b/.github/workflows/deploy-cloud-run.yml @@ -112,6 +112,8 @@ jobs: --memory=2Gi --timeout=60 --min-instances=1 + --concurrency=10 + --cpu=2 --set-env-vars ASTRO_BASE_PATH=${{ env.ASTRO_BASE_PATH }} --set-env-vars AUTH0_DOMAIN=${{ env.AUTH0_DOMAIN }} --set-env-vars AUTH0_CLIENT_ID=${{ env.AUTH0_CLIENT_ID }}