Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "πŸ§ͺ Adventure 00 | 🟒 Beginner (Stand up the lab)",
"name": "πŸ§ͺ Adventure 04 | 🟒 Beginner (Stand up the lab)",
"dockerComposeFile": "docker-compose.yml",
"service": "workspace",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}/adventures/planned/00-blind-by-design/beginner",
"postCreateCommand": "bash /workspaces/${localWorkspaceFolderBasename}/.devcontainer/00-blind-by-design_01-beginner/post-create.sh",
"postStartCommand": "bash /workspaces/${localWorkspaceFolderBasename}/.devcontainer/00-blind-by-design_01-beginner/post-start.sh",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}/adventures/planned/04-blind-by-design/beginner",
"postCreateCommand": "bash /workspaces/${localWorkspaceFolderBasename}/.devcontainer/04-blind-by-design_01-beginner/post-create.sh",
"postStartCommand": "bash /workspaces/${localWorkspaceFolderBasename}/.devcontainer/04-blind-by-design_01-beginner/post-start.sh",
"customizations": {
"vscode": {
"extensions": [
Expand All @@ -16,9 +16,9 @@
},
"codespaces": {
"openFiles": [
"adventures/planned/00-blind-by-design/docs/beginner.md",
"adventures/planned/00-blind-by-design/beginner/src/main/java/dev/openfeature/demo/java/demo/Trial.java",
"adventures/planned/00-blind-by-design/beginner/flags.json"
"adventures/planned/04-blind-by-design/docs/beginner.md",
"adventures/planned/04-blind-by-design/beginner/src/main/java/dev/openfeature/demo/java/demo/Trial.java",
"adventures/planned/04-blind-by-design/beginner/flags.json"
]
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ services:
command:
- start
- --uri
- file:/workspaces/${localWorkspaceFolderBasename:-open-ecosystem-challenges}/adventures/planned/00-blind-by-design/beginner/flags.json
- file:/workspaces/${localWorkspaceFolderBasename:-open-ecosystem-challenges}/adventures/planned/04-blind-by-design/beginner/flags.json
# No `ports:` block β€” the lab reaches flagd on the docker-internal
# network as `flagd:8013`. We deliberately do not publish to the host:
# only :8080 is forwarded into the Codespace, so participants see one
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
set -e

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
CHALLENGE_DIR="$REPO_ROOT/adventures/planned/00-blind-by-design/beginner"
CHALLENGE_DIR="$REPO_ROOT/adventures/planned/04-blind-by-design/beginner"

# shellcheck disable=SC1091
source "$REPO_ROOT/lib/scripts/tracker.sh"
set_tracking_context "00-blind-by-design" "beginner"
set_tracking_context "04-blind-by-design" "beginner"
track_codespace_created

# Install gum (used by the verify.sh output helpers).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
set -e

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
CHALLENGE_DIR="$REPO_ROOT/adventures/planned/00-blind-by-design/beginner"
CHALLENGE_DIR="$REPO_ROOT/adventures/planned/04-blind-by-design/beginner"

cat <<EOF

✨ Adventure 00 β€” Level 1 (🟒 Beginner): Stand up the lab
✨ Adventure 04 β€” Level 1 (🟒 Beginner): Stand up the lab

πŸ“‚ Challenge directory:
$CHALLENGE_DIR
Expand Down Expand Up @@ -45,7 +45,7 @@ track_codespace_initialized
# devcontainer.json and the field is sometimes dropped). `code` is the same CLI the
# editor uses internally and works against either the web or desktop client.
if command -v code >/dev/null 2>&1; then
code "$REPO_ROOT/adventures/planned/00-blind-by-design/docs/beginner.md" \
code "$REPO_ROOT/adventures/planned/04-blind-by-design/docs/beginner.md" \
"$CHALLENGE_DIR/src/main/java/dev/openfeature/demo/java/demo/Trial.java" \
2>/dev/null || true
fi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# πŸ§ͺ Adventure 00: Blind by Design
# πŸ§ͺ Adventure 04: Blind by Design

A research lab is testing a vision-enhancement serum on volunteers. The serum is supposed to take ordinary eyes and produce sharper, even enhanced sight. The lab is a Spring Boot service; OpenFeature is the chart system; `flags.json` decides what reading the lab records for each subject. The protocol is the same for everyone β€” what differs is the observed outcome, because subjects come in with different biology, dose adherence, and trial-jurisdiction baseline. The flagship Phase 3 trial β€” a new amplifier algorithm β€” has started showing trouble: subjects stabilise slower, and roughly one in ten emerge blind. The dashboard that should be tracking all of this is dark. Your mission across three levels: stand up the lab, read the chart by cohort, then turn on the lights and roll back the trial before more subjects lose their sight.

Expand All @@ -9,4 +9,4 @@ The entire **infrastructure is pre-provisioned in your Codespace**.

## πŸš€ Ready to Start?

[Choose your level](https://dynatrace-oss.github.io/open-ecosystem-challenges/00-blind-by-design/) and begin learning!
[Choose your level](https://dynatrace-oss.github.io/open-ecosystem-challenges/04-blind-by-design/) and begin learning!
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ source "$SCRIPT_DIR/../../../../lib/scripts/loader.sh"

OBJECTIVE="By the end of this level, you should:

- See curl http://localhost:8080/ return a vision_state reading resolved from flags.json (not the hard-coded fallback)
- Confirm the response payload includes the OpenFeature evaluation details (variant, reason, value)
- Have curl http://localhost:8080/ return a vision_state reading resolved from flags.json (not the hard-coded \"untreated\" fallback)
- Confirm the response payload includes the OpenFeature evaluation details β€” flag key, variant, reason, value
- Edit flags.json to change the defaultVariant, save, and have the next request return the new variant without restarting the app"

DOCS_URL="https://dynatrace-oss.github.io/open-ecosystem-challenges/00-blind-by-design/beginner"
DOCS_URL="https://dynatrace-oss.github.io/open-ecosystem-challenges/04-blind-by-design/beginner"

APP_URL="http://localhost:8080/"
FLAGS_FILE="$SCRIPT_DIR/flags.json"

print_header \
'Adventure 00: Blind by Design' \
'Adventure 04: Blind by Design' \
'🟒 Beginner: Stand up the lab' \
'Verification'

Expand Down Expand Up @@ -158,5 +158,5 @@ print_success "βœ… PASSED: All $TESTS_PASSED verification checks passed!"
print_new_line

if command -v check_submission_readiness >/dev/null 2>&1; then
check_submission_readiness "00-blind-by-design" "beginner"
check_submission_readiness "04-blind-by-design" "beginner"
fi
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,16 @@ Your Codespace comes pre-configured with the following tools to help you solve t

## ⏰ Deadline

_TBD β€” to be announced at challenge launch._
Tuesday, 26 May 2026 at 23:59 CET

> ℹ️ You can still complete the challenge after this date, but points will only be awarded for submissions before the
> deadline.

## πŸ’¬ Join the discussion

Share your solutions and questions in the challenge thread on the Open Ecosystem Community.
_Discussion link will be added when this adventure goes live._
Share your solutions and questions in
the [challenge thread](TODO)
in the Open Ecosystem Community.

## βœ… How to Play

Expand All @@ -61,13 +63,13 @@ _Discussion link will be added when this adventure goes live._
- Click the "Fork" button in the top-right corner of the GitHub repo or use
[this link](https://github.com/dynatrace-oss/open-ecosystem-challenges/fork).
- From your fork, click the green **Code** button β†’ **Codespaces hamburger menu** β†’ **New with options**.
- Select the **Adventure 00 | 🟒 Beginner (Stand up the lab)** configuration.
- Select the **Adventure 04 | 🟒 Beginner (Stand up the lab)** configuration.

> ⚠️ **Important:** The challenge will not work if you choose another configuration (or the default).

The Codespace will install a Java 21 toolchain and resolve the Maven dependencies. Once it is ready you'll have a
terminal in
`adventures/planned/00-blind-by-design/beginner/`.
`adventures/planned/04-blind-by-design/beginner/`.

### 2. Start the Lab

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# πŸ§ͺ Adventure 00: Blind by Design
# πŸ§ͺ Adventure 04: Blind by Design

Three levels of OpenFeature with **flagd** as the provider, in a Java + Spring Boot service. Wire the SDK against a flagd sidecar (Beginner), layer evaluation context to target by cohort (Intermediate), then instrument flag evaluations with OpenTelemetry and roll back a misbehaving fractional rollout (Expert) β€” all without redeploying.

Expand Down Expand Up @@ -29,7 +29,7 @@ Each level is a standalone challenge with its own Codespace, building on the sto

Wire OpenFeature into a Spring Boot service so the lab's `vision_state` reading is resolved by a flagd sidecar against a `flags.json` instead of a hard-coded literal.

[**Start the Beginner Challenge**](./beginner.md){ .md-button .md-button--primary }
[**Start the Beginner Challenge**](beginner.md){ .md-button .md-button--primary }

### 🟑 Intermediate: Outcome by cohort

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
site_name: 'πŸ§ͺ 00: Blind by Design'
site_name: 'πŸ§ͺ 04: Blind by Design'

nav:
- Introduction: index.md
Expand Down
10 changes: 10 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ headaches.

Browse the available adventures and pick one that interests you:

### May 2026: [Blind by Design](04-blind-by-design/index.md)

**Story:** The Aletheia Institute's lab has been recording every subject as "untreated" for eight months β€” the OpenFeature integration was never finished. Wire the SDK, read the chart by cohort, and roll back a misbehaving Phase 3 trial before the next enrollment batch is signed off.

| Level | Name | 🧠 Key Learnings |
|-----------------|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 🟒 Beginner | [Stand up the lab](04-blind-by-design/beginner.md) | <ul><li>Wire the [OpenFeature](https://openfeature.dev/) Java SDK into a Spring Boot service</li><li>Configure [flagd](https://flagd.dev/) as a gRPC sidecar provider</li><li>Hot-reload flag definitions from `flags.json` without redeploying</li></ul> |
| 🟑 Intermediate | Outcome by cohort | <ul><li>OpenFeature targeting rules and evaluation context</li><li>Transaction context and Spring `HandlerInterceptor`</li><li>Audit hooks for per-cohort outcome tracking</li></ul> |
| πŸ”΄ Expert | Read the chart | <ul><li>OpenTelemetry traces and metrics with OpenFeature hooks</li><li>Custom `ContextSpanHook` for eval context on Tempo spans</li><li>Fractional rollout detection and rollback via [Grafana LGTM](https://grafana.com/)</li></ul> |

### February 2026: [The AI Observatory](03-the-ai-observatory/index.md)

**Story:** Investigate a mysterious bandwidth anomaly at a remote research station by instrumenting its AI system with OpenTelemetry.
Expand Down
Loading