Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
bcee1e0
feat: add Appendix F, provider conformance (TCK)
aepfli Aug 24, 2026
dbb790e
feat: separate @lifecycle from @events in the provider conformance suite
aepfli Aug 24, 2026
4c342c4
fix: require POST /start to return only once the flag state is being …
aepfli Aug 24, 2026
e9bf1d7
Apply suggestion from @toddbaert
aepfli Sep 10, 2026
6850086
fix: a reserved capability must not be declarable
aepfli Sep 10, 2026
cb22edb
feat: rename @strict-numeric-typing to @numeric-coercion, and fix the…
aepfli Sep 11, 2026
595bbbb
fix: stop presenting the numeric coercion rule as normative OpenFeature
aepfli Sep 11, 2026
a62f935
style: pad the appendix tables to the repository's table style
aepfli Sep 11, 2026
c4fb21a
feat: say how the suite may be extended, and what an extension may no…
aepfli Sep 11, 2026
17207c7
feat: publish the provider conformance assets as a Go module
aepfli Sep 11, 2026
d1c30ac
feat: release the provider conformance assets on their own tags
aepfli Sep 11, 2026
6636e1d
docs: state the suite's coverage of the numbered provider requirements
aepfli Sep 11, 2026
ad7b8eb
feat: close the cheap provider-contract gaps and test the edge cases
aepfli Sep 11, 2026
f68677f
docs: list metadata.feature among the feature files
aepfli Sep 11, 2026
cd85816
docs: keep the load-bearing flag properties in one list
aepfli Sep 11, 2026
aa3196d
docs: name the right flag in the canonical set's precision note
aepfli Sep 11, 2026
667856a
fix: point the number-type quote at specification/types.md
aepfli Sep 11, 2026
bd60449
fix: name the falsy flags what the SDK suite already names them
aepfli Sep 11, 2026
2dc0b25
feat: release the specification with release-please as well
aepfli Sep 11, 2026
0d387e2
fix: gate reinitialisation, which 2.5.2 permits rather than requires
aepfli Sep 11, 2026
00578fc
fix: state the rules four implementations answered differently
aepfli Sep 11, 2026
11c2ab4
fix: one skip with a reason, not a second way to say the same thing
aepfli Sep 11, 2026
75ecde2
fix: configure release-please with inputs the action actually declares
aepfli Sep 11, 2026
91d093b
ci: run pull request checks for pull requests based on feat/provider-…
aepfli Sep 11, 2026
178db5b
fix: gate the variant assertions, which 2.2.4 makes a SHOULD
aepfli Sep 11, 2026
9cb29f2
feat: test evaluation context, and make @targeting a real capability
aepfli Sep 11, 2026
a2bbda4
fix: use Appendix B's wording for the targeting-key step
aepfli Sep 11, 2026
ec2cfd7
fix: use flagd-testbed's targeting-key-flag, and state the reason nar…
aepfli Sep 11, 2026
7f0ca75
docs: stop pinning the canonical set's size in an anecdote
aepfli Sep 12, 2026
d1b6672
feat: test disabled flags, gated, because the answer depends on archi…
aepfli Sep 12, 2026
70128f8
fix: state why @disabled-flags is gated, correctly this time
aepfli Sep 12, 2026
ee9ae92
feat: settle what a known deviation means, and who owns the container…
aepfli Sep 12, 2026
640beb2
feat: the control states which path a run used, and the harness must …
aepfli Sep 12, 2026
c8c50f5
fix: require every state-changing control endpoint to serve before it…
aepfli Sep 12, 2026
537da09
fix: /restart is optional, and the TCK never called it
aepfli Sep 12, 2026
67a564b
feat: say how an adoption suite relates to CI, and warn about cached …
aepfli Sep 12, 2026
9071e13
feat: make the resolution reason a claim a provider declares, not a h…
aepfli Sep 13, 2026
b902949
docs: say what an ERROR reason assertion does and does not establish
aepfli Sep 13, 2026
6b20110
feat: a capability the SDK cannot express is refused by the implement…
aepfli Sep 13, 2026
155e896
fix: the canonical flag set still told adopters every scenario expect…
aepfli Sep 13, 2026
537bf87
fix: the numeric-coercion note taught the shape the deviation rule fo…
aepfli Sep 13, 2026
7587a1b
feat: the unit of a declaration decision is the scenario, not the tag
aepfli Sep 13, 2026
9632f49
fix: rule six decides whether a question is askable, not whether it i…
aepfli Sep 13, 2026
1ebbce2
docs: give the conformance suite its own step, and mark the gating ad…
aepfli Sep 13, 2026
b761af7
fix: the separation argument rested on the step running, which it doe…
aepfli Sep 13, 2026
00cd16e
feat: a conformance suite must be separable without a naming convention
aepfli Sep 13, 2026
1b32a00
feat: a suite must not be able to run against assets it did not fetch
aepfli Sep 13, 2026
6a13f22
docs: record that @stale has no Docker-free coverage in any implement…
aepfli Sep 13, 2026
ac4edbc
fix: keep the adoption typechecked, not "compiling in the default build"
aepfli Sep 13, 2026
783e0ff
docs: name the two steps the inherited vocabulary had to rename
aepfli Sep 14, 2026
b7a0e74
docs: say that the configuration-change scenarios rest on cache inval…
aepfli Sep 14, 2026
041e50e
docs: the load-bearing properties are five, and the heading said four
aepfli Sep 14, 2026
321e56c
docs: an absent @stale is a permitted choice, and the appendix never …
aepfli Sep 14, 2026
daf1b23
fix: a backend that returns before it serves is the backend's defect,…
aepfli Sep 14, 2026
e5732f3
fix: correct the evidence for why a compensating wait is the wrong shape
aepfli Sep 14, 2026
8595a57
feat: add "The runner", the contract four implementations kept and no…
aepfli Sep 14, 2026
e0ac6f5
feat: require the extension point rather than merely permitting it
aepfli Sep 14, 2026
bfd0db2
docs: state the appendix's obligations normatively, in Appendix A's s…
aepfli Sep 14, 2026
40d24c1
docs: split the capability sections apart, and compress
aepfli Sep 14, 2026
ba882df
style: the blank lines markdownlint wants in the appendix
aepfli Sep 15, 2026
eeca96c
feat: hold string representation out of the mandatory mismatch matrix
aepfli Sep 15, 2026
bd73a96
feat: split string typing by what the backend can type, and close two…
aepfli Sep 16, 2026
ff68adb
fix: a check with nothing to check is not a check that cannot run
aepfli Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/pr-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ on:
types: [opened, synchronize, reopened]
branches:
- main
# Temporary, for the duration of the provider conformance suite's review.
# This filter matches the pull request's BASE branch, so without it a pull
# request stacked on feat/provider-tck-appendix gets no checks at all.
# Remove once the chain has landed. See open-feature/spec#417.
- 'feat/provider-tck*'

jobs:
# This job ensures that any PR targeting the main branch has up-to-date generated JSON files.
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/pr-python.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ on:
pull_request:
branches:
- main
# Temporary, for the duration of the provider conformance suite's review.
# This filter matches the pull request's BASE branch, so without it a pull
# request stacked on feat/provider-tck-appendix gets no checks at all.
# Remove once the chain has landed. See open-feature/spec#417.
- 'feat/provider-tck*'

permissions:
contents: read
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/release-please.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Run Release Please

# Releases everything versioned in this repository. Two packages are configured in
# release-please-config.json, each with its own release pull request:
#
# . the specification, tagged vX.Y.Z as it always has been
# specification/assets/provider-tck the provider conformance assets, tagged with their path
#
# The two are independent. The specification package excludes the conformance assets, so a
# change confined to the suite never bumps the specification; the assets carry their own
# version because four language suites pin a revision of them, and a pinned revision needs a
# name a human can read and a bot can compare.
#
# This repository enforces DCO, so the bot's own commits need a sign-off. That is the signoff
# key in release-please-config.json: v5 takes it from the configuration file, and an action
# input of the same name is not declared and would be silently ignored.

on:
push:
branches:
- main

permissions:
contents: write
issues: write
pull-requests: write

jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
target-branch: main
4 changes: 4 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
".": "0.9.0",
"specification/assets/provider-tck": "0.0.0"
}
28 changes: 28 additions & 0 deletions release-please-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"signoff": "OpenFeature Bot <109696520+openfeaturebot@users.noreply.github.com>",
"tag-separator": "/",
"bootstrap-sha": "dd235837f7b2ddb1120ab6e1bde940bf4d532313",
"separate-pull-requests": true,
"packages": {
".": {
"release-type": "simple",
"package-name": "spec",
"include-component-in-tag": false,
"changelog-path": "CHANGELOG.md",
"bump-minor-pre-major": true,
"versioning": "default",
"exclude-paths": ["specification/assets/provider-tck"],
"extra-files": []
},
"specification/assets/provider-tck": {
"release-type": "go",
"package-name": "specification/assets/provider-tck",
"include-component-in-tag": true,
"changelog-path": "CHANGELOG.md",
"bump-minor-pre-major": true,
"versioning": "default",
"extra-files": []
}
}
}
1 change: 1 addition & 0 deletions specification/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ sidebar_position: 0
- [Appendix C: OFREP](./appendix-c/index.md)
- [Appendix D: Observability](./appendix-d-observability.md)
- [Appendix E: Migrations](./appendix-e-migrations.md)
- [Appendix F: Provider Conformance (TCK)](./appendix-f-provider-conformance.md)

## Conformance

Expand Down
3 changes: 3 additions & 0 deletions specification/appendix-b-gherkin-suites.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ This section contains a set of language-agnostic end-to-end tests (defined in gh
These tests can be used to validate the behavior of an OpenFeature implementation.
"Features" (test suites) can be used in conjunction with an [in-memory provider](./appendix-a-included-utilities.md#in-memory-provider) and a cucumber test-runner for the language in question.

The suites below validate an **SDK**, using an in-memory provider as a stand-in for a real one.
To validate a **provider** against a real backend instead, see [Appendix F: Provider Conformance (TCK)](./appendix-f-provider-conformance.md).

## Evaluation Feature

The [evaluation feature](./assets/gherkin/evaluation.feature) contains tests for the basic functionality of the [Evaluation API](./sections/01-flag-evaluation.md).
Loading
Loading