Skip to content

Adventure: πŸ§ͺ Blind by Design β€” 🟒 Beginner#42

Merged
KatharinaSick merged 7 commits into
off-on-dev:mainfrom
aepfli:adventure/blind-by-design-beginner
Apr 30, 2026
Merged

Adventure: πŸ§ͺ Blind by Design β€” 🟒 Beginner#42
KatharinaSick merged 7 commits into
off-on-dev:mainfrom
aepfli:adventure/blind-by-design-beginner

Conversation

@aepfli
Copy link
Copy Markdown
Contributor

@aepfli aepfli commented Apr 30, 2026

Summary

Stand up the lab: wire the OpenFeature Java SDK + flagd contrib provider into a Spring Boot service, author the first flag, and prove hot-reload of flags.json without restarting the app.

What this PR ships

  • Shared adventure infrastructure (carried by all three PRs):
    • ideas/.implemented/blind-by-design.md β€” the approved idea, moved to .implemented/ per the contributing guide
    • adventures/planned/00-blind-by-design/README.md
    • adventures/planned/00-blind-by-design/.gitignore
    • adventures/planned/00-blind-by-design/mkdocs.yaml
    • adventures/planned/00-blind-by-design/docs/index.md β€” adventure landing page; only the 🟒 Beginner card is shown at this stage. The 🟑 Intermediate and πŸ”΄ Expert cards land with their own PRs.
  • Beginner level:
    • adventures/planned/00-blind-by-design/docs/beginner.md (challenge)
    • adventures/planned/00-blind-by-design/docs/solutions/beginner.md (walkthrough β€” kept in repo, hidden from mkdocs.yaml nav until challenge launch)
    • adventures/planned/00-blind-by-design/beginner/ (broken-state Spring Boot project + verify.sh)
    • .devcontainer/00-blind-by-design_01-beginner/

Stacking

This is PR 1 of 3, per docs/contributing/adventures.md:160 ("ship one level at a time"):

  1. 🟒 Beginner β€” this PR
  2. 🟑 Intermediate β€” Adventure: πŸ§ͺ Blind by Design β€” 🟑 IntermediateΒ #43
  3. πŸ”΄ Expert β€” Adventure: πŸ§ͺ Blind by Design β€” πŸ”΄ ExpertΒ #44

Each subsequent PR adds its own level card to index.md alongside its level docs + code + devcontainer.

The original full-state PR #40 is kept open for reference and will be closed once these three land.

Part of #41

Copy link
Copy Markdown
Contributor

@KatharinaSick KatharinaSick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a lot of fun to play this adventure and the end result is rewarding :D It follows a bit of a different approach than the ones I created so far but that's awesome and exactly the reason I was looking forward to contributions 😊

I left a couple of comments but nothing big. Thanks for contributing again 😊

Comment thread ideas/.implemented/blind-by-design.md
Comment thread adventures/planned/00-blind-by-design/mkdocs.yaml Outdated
Comment thread adventures/planned/00-blind-by-design/docs/index.md Outdated
Comment thread adventures/planned/00-blind-by-design/beginner/verify.sh Outdated
Comment thread adventures/planned/00-blind-by-design/docs/beginner.md Outdated
Comment thread adventures/planned/00-blind-by-design/docs/beginner.md Outdated
Comment thread adventures/planned/00-blind-by-design/docs/beginner.md Outdated
Comment thread adventures/planned/00-blind-by-design/docs/beginner.md Outdated
@KatharinaSick
Copy link
Copy Markdown
Contributor

I just had a little conversation with Claude about the Backstory and "we" had some ideas. Feel free to take some inspiration from it, copy it, or just skip it if you want :)

Overall Story (index.md)

You are the new technical lead at the Aletheia Institute, a clinical research facility running a multi-phase vision-enhancement trial. The lab software
β€” a Spring Boot service β€” has one job: record the vision_state of every subject who passes through the protocol. The flag definitions that drive those
readings live in a flags.json file, watched by a flagd sidecar. The OpenFeature SDK is supposed to call that sidecar on every evaluation.

Supposed to.

The previous engineer left without finishing the integration. For the past eight months, every subject through the door has received the same hard-coded label: "untreated". The lab director assumed the system was reading the chart. It wasn't reading anything.

That's bad. But it isn't the crisis.

Phase 3 is the crisis.

Eight weeks ago, the Institute began its flagship trial: a new amplifier variant, delivered to a fractional cohort via a targeting rule in flags.json. The dashboard that should be tracking outcomes has never come online β€” the metric exporter was never wired up. Four adverse-event reports have been filed. In each one, the subject's vision_state at discharge was worse than at enrollment.

No one can see what's happening. The monitoring is dark β€” not by accident, but because no one ever turned the lights on.

Your mission across three levels: stand up the lab so it reads the chart, layer in evaluation context so outcomes can be tracked by cohort, then wire up the observability stack, find the misbehaving Phase 3 variant in the dashboard, and roll it back before the director signs off on the next enrollment batch.

Beginner

You arrived at the Aletheia Institute this morning. Your key card still has temporary clearance printed on it in red. The previous technical lead β€” whose name you keep seeing in commit messages β€” cleared out their desk three weeks ago, no documentation, no handoff, no answers.

What they left behind: a Spring Boot service on :8080 that is supposed to record the vision_state of every subject who passes through the protocol. A flagd sidecar on :8013 that is supposed to serve those readings from flags.json. And a pom.xml with no OpenFeature dependencies in it at all.

The lab is taking readings. Every reading says "untreated". It has been saying that for eight months.

Your mission: wire the OpenFeature SDK into the service so the lab actually reads the chart, author the vision_state flag in flags.json, and prove that the lab can change what it records β€” without restarting anything β€” before the next subject is enrolled.

aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- move idea to ideas/.implemented/ (was: ideas/)
- mkdocs.yaml: drop solution walkthroughs from nav (kept only for post-deadline release)
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory' for cross-adventure consistency
- verify.sh: lean on lib/scripts helpers, follow Adventure 03 shape
- pin all docker images (drop ':latest')
- architecture: drop 'the chart' metaphor labels in favour of direct technical names
- drop the 'Solution Walkthrough' promo section (solutions are unpublished pre-deadline)
- add 'Start the Lab' step before 'Access the UIs' so the port doesn't 502
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- verify section: replace smoke-test / GitHub Actions wording with the Adventure 03 template

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Layer the three OpenFeature evaluation-context tiers (global,
transaction, invocation) onto the Spring Boot lab and register a
custom audit Hook so the targeting in flags.json fires per cohort
(species, country, dose) and every evaluation lands in the audit log.

Replaces the placeholder intermediate.md stub with the full level
doc, ships the Intermediate solution walkthrough, broken-state code,
verify.sh, and devcontainer.

Stacked on top of off-on-dev#42 (🟒 Beginner). Review that one first.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin flagd image to v0.15.4 (was: ':latest')
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- drop the published flagd ports β€” sidecar reaches the lab on the
  docker-internal network as flagd:8013
- drop the inline solutions/intermediate.md cross-link and the
  closing 'Spoiler ahead?' callout (solutions are unpublished
  pre-deadline)
- replace 'Run the Verification Script' wording with the Adventure 03
  template (verify.sh + Certificate of Completion)
- verify.sh: lean on lib/scripts/http.sh test_http_endpoint for the
  reachability check

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
@aepfli
Copy link
Copy Markdown
Contributor Author

aepfli commented Apr 30, 2026

Thank you for the editorial care here β€” and honestly, running it through Claude first is exactly the kind of pre-work that makes a suggestion easy to engage with, because the voice and the structure are already aligned enough that I can read it as a draft rather than a sketch. The three pieces doing the most work in your draft, to my eye, are: the Aletheia Institute as the place β€” the Greek pun on truth/disclosure lands the vision theme more cleanly than "a research lab" ever did; the eight-months / eight-weeks timeline, which makes the stakes concrete instead of abstract; and the "the monitoring is dark β€” not by accident, but because no one ever turned the lights on" sentence, which is the one line in the draft that explicitly previews the Expert-level resolution.

I have cherry-picked those three into docs/index.md on the Beginner branch in 222b1d0; the rebase has cascaded the change through Intermediate and Expert, so the framing now appears once at the top of the adventure rather than being repeated per level. The Beginner-level cinematic intro (the "your key card still has temporary clearance printed on it" opening) I have left out β€” the most recent round of trimming on the level intro was deliberate, and the cinematic version doubles the story length in exactly the section I had just decided to keep brief.

That said, the key-card opening is genuinely strong on its own merits, and if you would rather see it kept somewhere β€” perhaps as an optional "🎬 Set the scene" callout that participants can fold open β€” I am happy to revisit. Push back any time.

aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Layer the three OpenFeature evaluation-context tiers (global,
transaction, invocation) onto the Spring Boot lab and register a
custom audit Hook so the targeting in flags.json fires per cohort
(species, country, dose) and every evaluation lands in the audit log.

Replaces the placeholder intermediate.md stub with the full level
doc, ships the Intermediate solution walkthrough, broken-state code,
verify.sh, and devcontainer.

Stacked on top of off-on-dev#42 (🟒 Beginner). Review that one first.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin flagd image to v0.15.4 (was: ':latest')
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- drop the published flagd ports β€” sidecar reaches the lab on the
  docker-internal network as flagd:8013
- drop the inline solutions/intermediate.md cross-link and the
  closing 'Spoiler ahead?' callout (solutions are unpublished
  pre-deadline)
- replace 'Run the Verification Script' wording with the Adventure 03
  template (verify.sh + Certificate of Completion)
- verify.sh: lean on lib/scripts/http.sh test_http_endpoint for the
  reachability check

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
…inner-only PR

The two stub level-docs and the matching index.md cards were
carried in solely so docs/index.md links did not 404. With the
nav already trimmed (per @KatharinaSick on PR off-on-dev#42), and now with
the cards out of the landing page, the Beginner PR is genuinely
scoped to a single level. Intermediate and Expert each add their
own card + level doc as part of their respective PRs (off-on-dev#43 / off-on-dev#44).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Layer the three OpenFeature evaluation-context tiers (global,
transaction, invocation) onto the Spring Boot lab and register a
custom audit Hook so the targeting in flags.json fires per cohort
(species, country, dose) and every evaluation lands in the audit log.

Replaces the placeholder intermediate.md stub with the full level
doc, ships the Intermediate solution walkthrough, broken-state code,
verify.sh, and devcontainer.

Stacked on top of off-on-dev#42 (🟒 Beginner). Review that one first.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin flagd image to v0.15.4 (was: ':latest')
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- drop the published flagd ports β€” sidecar reaches the lab on the
  docker-internal network as flagd:8013
- drop the inline solutions/intermediate.md cross-link and the
  closing 'Spoiler ahead?' callout (solutions are unpublished
  pre-deadline)
- replace 'Run the Verification Script' wording with the Adventure 03
  template (verify.sh + Certificate of Completion)
- verify.sh: lean on lib/scripts/http.sh test_http_endpoint for the
  reachability check

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
@aepfli
Copy link
Copy Markdown
Contributor Author

aepfli commented Apr 30, 2026

The Intermediate / Expert stub docs and their landing-page cards are out of this PR now. They were only ever there to keep docs/index.md links from 404'ing β€” once the nav was trimmed, the cards on the page were the only thing still pointing at those files, and that's needless noise on a Beginner-only PR.

From here, each level's card and level-doc travel together: Intermediate gets its card + intermediate.md in #43, Expert gets its card + expert.md in #44. Both are rebased on top of this branch.

@aepfli aepfli requested a review from KatharinaSick April 30, 2026 13:40
@KatharinaSick KatharinaSick force-pushed the adventure/blind-by-design-beginner branch from 605dabc to 631cdd9 Compare April 30, 2026 13:59
Copy link
Copy Markdown
Contributor

@KatharinaSick KatharinaSick left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

made some minor adjustments but looks great - thank you! 😊

aepfli and others added 2 commits April 30, 2026 16:06
Wire the OpenFeature Java SDK and the flagd contrib provider into a
Spring Boot service. Author the first flag, prove hot-reload of
flags.json without restarting the app.

Ships shared adventure infrastructure (idea, README, mkdocs.yaml, docs/index.md)
alongside the Beginner level (challenge doc, solution walkthrough,
broken-state code, devcontainer, verify.sh). Intermediate and Expert
level docs are placeholder stubs pointing at the tracking issue;
subsequent PRs will fill them in.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
- move idea to ideas/.implemented/ (was: ideas/)
- mkdocs.yaml: drop solution walkthroughs from nav (kept only for post-deadline release)
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory' for cross-adventure consistency
- verify.sh: lean on lib/scripts helpers, follow Adventure 03 shape
- pin all docker images (drop ':latest')
- architecture: drop 'the chart' metaphor labels in favour of direct technical names
- drop the 'Solution Walkthrough' promo section (solutions are unpublished pre-deadline)
- add 'Start the Lab' step before 'Access the UIs' so the port doesn't 502
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- verify section: replace smoke-test / GitHub Actions wording with the Adventure 03 template

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli and others added 5 commits April 30, 2026 16:06
Cherry-picking from @KatharinaSick's story suggestion on PR off-on-dev#42:
the institute name (a Greek pun on truth/disclosure that lands the
vision theme), the eight-months / eight-weeks timeline, and the
"the monitoring is dark β€” not by accident, but because no one ever
turned the lights on" framing. Beginner-level cinematic intro left
out β€” it doubles the story length in a section that was deliberately
trimmed.

Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
…only PR

Per @KatharinaSick's first instinct on review β€” and on reflection
the author agrees: when the placeholder stubs are reachable from
the side-nav they create more confusion than they resolve. The
stub files stay on disk so docs/index.md's links don't 404, but
they're not surfaced in navigation. Intermediate and Expert come
back into the nav in off-on-dev#43 and off-on-dev#44 once their content is real.

Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
…inner-only PR

The two stub level-docs and the matching index.md cards were
carried in solely so docs/index.md links did not 404. With the
nav already trimmed (per @KatharinaSick on PR off-on-dev#42), and now with
the cards out of the landing page, the Beginner PR is genuinely
scoped to a single level. Intermediate and Expert each add their
own card + level doc as part of their respective PRs (off-on-dev#43 / off-on-dev#44).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
Signed-off-by: Katharina Sick <katharina.sick@dynatrace.com>
Signed-off-by: Katharina Sick <katharina.sick@dynatrace.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Layer the three OpenFeature evaluation-context tiers (global,
transaction, invocation) onto the Spring Boot lab and register a
custom audit Hook so the targeting in flags.json fires per cohort
(species, country, dose) and every evaluation lands in the audit log.

Replaces the placeholder intermediate.md stub with the full level
doc, ships the Intermediate solution walkthrough, broken-state code,
verify.sh, and devcontainer.

Stacked on top of off-on-dev#42 (🟒 Beginner). Review that one first.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin flagd image to v0.15.4 (was: ':latest')
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- drop the published flagd ports β€” sidecar reaches the lab on the
  docker-internal network as flagd:8013
- drop the inline solutions/intermediate.md cross-link and the
  closing 'Spoiler ahead?' callout (solutions are unpublished
  pre-deadline)
- replace 'Run the Verification Script' wording with the Adventure 03
  template (verify.sh + Certificate of Completion)
- verify.sh: lean on lib/scripts/http.sh test_http_endpoint for the
  reachability check

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
@KatharinaSick KatharinaSick force-pushed the adventure/blind-by-design-beginner branch from 8e50d7c to 94a4a88 Compare April 30, 2026 14:06
@KatharinaSick KatharinaSick merged commit cb519a5 into off-on-dev:main Apr 30, 2026
2 checks passed
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request Apr 30, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 6, 2026
Layer the three OpenFeature evaluation-context tiers (global,
transaction, invocation) onto the Spring Boot lab and register a
custom audit Hook so the targeting in flags.json fires per cohort
(species, country, dose) and every evaluation lands in the audit log.

Replaces the placeholder intermediate.md stub with the full level
doc, ships the Intermediate solution walkthrough, broken-state code,
verify.sh, and devcontainer.

Stacked on top of off-on-dev#42 (🟒 Beginner). Review that one first.

Part of off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 6, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin flagd image to v0.15.4 (was: ':latest')
- devcontainer: forward only :8080 (was: 8080+8013+8014+8015+8016)
- drop the published flagd ports β€” sidecar reaches the lab on the
  docker-internal network as flagd:8013
- drop the inline solutions/intermediate.md cross-link and the
  closing 'Spoiler ahead?' callout (solutions are unpublished
  pre-deadline)
- replace 'Run the Verification Script' wording with the Adventure 03
  template (verify.sh + Certificate of Completion)
- verify.sh: lean on lib/scripts/http.sh test_http_endpoint for the
  reachability check

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 6, 2026
Mirrors the structure Beginner adopted in PR off-on-dev#42 review (06789e7) β€” a
discrete "Start the Lab" step before any forwarded-port click, so users
who open the Ports tab early don't hit a 502. Renumbers downstream
sub-steps (3a/b/c β†’ 4a/b/c) and renames the post-fix run section to
"Re-run the Lab with a Cohort" to disambiguate from the new step 2.

Carries the same review feedback Katharina left on the Beginner level
forward to the Intermediate level so the per-level shape stays
consistent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 6, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 6, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 8, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 8, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 18, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 18, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 18, 2026
Wire the OpenTelemetry meter provider, register the OpenFeature
MetricsHook + TracesHook, author a ContextSpanHook that copies the
merged evaluation context onto Tempo spans, then diagnose and roll
back a misbehaving fractional rollout (vision_amplifier_v2) on the
Grafana LGTM dashboard β€” no redeploy.

Replaces the placeholder expert.md stub with the full level doc,
ships the Expert solution walkthrough, broken-state code (including
the dashboard JSON and k6 loadgen), verify.sh, and devcontainer.

Stacked on top of off-on-dev#43 (🟑 Intermediate). Review off-on-dev#42 then off-on-dev#43 first.
This is the last PR in the series, so it closes the tracking issue.

Closes off-on-dev#41

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
aepfli added a commit to aepfli/open-ecosystem-challenges that referenced this pull request May 18, 2026
- rename 'πŸ§ͺ The story (optional)' β†’ 'πŸͺ The Backstory'
- pin all docker images: flagd v0.15.4, otel-lgtm 0.26.0, k6 1.7.1
- devcontainer: drop flagd ports (8013/8014/8015/8016) from
  forwardPorts; the LGTM-stack ports (3000/9090/3200/4317/4318) and
  :8080 stay forwarded as before
- drop the published flagd ports from docker-compose β€” flagd reaches
  the lab on the docker-internal network as `flagd:8013`
- drop the 'Solution Walkthrough' section and the inline
  solutions/expert.md cross-link (solutions are unpublished
  pre-deadline)
- replace the verify-script blurb with the Adventure 03 template
- 'Access the UIs / flagd' subsection: explain flagd is internal-only
  now that the ports aren't forwarded
- verify.sh: lean on test_http_endpoint for the reachability check;
  point FLAGD_HTTP at flagd:8013 (docker network DNS) since the host
  no longer forwards :8013

Refs: PR off-on-dev#42 review by @KatharinaSick

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Simon Schrottner <simon.schrottner@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants