The graduation gate for Arc 1. Scenario-based. Three parts. Take it ~2 weeks after Phase 8 ends. Not before.

The Arc 1 Final Exam is not a memory test. It’s a competence test. By the time you sit it, you’ve spent ~12 months operating Linux, shipping two CLIs, refactoring them with deliberate architecture, profiling them, hardening them with tests, and release-engineering them to v1.0.0. The exam asks whether you can use all of that under pressure on a scenario you haven’t seen.

The bar for passing is the bar for the Junior Software Engineer exit ramp: ship a working CLI end-to-end with the hygiene of a professional engineering team, debug any layer of your own stack from first principles, and articulate the design decisions in clear technical prose.


Ship gates (verify before sitting the exam)

You don’t sit the exam until all ship gates are met. Passing the exam means nothing if the artifacts behind it don’t exist.

[ ] sift v1.0.0 released on PyPI with automated pipeline
[ ] pulse v1.0.0 released with GoReleaser binaries
[ ] Both projects: >80% test coverage; CI green; pre-commit operational
[ ] Both projects: ARCHITECTURE.md written + Profile report written
[ ] Hardened Linux dev environment (dotfiles repo public)
[ ] DS&A practice repo with 20-30 solved problems
[ ] First merged upstream PR (any project, anywhere)
[ ] chronicle with ~25-30 runbooks across Linux/Python/Go/architecture/perf/testing/release
[ ] All 8 phase Exit Tests passed
[ ] ~18-20 Pattern Library entries at OUTLINE

If any ship gate is missing, finish it before sitting the exam. The work is the point, not the date on the calendar.


Exam shape

Total time: 6 hours, taken in one sitting. Mode: self-administered, or AI-administered if you have an exam-runner workflow set up. Workspace: your dev environment. Both languages installed. GitHub access. PyPI account. Resources allowed: man pages, official docs (Python, Go, your tools), your chronicle, your project READMEs, your weekly logs. Not allowed: web search beyond official docs, AI coding assistance for the Build section, asking another engineer.

Three parts:

PartTimeFocus
Build150 minShip a small new CLI end-to-end
Debug150 minThree parallel scenarios from Phase exam catalogs
Articulate60 min~1500 words: deep walkthrough

Take a 30-minute break between parts. Eat. Walk. Don’t compress.


Part 1: Build (150 min)

The task: ship a new small CLI from scratch with the hygiene of sift or pulse.

The spec (pick Python or Go, your strongest language):

Build a CLI called jq-lite that:

  • Reads JSON-Lines on stdin
  • Filters records by a simple expression (e.g., field == "value", field > 5, field in [a, b])
  • Optionally extracts specific fields (-o name,age)
  • Emits JSON-Lines (or pretty JSON with -p) on stdout
  • Handles errors gracefully (malformed input → error to stderr, continue with next line)

What you must produce:

Pass bar:

Anti-pattern checks (auto-fail if observed):


Part 2: Debug (150 min)

Three scenarios run in parallel. Each samples from a phase’s catalog.

For each scenario: identify the root cause, write a runbook entry covering the diagnosis path, apply the fix if safe.

Catalog seeds (illustrative; actual exam scenarios are picked at exam time)

Phase 2 (Python) examples:

Phase 4 (Go) examples:

Phase 6 (Performance) examples:

Phase 8 (Release) examples:

Pass bar per scenario:


Part 3: Articulate (60 min)

The articulation part is the proof that the pattern layer landed. It is graded most strictly.

Prompt: “Walk a Python HTTP request from httpx.get(url) to the bytes on the wire. Start from the moment the user calls the function; end with the bytes being sent on the network socket. Cover the HTTP framing, the TCP socket creation, the SSL handshake (where does it happen in Python?), the DNS resolution, and the memory/allocation cost throughout. Then explain how async with httpx.AsyncClient() as client changes the picture and when the async version pays. ~1500 words.”

What a strong answer covers (in any order, with pattern citations):

Pass bar:


Scoring

Each part is graded Pass / Pass-with-notes / Fail.

OutcomeMeaning
3 PassFull graduation. Move to Arc 2.
2 Pass + 1 Pass-with-notesGraduation with action item. Address notes during the first 4 weeks of Arc 2.
2 Pass + 1 FailConditional graduation. Re-take the failed part within 4 weeks. Arc 2 can begin in parallel.
≤ 1 PassNot yet. Identify the gap, work through the relevant phase exit test catalog, retake the full exam after 4-6 weeks.

The “not yet” outcome is not a moral failing. It means the work compounded unevenly, and a few more weeks of focused investigation will close the gap. The point is to enter Arc 2 from a position of real competence, not nominal completion.


After passing

You can:
- Operate Linux as a daily substrate without notes
- Read and write Python idiomatically; ship a real CLI
- Read and write Go idiomatically including concurrency; ship a real CLI
- Reason about algorithmic complexity in real code
- Apply software architecture patterns deliberately
- Profile a slow function and articulate the fix
- Write tests that catch real bugs
- Ship code with trunk-based Git, CI, semver, automated releases
- Defend technical decisions in clear technical prose

Exit ramp: Junior Software Engineer
Confidence: real, with two shipped CLIs at v1.0.0 and ~18-20 OUTLINE patterns

→ Continue to Arc 2: Backend Engineering.


Anti-patterns when sitting the exam

Anti-patternWhy
Treating the exam as a memory testIt’s a competence test. Use your runbooks.
Compressing breaks to “finish faster”Cognitive fatigue produces wrong answers. Take the 30-min breaks.
Asking AI to write the Build manifests or codeAuto-fail. The Build section is your hands.
Writing the Articulate part as bullet listsProse is the test. If you can’t write it as prose, you don’t understand it.
Re-taking on a tight schedule “to catch up”If the first attempt revealed real gaps, give yourself 4-6 weeks. Arc 2 isn’t a race.