2026 07 14 Data Scientist 1100¶
π― Session Summary¶
I walked a 5-quest window (window 2 of 3) of the Data Scientist Β· Level 1100 (Data Engineering, Master) slice, in the exact order the planner selected, as a learner would. The machine evidence was sealed by the workflow in --mode execute (disposable sandbox, commands run for real); I consumed walk-evidence.json / walk-evidence.md as-is and reasoned about the linked journey against the five quest sources.
Headline verdict: FAIL. Three of five quests (Stream Processing 44%, Data Quality 51%, The Warden's Pact 51%) have concrete, reproduced blockers that would stop a real learner cold before they finish the hands-on work β a dead Docker image + missing single-broker replication overrides, a never-supplied orders.csv plus an outdated Great Expectations API, and a self-defeating CODEOWNERS ordering bug plus a validation script the quest never ships. Apache Spark (83%, PASS) is the standout: every Python snippet ran and behaved exactly as taught. The Capstone (68%, WARN) mostly holds, but its own acceptance-criteria.json breaks the jq -e check its own validator runs. A maintainer should treat Stream Processing and Data Quality as the two highest-value fixes: both teach accurate concepts but are not completable as written today.
One structural note for the caller: this window mixes two different quest lines that happen to share the 1100 level code β the Agentic Codex (GH-600) arc (quests 1β2) and Data Engineering Mastery (quests 3β5). For a data-scientist learner, only the latter trio is on-path; see Β§π Chain Continuity.
πΊοΈ The Journey¶
Ordered as walked (plan order = walk-plan.json):
- β The Warden's Pact: Guardrails and Human-in-the-Loop Patterns β 51% Β· Sound guardrail concepts, but the only runnable command fails and the CODEOWNERS example silently defeats its own file-scope guardrail.
- β οΈ Trial of the Agentic Codex: The Grand Capstone β 68% Β· The
validate-capstone.shcontract genuinely works, but the quest's ownacceptance-criteria.jsonfails the exactjq -echeck that validator runs. - β Apache Spark Mastery: Big Data with PySpark β 83% Β· Technically solid; all six PySpark snippets ran and behaved as described. Only the platform-setup notes have bugs.
- β Stream Processing: Real-Time Data with Apache Kafka & Flink β 44% Β· Excellent theory, but the hands-on setup is broken end-to-end: dead broker image + missing replication overrides mean no consumer group ever receives messages.
- β Data Quality Engineering: Validation & Monitoring β 51% Β· Accurate concepts and
working pure-Python validators, but every example depends on an
orders.csvthat is never provided, and the flagship GE example is broken against the current library.
π¬ Evidence¶
All statuses below come from commands the sealed execute engine actually ran in the sandbox (passed/failed/skipped), or from static reasoning over the quest source (reasoned). Nothing here is asserted without a witnessed command or a quoted line.
1. The Warden's Pact β 51% β (13 turns Β· commands_work ⅖, content_accuracy ⅖, safety 5/5)¶
Coverage: 0 passed Β· 1 failed Β· 6 reasoned (of 7). The only literally-runnable snippet failed; the four YAML/markdown config blocks are non-executable and were reasoned about.
python3 scripts/validate_quest.py --quest q19β FAILED. Real sandbox output:python3: can't open file '.../scripts/validate_quest.py': [Errno 2] No such file or directory, exit code 2. The quest (lines 340β347) presents this as the completion check but never ships or links the script..github/CODEOWNERSblock (lines 117β134) β reasoned: the catch-all* @team-devis the last rule, and GitHub CODEOWNERS is "last matching pattern wins", so the wildcard overrides every specific/src/auth/,/src/crypto/rule above it β the file-scope guardrail this chapter exists to teach would not apply.guardrail-file-scope.yml(lines 151β178) β reasoned:gh pr viewstep has noGH_TOKEN/GITHUB_TOKENenv, soghfails in Actions with the standard "set the GH_TOKEN environment variable" error.agent-audit-trail.yml(lines 249β293) β reasoned:workflow_run.workflows: ["*Agent*", "*Copilot*"]uses wildcards this filter doesn't support (needs exact names); the finalgit pushhas nopermissions: contents: writeand will likely 403.- Verified via PyYAML that all three YAML blocks parse, but every
${{ ... }}expression is wrapped in literal{% raw %}...{% endraw %}β copied from raw markdown they are not valid Actions expressions. - Audit heredoc reproduced locally β produces a pretty-printed multi-line JSON block,
not JSON-Lines, contradicting the
.jsonlfilename the workflow uses.
2. The Grand Capstone β 68% β οΈ (22 turns Β· commands_work ⅗, content_accuracy ⅗, safety 5/5)¶
Coverage: 6 passed Β· 1 failed Β· 3 reasoned (of 10).
validate-capstone.sh(lines 448β486) β PASSED. Verified it correctly fails on a partial build and cleanly passes once all 14 seal artifacts exist. This is the quest's strongest artifact.acceptance-criteria.json(lines 311β336) β FAILED. As given (with the leading// work/gh-600/capstone/acceptance-criteria.jsoncomment) it is invalid JSON:jq -e '.criteria | length >= 3' ...βjq: parse error: Invalid numeric literal at line 1, column 3. This is the exact commandvalidate-capstone.shruns for seal S4, so a verbatim copy fails the quest's own validator. Removing the comment line makes jq return true.plan-then-execute.ymland thepermissions:block (Challenges 1.2 / 2.1) β PASSED as valid YAML; thesdlc-diagram.mdandgrand-reflection.mdtemplates β PASSED..vscode/mcp.json(lines 250β263) β reasoned: missing theinputsarray VS Code needs to resolve${input:github-token}, so it isn't a working config as shown.
3. Apache Spark Mastery β 83% β (17 turns Β· commands_work ⅘, structure 5/5, safety 5/5)¶
Coverage: 7 passed Β· 0 failed Β· 2 reasoned Β· 3 skipped (of 12). Skips are the macOS/Windows/Docker setup paths not applicable to the Linux sandbox.
- Linux setup path (lines 173β178,
apt install openjdk-17-jdk β¦ pip install pyspark) β PASSED. spark_intro.py(SparkSession + createDataFrame + printSchema + show) β PASSED.- Lazy pipeline
filter/groupBy/agg/orderBythen.show()/.explain(mode="formatted")β PASSED; theExchange(shuffle) step was visible in the plan as taught. groupByKey().mapValues(sum)vsreduceByKey(...)β PASSED (same result verified).coalesce(1).writevsrepartition(200,"service")β PASSED (file counts as claimed).spark.sql(...).explain("cost")and the.cache()/count()/unpersist()flow β PASSED.- The one substantive accuracy gap is reasoned/tested in setup: the prereq says
"JDK 11/17" (line 127), but the engine directly disproved JDK 11 β current PySpark (4.1.2) against JDK 11 raises
UnsupportedClassVersionError. Windows PowerShell activation.\.venv\Scripts\activateis also broken (should beActivate.ps1).
4. Stream Processing β 44% β (35 turns Β· commands_work ⅕, content_accuracy ⅖, safety 5/5)¶
Coverage: 4 passed Β· 7 failed Β· 6 reasoned (of 17). This quest ate the most turns and produced the most failures β the setup is broken end-to-end.
pip install kafka-python+from kafka import KafkaProducer, KafkaConsumerβ PASSED.docker compose up -dwith the quest'sdocker-compose.yml(image: bitnami/kafka:3.7, lines 254β269) β FAILED:manifest for bitnami/kafka:3.7 not found: manifest unknown. Also failed for:latest, :3.9, :4.0, :3.8, :3.6β the whole bitnami/kafka tag family is gone from the registry.- After substituting
apache/kafka:3.7.0,docker compose up -dβ PASSED, but then: consumer.py(lines 289β303) β FAILED: with the quest's exact broker env (no offsets-topic replication override) the consumer received 0 messages after 25s β the broker loops auto-creating__consumer_offsets(needs RF 3, only 1 broker). Passed only after manually addingKAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=1.eos_producer.py(Chapter 4 exactly-once, lines 379β397) β FAILED: hung indefinitely (30s timeout, zero output) on the quest's config; broker logs showed infinite__transaction_stateretries. Passed only after addingKAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1and..._MIN_ISR=1, neither of which the quest provides.- Linux setup (line 176,
apt install β¦ docker-compose-plugin) β FAILED:apt-cache policyon the Ubuntu 24.04 sandbox showsdocker-compose-pluginCandidate(none)β not installable without adding Docker's official apt repo first. - Net effect verified by reproduction: none of the three Mastery Challenges are completable by following the quest as written today.
5. Data Quality Engineering β 51% β (24 turns Β· commands_work ⅖, content_accuracy ⅖, safety 5/5)¶
Coverage: 5 passed Β· 2 failed Β· 1 reasoned Β· 1 skipped (of 9).
- Linux + Cloud
pip install pandas great-expectations panderaβ PASSED. profile.py,validate_simple.py,anomaly.pyβ PASSED (the dependency-free and pure-logic snippets run correctly).validate_ge.py(Chapter 3, lines 270β289) β FAILED:context.sources.add_pandas('orders_src')raisesAttributeError: 'EphemeralDataContext' object has no attribute 'sources'on great_expectations 1.19.0 (whatpip install great-expectationsresolves to today). The fluent.sourcesAPI was removed in GE 1.0+.contract.py(Chapter 4, lines 339β353) β FAILED: correctly raisedSchemaErrorson the corrupted CSV, but also fails on a fully clean CSV βWRONG_DATATYPE: expected series 'created_at' to have type datetime64[ns]becausepd.read_csvhas noparse_dates=['created_at']. This contradicts the Novice Challenge's "on a clean copy it passes" criterion.- Underlying all of it: every hands-on snippet reads
orders.csv(first used line 239), which the quest never provides or generates β so nothing is runnable out of the box.
π Issues Found¶
Each issue below is backed by a witnessed sandbox command (Β§Evidence) or an exact quoted line. Severities mirror the rubric dimensions (commands_work / content_accuracy first).
High
- Stream Processing Β· Ch.2 docker-compose.yml (line 258) Β· dead image. Observed
manifest for bitnami/kafka:3.7 not found (and every other bitnami tag). Fix: pin a currently-published image (e.g. apache/kafka:3.7.0), and periodically re-verify the tag.
- Stream Processing Β· Ch.2 broker env (lines 261β268) Β· missing single-broker
replication. Observed: consumer gets 0 messages, EOS producer hangs forever. Fix: add KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=1, KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1, KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1.
- Data Quality Β· Chapters 2β4 Β· missing orders.csv. Every hands-on snippet reads it;
it is never supplied. Fix: add a downloadable orders.csv or a short "generate sample data" script before Chapter 2.
- Data Quality Β· Ch.3 validate_ge.py (line 277) Β· outdated GE API. Observed
AttributeError: β¦ has no attribute 'sources' on GE 1.19.0. Fix: update to the current Data Source/Batch Definition API (context.data_sources.add_pandas(...)) or pin a pre-1.0 great-expectations version.
- Data Quality Β· Ch.4 contract.py (line 353) Β· fails on clean data. Observed
WRONG_DATATYPE on created_at even for clean input. Fix: add parse_dates=['created_at'] to pd.read_csv.
- The Warden's Pact Β· Validation (line 341) Β· missing script. Observed
No such file or directory for scripts/validate_quest.py. Fix: ship/link the script or explain it is repo tooling not runnable from QUEST.md alone.
- The Warden's Pact Β· Ch.2 CODEOWNERS (lines 121β133) Β· self-defeating order. Wildcard
* @team-dev is last and (last-match-wins) overrides all specific rules. Fix: move the wildcard first, specific overrides after.
Medium
- Capstone Β· Challenge 4.1 acceptance-criteria.json (line 312) Β· invalid JSON. The
leading // β¦ comment breaks the jq -e check validate-capstone.sh itself runs (S4). Observed jq: parse error: Invalid numeric literal. Fix: move the comment to prose above the fenced block.
- The Warden's Pact Β· Ch.2 guardrail-file-scope.yml (line 155) Β· missing GH_TOKEN.
gh pr view will fail in Actions. Fix: add env: { GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} }.
- The Warden's Pact Β· Ch.4 agent-audit-trail.yml (lines 254, 292) Β· wildcard
workflow_run.workflows + missing push permissions. Fix: use exact workflow names and add permissions: contents: write.
- Stream Processing Β· Ch.3 windowing has no runnable code. The Intermediate Challenge
("late event lands in its true window") is only described. Fix: add a minimal runnable tumbling-window-over-event-time example.
- Stream Processing Β· Ch.4 elided EOS offset commit (line 394). The # β¦ also commit the
consumed offsets β¦ comment hides the exact mechanism the Advanced Challenge tests. Fix: spell out producer.send_offsets_to_transaction(...).
- Capstone Β· Challenge 2.2 mcp.json (line 252) Β· not a working config. Missing the
inputs array to resolve ${input:github-token}. Fix: add it or note it must be added.
- Data Quality Β· Advanced Challenge Β· no quarantine/lineage examples. Required
deliverables with zero worked example in the body. Fix: add a small quarantine-DataFrame snippet and a lineage-map template.
Low
- Apache Spark Β· prereq "JDK 11/17" (line 127) is wrong for current PySpark. Testing
PySpark 4.1.2 on JDK 11 gave UnsupportedClassVersionError. Fix: state JDK 17 (drop 11).
- Apache Spark / Stream Processing Β· Windows PowerShell activation. .\.venv\Scripts\activate
β should be .\.venv\Scripts\Activate.ps1.
- Data Quality Β· setup blocks Β· unpinned installs. Pin great-expectations==1.x (and
peers) so a future breaking API change doesn't silently reappear.
No issues were found in Apache Spark's core teaching content β all six PySpark snippets ran and matched the quest's claims about lazy evaluation, shuffles, and caching.
π Chain Continuity¶
Two distinct quest lines share this level code. This window is 2 of 3 (offset 10) of a 15-quest level, and it straddles a seam:
- Quests 1β2 (Agentic Codex / GH-600):
quest_series: agentic-ai-mastery,quest_line: gh-600. Their internal chain is coherent β Warden's Pact declaresunlocks_quests: agentic-codex-capstone-exam-trial, and the Capstone lists Q19 among its 19required_quests, so the local NβN+1 link (guardrails β capstone) is satisfied within this window. But the Capstone assumes all 19 prior GH-600 quests are done; only Q19 is in-window, so a learner arriving here cold is missing 18 prerequisites the capstone leans on (its per-seal "Refer to Qnβ¦" pointers mitigate this by design). - Quests 3β5 (Data Engineering Mastery):
quest_line: The Data Engineer's Ascent. This trio is internally well-ordered: Apache Spark declaresunlocks_quests: [stream-processing, data-quality], Stream Processing unlocks Data Quality, and each "Next Steps" section points forward correctly. All three list ETL Pipeline Design as a required/recommended prerequisite β that quest is not in this window (earlier in the level), so a learner starting at this window lacks the assumed idempotency/ETL grounding the three quests repeatedly reference ("just like the idempotent load from the ETL quest").
For a data-scientist learner specifically: the on-path chain is the Data Engineering trio (the character-class recommendation lines in each quest literally route the "π Data Scientist" to Data Quality). The two agentic-AI quests are a different track that happens to carry the 1100 code β worth a maintainer's awareness that the date-rotated planner will keep sampling both lines under this character/level pairing.
Readiness hand-off, quest by quest, as a learner:
- Spark β Stream/Data Quality: Spark leaves the learner genuinely ready β its content
works and it correctly frames distributed thinking that Stream Processing extends. This is the one clean hand-off in the slice.
- Stream Processing β Data Quality: conceptually fine, but a learner who tried the hands-on
work would arrive frustrated and blocked (they never got a working broker), carrying no runnable streaming artifact forward.
- Data Quality (terminus): as the end of the data-eng line it should feel like a capstone;
instead the missing orders.csv means a learner cannot run a single example end to end, so the line finishes on a broken note.
- Warden's Pact β Capstone: the concepts chain, but both quests carry defects that surface
at exactly the validation step each one builds toward (missing validate_quest.py; the capstone's own acceptance-criteria.json failing its own validator).
π§ Reasoning & Method¶
- What I ran vs. reasoned: I did not run the engine β per the skill and the task,
walk-evidence.jsonwas pre-sealed by the workflow (the engine's childclaudeprocesses can't authenticate from an agent Bash tool). I consumed it andwalk-evidence.mdverbatim and did not regenerate or edit them,walk-plan.json, or any quest. Everypassed/failedin Β§Evidence is a command the sealed execute-mode engine actually ran in its disposable per-quest sandbox; everyreasoneditem is my static read of the quoted quest source. - My value-add is Β§π Chain Continuity and the linked-journey framing: reading all five sources in plan order and judging whether each quest leaves a learner ready for the next, which prerequisites the window assumes but doesn't contain, and that the level code mixes two quest lines.
- Mode / sandbox: execute, sealed by
quest-perfection/quest-walkthroughworkflow; Ubuntu 24.04 runner sandbox. Safety scored 5/5 on all five quests β no destructive or unsafe commands were needed or run. - Coverage & limits, stated honestly:
- This is a windowed slice: 5 of the level's 15 quests were walked (window ⅔). I did
not expand to the other 10;
stats.total_quests=15is context only. - Setup paths for non-Linux OSes (macOS/Windows/Docker-desktop) were
skippedby the engine (3 in Spark, 1 in Data Quality) β those platform commands are reasoned-only, not tested, so Windows/macOS-specific bugs (e.g. the PowerShellActivate.ps1issue) are flagged from source inspection, not execution. - A few quest artifacts are non-executable config (CODEOWNERS, workflow YAML, mermaid) and are
necessarily
reasoned, not run. - Stream Processing consumed the most engine turns (35) and still could not complete its challenges even after the engine substituted a working image β I report it as verified broken, not merely suspected.
- Confidence: High on the three FAIL verdicts β each rests on a reproduced command with
quoted real output (dead manifest, 0 messages,
AttributeError,WRONG_DATATYPE,No such file). High on Spark's PASS. Medium-high on the Capstone WARN (structure works; the one hard failure is its own JSON-vs-validator contradiction).
One slice, one report. No quest content changed; git is the caller's job.