Week 2Day 14 of 30120 minutes~59 min of reading

Build the week-2 artifact

Lab: design a project-wiki copilot

Build enough to be dangerous

Why this matters for a delivery manager

This is the portfolio piece FDE and solutions interviews actually probe. Not a trained model — a thin slice you could stand up with an engineer in a week. Make it specific (a named wiki, named users, named non-goals). Vague 'enterprise RAG' designs all sound the same and hire none of you.

You already have the parts: Python shapes and a 40-line script, a model-client spec, a 10-question retrieval eval, a RAG one-pager, a failure RAID and a no-go memo, a three-tool spec you will mostly refuse to use. Today you assemble them into one document a skeptical engineer and a skeptical sponsor can both survive.

The quality bar is specificity plus controls. If a stranger can name the user, the job, the corpus, the two evals, the ACL move, the cost envelope, and what you will not build, the artifact is doing its job. If they only remember a pipeline cartoon, it is not.

You will be able to

  • Produce an end-to-end design: ingest, retrieve, generate, cite, eval, ACL, cost, non-goals
  • Include the retrieval eval table from day 10 and the RAID from day 12
  • Optional: a 40-line pseudo-script of the happy path
  • Be ready to walk this in 8 minutes (you will, on day 29)

2-hour clock

120:00

Now: Read the lab brief and today's assembly notes · 50m

The 2-hour session

Concepts, in full

This block is a slow read — about an hour with the diagrams. After each concept, write one sentence in notes (what you already do vs what is new) and tick annotated. Do not skim the last concept.

01

Specificity is the quality bar

Bad: 'RAG over corporate knowledge for employees.' Good: 'PMs on Program Atlas can ask what we decided about vendor X and get a cited answer from the decision log and SOPs in the Atlas Confluence space. No writes. No HR. No finance folders. Recusal if ACL misses.' The second sentence can be built, evaluated, and killed. The first can only be demoed.

Name the audience, the job, the corpus, the non-goals, the eval, the owner. That is a design. The rest is decoration. If you skip naming because the fictional program feels fake, you will write generic prose and the artifact will not survive an interview. Specific fake beats vague real. Atlas, SOP-14, decision log 2024-06-12, PMs, 200 pages — pick them and stay loyal for the rest of the hour.

The job-to-be-done is a verb a PM already does: find the decision, check the SOP exception, see who owns the RAID item. It is not 'chat.' Chat is a UI. If you cannot name the verb, you cannot name the eval questions, and you will scope a chatbot of everything. Write the verb in one sentence at the top of the pack and do not start the pipeline until that sentence is boring and clear.

Users are a role with a permission set, not 'the business.' PMs on Atlas, not all employees. The ACL story follows from that. If you say 'employees,' you inherited every leak in the tenant. Narrow users are how you ship. You can add a second role in v1.1 if the eval still holds. You cannot subtract a role after the intern found the CEO deck.

Corpus in is a list of spaces and types, with an approximate page count. Corpus out is a list too, not a vibe: HR, finance, personal drives, archive unless flagged, vendor pricing. If out-of-scope pages live inside the in-scope space, say how ingest drops them. Boundary without a mechanism is a prompt wish. A number helps: 'about 200 pages in three types' is a corpus. 'Corporate knowledge' is a speech. Interviews will ask how big it is because cost, ACL, and eval effort all scale with that number, and 'we'll see' is not an estimate.

The knowledge owner has a name-shaped blank you fill: 'Atlas PMO lead' is acceptable if you do not have a real human. 'The AI team' is not. Write what they owe: archive conflicts, sample 20 chunks, re-judge gold labels when SOPs move, take corpus errors routed from users. If that person would not agree to this, pick a thinner corpus.

Read your sentence out loud. If it needs a slide to be understood, it is not specific yet. Interviews will not give you the slide first. They will say 'tell me about a system you would ship' and you have 30 seconds to get Atlas, PMs, cited decisions, no writes, out of your mouth.

Specificity is the quality bar because vague enterprise RAG designs all sound the same and hire none of you. Name the audience, the job-to-be-done as a verb a PM already does, the corpus with a page count, the non-goals as sentences with reasons, the eval as fractions, the owner as a hat a human would accept. Specific fake beats vague real. Atlas, SOP-14, PMs, 200 pages — pick them and stay loyal for the hour. If the sentence needs a slide to be understood, it is not specific yet. Interviews will not give you the slide first. They will say 'tell me about a system you would ship' and you have 30 seconds. Write the sentence at the top of the pack and do not start the pipeline until it is boring and clear. Chat is a UI. The verb is the job. If you cannot name the verb, you will scope a chatbot of everything, which is the artifact this lab exists to prevent. Read it out loud. If you cringe, it is still too generic. Cut until a stranger could staff it.

02

Architecture of the wiki copilot — boxes you can staff

The pipeline is day 11's boxes, named for Atlas. Ingest: Confluence Atlas space, SOP / decision log / RAID types, drop nav and archive, sample 20 chunks. Chunk: split on H2, max 800 tokens, 100 overlap, tables kept whole, metadata = path, heading, date, permission group. Index: embedder pinned, hybrid search, query-time ACL from SSO. Retrieve: k from eval, empty allowed. Generate: prisoner prompt, temperature 0, refuse sentence. Cite: deep-link to H2. UI: answer, citations, footer, request id. Eval: recall@5 and groundedness. No loop. No writes.

Owners on the arrows. Knowledge owner on ingest and conflicts. Engineer on index, client, ACL filter, highlight UX. You on eval, generator contract, RAID, go-live. Security on leak-test. Legal on logs and retention. Product on footer and degraded UX. If you are writing this as a one-person FDE slice, you still name the hats. Future-you will put a different human in the hat. Unnamed hats disappear.

Happy path: PM asks 'what did we decide about vendor X in Q2.' Query-time ACL filter. Hybrid retrieve. Gold decision log in top 5. Packet labeled [S1]… Generate with citations. UI opens heading. Trace logged with prompt version and usage. That path should be the 40-line pseudo-script if you write one: load is already done (index exists), loop is not needed (one question), call is retrieve then generate, print is the answer plus source ids.

Empty path: PM asks Jane's salary, or a policy in a different space. Retrieve returns nothing (or only out-of-scope neighbors you dropped). Generator emits the refuse sentence. UI offers 'ask the Atlas PMO' and a request id. This path is in the architecture, not in an appendix. Draw it. Staff it. If you cannot talk the empty path in the eight-minute walkthrough without notes, the pack is still a happy-path demo, and happy-path demos are what this week was built to stop you shipping.

Fail path: 429, timeout, empty 200, leak-test would fail so you do not ship. Client spec from day 9 is an appendix of this pack: defaults, error table, kill switch. Do not rewrite it. Attach it. The copilot is not allowed a different timeout philosophy because it is 'just a wiki.'

Change path: SOP-14 updates at 4pm. Connector upserts or the 24h lag banner is honest. Canary document in the runbook. Re-index SLA is a number. This is architecture, not operations-later. If you leave it out, you designed a demo.

What you are not drawing: a swarm, a write to Jira, a fine-tune, a multi-tenant platform, 'all of Confluence.' If a box wants to sneak onto the page, it goes in non-goals. The compare diagram exists so you have a place to put the energy that is not v1.

The architecture is day 11's boxes named for Atlas, staffed, with a happy path, an empty path, a fail path, and a change path. No loop. No writes. Client spec from day 9 is an appendix, not a rewrite. The optional 40-line script is retrieve then generate, four verbs you already know from day 8, user ACL on the search. If a box has no owner it will disappear. If a box wants to sneak on — swarm, Jira write, fine-tune, all of Confluence — it goes in non-goals. Draw until you can talk the empty path without notes. Empty is where this product is honest. Happy path is where demos live. You are not turning in a demo. You are turning in a slice a skeptical engineer could stand up in a week, and a skeptical sponsor could fund without pretending the rest of the tenant is in scope.

Diagram

Atlas wiki copilot — v1 architecture

01

Ingest Atlas space

SOPs, decision log, RAID. Drop junk and archive. Knowledge owner samples 20 chunks.

02

Chunk + embed

H2 split, 800 / 100, tables whole, metadata and permission group. Embedder pinned.

03

Hybrid retrieve

Keyword + vector, SSO ACL filter, k from eval. Empty allowed.

04

Generate + refuse

Prisoner prompt, temperature 0, exact refuse sentence, prompt version logged.

05

Cite in the UI

Deep-link to H2, footer 'not a decision,' request id. No writes.

06

Eval + SLA

Recall@5, groundedness, leak-test, re-index lag, cost envelope.

One space, one role, read-only. Every box has an owner in the pack. Empty retrieve still reaches generate. No agent loop on this picture.

Optional happy-path pseudo-Python — retrieve then generate, no loop
def answer(question: str, user: User) -> dict:
    chunks = hybrid_search(
        question,
        k=5,
        filters={"space": "Atlas", "acl": user.groups, "archived": False},
    )
    if not chunks:
        return {"text": "I don't have this in the indexed documents.", "sources": []}
    packet = format_sources(chunks)  # [S1] path | heading | date
    messages = [
        {"role": "system", "content": GENERATOR_CONTRACT},  # prisoner + refuse
        {"role": "user", "content": packet + "\nQ: " + question},
    ]
    out = call_model(messages, temperature=0, max_tokens=600, timeout_s=30)
    return {"text": out.content, "sources": chunks, "usage": out.usage, "id": out.id}

03

v1 vs non-goals — protect the slice

v1 is easy to agree with in a workshop and easy to betray by Friday. Write non-goals as complete sentences with a reason. 'No writes' is a slogan. 'No Jira writes in v1 because we have no human gate, no idempotency, and no owner of a wrong ticket' is a control. The compare diagram is the slide. The sentences are the pack.

No agents. The job is find-and-cite. Recall is not yet a number. A loop will paper over empty retrieve by searching again until it finds a neighbor. That neighbor will be wrong. Query rewrite once is allowed later; a free-form ReAct loop is not v1. Day 13 gave you the sentences. Paste them.

No all-of-Confluence. Day 12's memo is an appendix. The slice is Atlas, ~200 pages, three types. Expansion is a change request: owner, ACL, sample chunks, new eval rows. Without that sentence, success on Atlas will be read as permission to ingest HR.

No personal drives, no finance folders, no HR case data. If they appear in Atlas by accident, ingest drops them and security is told. Prompting is not the filter.

No live ERP numbers. 'What did we decide about vendor X' is in. 'What is the open PO' is a tool to finance SoR, out of v1, possibly forever for this copilot. Mixing them is how you get a confident wrong amount with a SOP citation.

No personality work, no avatar, no 'make it fun.' Tone can be one line in the system prompt. Budget does not go to the mascot while recall is unmeasured. A fun bot that cites the wrong SOP is still a wrong SOP. You can add tone in an afternoon once the evals exist. You cannot add evals in an afternoon once the mascot has been demoed to the CEO and is now the product.

v1.5 / v2 live in a short appendix so the sponsor sees a path: one read tool (ticket lookup) when recall@5 holds for two weeks; one draft-with-confirm when a knowledge owner asks for it. Dates only on v1. The path is how you stay in the room without signing up for a swarm.

v1 versus non-goals is how you protect the slice from Friday betrayal. No agents, because a loop will paper over empty retrieve. No all-of-Confluence, because success on Atlas will be read as permission to ingest HR. No personal drives, finance, HR cases. No live ERP numbers. No mascot budget while recall is unmeasured. Write them as complete sentences with reasons, not slogans. v1.5 lives in a short appendix: one read tool when recall holds; one draft-with-confirm when a knowledge owner asks. Dates only on v1. The compare diagram is the slide. The sentences are the pack. If it is not in the left column, it is not in the build. Anyone who wants an Atlas agent on the first ship is asking for the keynote. You have the sentences from yesterday. Paste them.

Diagram

v1 ship vs explicit non-goals

A

v1 — ship this

  • PMs on Atlas, find-and-cite decisions/SOPs/RAID
  • One space, ~200 pages, three doc types
  • Hybrid retrieve, query-time ACL, refuse-when-empty
  • Citations that open H2, 'not a decision' footer
  • Recall@5 + groundedness, leak-test, 24h lag banner
  • Client defaults: temperature 0, timeout, kill switch
B

Non-goals (v1)

  • Agents / unbounded ReAct loops
  • Write-tools (Jira, email, wiki edits)
  • All of Confluence, personal drives, HR, finance
  • ERP / live numbers
  • Fine-tune, swarm, multi-tenant platform
  • CEO demo before the eval bar holds

If it is not in the left column, it is not in the build. The right column is not 'later maybe' unless you listed it as v1.5 with a gate.

04

Evals, ACL, cost — the three numbers steering will actually hear

Paste the day 10 table. Ten questions, mix intact: ID, how-do-we, decision, table, synonym, region if you have it, stale trap, owner, should-be-empty, multi-hop-ish. Gold is a filename and heading, not 'the handbook.' Success: recall@5. The empty row's success is retrieve nothing / refuse. Do not drop the empty row because it 'isn't a demo.'

Groundedness plan: 20 answers, claim-level, two marks (grounded, cited-right), including refuses. First run by hand. Owner: you. Cadence: every prompt change, every model bump, every corpus expansion. LLM-as-judge is a later maybe (day 16), not a v1 shortcut that grades its own homework.

Leak-test: a user who should not see folder F, a question whose gold lives only in F. Success: refuse, no title leak. This is a go-live gate. Put it next to recall so it cannot be 'v2.'

ACL approach in one paragraph: ingest stores permission group from Confluence; query filters by SSO groups; citations click through the same check; POC runs with ACLs on or it is not a POC. God-account ingest is banned in production language even if the first load used one. Write the ban.

Cost envelope: expected questions / week, tokens in (packet size × k), tokens out, embed of 200 pages, re-embed on churn. Then 10×. Kill switch criteria. Day 5 math, day 9 usage logs. A missing envelope is how finance discovers you. Put the number even if it is ugly. Ugly and owned beats blank. If you cannot estimate, you do not have a v1 — you have a credit card and a wiki. Write the assumptions (volume, k, packet tokens, model price) so next quarter someone can refresh the envelope without you.

Re-index SLA: 24h lag banner, or event-driven if the connector is real. Canary page in the runbook. Connector-down: serve stale with banner vs go dark — pick one for Atlas (stale-with-banner is acceptable for decisions that are not safety-critical; say so).

Report these as fractions and dollars, not as 'good' and 'cheap.' 7/10 recall@5, 16/20 grounded, $X at 1× and $Y at 10×, leak-test pass. That block is the steering slide. The pipeline cartoon is backup.

Steering hears three numbers: recall@5 as a fraction, groundedness as a fraction, cost at 1x and 10x. Leak-test pass/fail sits beside them as a go-live gate, not as v2. Paste the day 10 table with the mix intact, including the empty row. ACL in one paragraph: query-time SSO filter, citations inherit it, POC runs with ACLs on. Re-index SLA as a number and a banner. Kill switch criteria next to the envelope. Report fractions and dollars, not 'good' and 'cheap.' That block is the steering slide. The pipeline cartoon is backup. If a heading in the design-pack table is empty, the artifact is not done. Fill the heading. Do not decorate the cartoon.

Design-pack contents — if a heading is empty, the artifact is not done
HeadingWhat 'done' looks likeStolen from
One-sentence jobNamed role, named verb, named corpusToday c1
Corpus in/outSpaces, types, page count, drop rulesDay 11 one-pager
Pipeline + ownersBoxes with hats, no 'AI team' everywhereDay 11 / today c2
Chunking + hybridH2 / 800 / 100, keyword + vector, kDay 10
Generator contractPrisoner prompt, refuse sentence, version idDay 11
ACL + re-index SLAQuery-time filter, leak-test, lag numberDay 12
Evals10+ retrieval rows, groundedness plan, empty pathDay 10–11
Cost envelope1× and 10×, kill switchDay 5 / 9
RAID (6–8 rows)Statement, impact, owner, trigger, mitigationDay 12
Non-goals + talk trackWrites, agents, all-of-wiki; 8-minute bulletsDay 13 / today

Design-pack contents — if a heading is empty, the artifact is not done

05

RAID, the no-go, and the eight-minute talk track

Paste at least six RAID rows from day 12, rewritten for Atlas: stale/conflict, ACL, junk ingest, demo eval, citation theatre, no owner, cost at 10×. Triggers observable. Owners named as hats. If you cannot name a knowledge owner, the row is still there and the conditions-to-proceed say the slice does not start.

The no-go memo becomes the 'if they push for all of Confluence' appendix. You may not send it this week. You will send it in a job, or you will wish you had. Six sentences, thinner slice, date. Keep it in the pack.

Talk track, timed: (1) problem — PMs cannot find decisions, they ask Slack, they get folklore. (2) slice — Atlas space, PMs, find-and-cite, no writes. (3) how it works — six boxes, prisoner generator, hybrid retrieve. (4) how we'll know — recall@5, groundedness, leak-test, cost. (5) risks — the RAID top three. (6) ask — named owner, two weeks to eval bar, no CEO demo until then. Eight minutes is enough if you do not tour the obvious.

Practice the talk once in your head before you tick the artifact. If you run long, cut architecture details, not the evals and non-goals. Interviewers who have shipped this will interrupt to ask about ACL and empty retrieve. Have those sentences on your tongue, not only in the doc.

Day 29 will reuse this walkthrough. Write the bullets in the pack, not on a sticky you will lose. The document is the source. The talk is a view.

Tone of the pack: delivery, not a pitch deck. Short sentences. Names. Numbers. No 'leverage' or 'empower.' A skeptical engineer should nod at the client spec and the leak-test. A skeptical sponsor should see the slice and the ask. If either audience would bounce, edit.

Done looks like headings filled, not a mood board. A pipeline cartoon without the table of questions is not done. A table of questions without ACL is not done. Tick the capstone artifact only when you would let a stranger read the pack without you in the room.

RAID, the no-go appendix, and the eight-minute talk track are how the pack ships without you narrating it. At least six rows with observable triggers. Six-sentence memo for the all-of-Confluence push. Talk: problem, slice, boxes, evals, ACL, cost, non-goals, ask. If you run long, cut architecture tourism, not evals and the empty path. Day 29 reuses this walkthrough; write the bullets in the pack. Tone is delivery, not a pitch. Tick the artifact only when you would let a stranger read it. A cartoon without the question table is not done. A table without ACL is not done. Practice the talk once in your head before you tick. The document is the source. The talk is a view.

06

What 'enough building' meant this week

You can read a script, specify an API client, design retrieval evals, draw RAG, catalog failures, and cap an agent. You are not a staff engineer. You are now dangerous in the useful way: you will not fund a chatbot of everything, and you can sit with someone who writes the code.

The split from day 8 still holds. You wrote the spec, the eval, the RAID, maybe a 40-line happy path. An engineer writes retries, the real connector, observability, the service. FDE sits in the overlap and may implement more. Delivery lead sits on spec and eval and go-live. Do not claim the platform in the pack. Claim the slice and the controls.

Week 3 turns this into the operating system: governance, evals as a program, vendors, the charter. This artifact is an input to that week, not a trophy you stop touching. When the charter asks for a thin slice, this is the slice. When vendor day asks for evals on our tasks, this is the table.

If you skipped practices on days 10–13, do not invent from a blank page for an hour and call it a pack. Go back, harvest the objects, then assemble. The lab is assembly. Invention without the catalog will recreate the demo you were taught to refuse.

Optional running code is extra credit this month, not the artifact. A repo without the design is a toy. A design without a repo is hireable for delivery and solutions. FDE loops will want both, later. Do not spend the last 40 minutes debugging an install. Spend them on ACL and the empty-gold row.

Your positioning line from day 1 can now mention this object: a wiki copilot design with retrieval evals, ACL, and a no-go. That is more useful in 15 seconds than 'I have been learning RAG.' Rewrite it after you tick, even if the rewrite is ugly.

Stop at 120 minutes. An 80% pack that exists beats a 100% pack you will start on Saturday. Tick the artifact. Tomorrow you are not a builder. You are back to operating.

Enough building this week means you can read a script, specify a client, design retrieval evals, draw RAG, catalog failures, and cap an agent — and then refuse the agent on this slice. You are not a staff engineer. You are dangerous in the useful way. Week 3 turns this object into the operating system. The split from day 8 still holds. Optional running code is extra credit; do not spend the last 40 minutes on an install. Rewrite the day 1 positioning line to mention this pack. Stop at 120 minutes. An 80 percent pack that exists beats a 100 percent pack you will start on Saturday. Tick. Tomorrow you are not a builder. You are back to operating. That is the job you are training for, pointed at a new object you can now draw, eval, and kill.

Worked case · stay here ~20 minutes

Walking the wiki copilot to a skeptical sponsor

Lab day. You have seventy minutes of assembly and then an eight-minute walkthrough to Marcus, who has been burned by a vendor wiki bot and by last week's near-miss. He has Dev on the call as the skeptic engineer. You will not invent an architecture. You will assemble days 10-13 and talk. Timer on the table.

You start the assembly on the one-sentence job, not on a pipeline cartoon. PMs on Program Atlas can ask what we decided about vendor X and get a cited answer from the decision log and SOPs in the Atlas Confluence space. No writes. No HR. No finance folders. Recusal if ACL misses. You read it out loud. If it needs a slide, it is not specific yet. It does not. You stay loyal to Atlas, SOP-14, decision log 2024-06-12, PMs, about 200 pages, for the rest of the hour. Specific fake beats vague real, and this is barely fake. Users are a role with a permission set, not the business. Corpus in is three types in one space. Corpus out is a list: HR, finance, personal drives, archive unless flagged, vendor pricing. If out-of-scope pages live inside the space, ingest drops them. Boundary without a mechanism is a prompt wish. Knowledge owner: Atlas PMO lead, named, owes archive, sample of 20 chunks, re-judge gold, take corpus errors. If that person would not agree, you would thin the corpus. They agreed on Friday.

Architecture is day 11's boxes named for Atlas, staffed, with four paths. Happy: PM asks vendor X in Q2, ACL filter, hybrid retrieve, gold in top 5, prisoner generate, citations open H2, trace logged. Empty: salary or a different space, retrieve nothing, refuse sentence, request id, ask the PMO. Fail: 429, timeout, empty 200, leak-test fail means you do not ship. Change: SOP-14 at 4 p.m., upsert or a 24h lag banner that is honest, canary in the runbook. Client spec from day 9 is an appendix, not a rewrite. No loop. No writes. Optional 40-line script is retrieve then generate, four verbs from day 8, user ACL on the search. If a box has no owner it will disappear. You put hats: knowledge owner ingest, Priya index and filter and highlight, you eval and generator contract and RAID, Security leak-test, Legal logs, Product footer. Dev wanted a swarm on Tuesday. The swarm is in non-goals. You can talk the empty path without notes. Empty is where this product is honest. Happy path is where demos live. You are not turning in a demo.

Non-goals you write as complete sentences with reasons, because slogans die on Friday. No Jira writes in v1 because we have no human gate, no idempotency, and no owner of a wrong ticket. No agents, because a loop will paper over empty retrieve and last week's ACL cannot survive a second search the model chooses. No all-of-Confluence, because success on Atlas will be read as permission to ingest HR; expansion is a change request with owner, ACL, sample, new eval rows. No personal drives, finance, HR cases; if they appear in Atlas, ingest drops them and security is told. No live ERP numbers; open PO is a query tool, out of this copilot. No mascot budget while recall is unmeasured. v1.5 appendix: one read tool when recall at 5 holds for two weeks; one draft-with-confirm when a knowledge owner asks. Dates only on v1. The compare diagram is the slide. The sentences are the pack. If it is not in the left column, it is not in the build. Anyone who wants an Atlas agent on the first ship is asking for the keynote.

Evals, ACL, cost — the three numbers Marcus will actually hear — you put on one slide and you keep the cartoon off it. Recall at 5 on the ten-question table, mix intact: POL-1044, how-do-we, decision log, rates table, synonym, stale trap, owner, should-be-empty, multi-hop-ish. Gold is filename plus heading, not the handbook. Empty row success is retrieve nothing and refuse. Groundedness: 20 answers, claim-level, grounded and cited-right, including refuses, first run by hand, you own it. Leak-test: user who should not see F, gold only in F, refuse, no title leak. Go-live gate, next to recall, not v2. ACL paragraph: ingest stores Confluence groups, query filters by SSO, citations inherit, POC runs with ACLs on, god-account banned in production language. Cost: expected questions per week, packet size times k, tokens out, embed of 200 pages, re-embed on churn, then 10x, kill switch criteria. Ugly and owned beats blank. Re-index SLA: 24h banner or event-driven, canary, stale-with-banner for this corpus class. Report fractions and dollars. That block is steering. The pipeline is backup.

RAID you paste from day 12, rewritten for Atlas, six rows minimum: stale and conflict, ACL, junk ingest, demo eval, citation theatre, no owner, cost at 10x. Triggers observable: canary lag, leak-test fail, sample-chunk fail, recall drop, spend over envelope. Owners as hats. Wrong-answer route: corpus errors to PMO lead, product errors to you, not a bucket named AI team. The no-go memo sits in the appendix for the all-of-Confluence push you know is coming after a good demo. Six sentences, thinner slice, date. You may not send it today. You will send it in a job, or you will wish you had. Talk track timed, because eight minutes is a budget: problem, slice, boxes, evals, ACL, cost, non-goals, ask. If you run long you will cut architecture tourism, not the empty path and not the leak-test. Interviewers and burned sponsors interrupt on ACL and empty. Those sentences are on your tongue. Day 29 reuses this walkthrough. The document is the source. The talk is a view. Tone is delivery, not a pitch. No leverage. Dev should nod at the client spec.

You stand up. Timer starts. Problem, forty-five seconds: PMs cannot find decisions, they ask Slack, they get folklore, they paste folklore into tickets as if it were SOP-14. Slice: Atlas space, PMs, find-and-cite, about 200 pages, three types, read-only. How it works, two minutes, six boxes, prisoner generator, hybrid retrieve, empty allowed. You do not tour vendors. You draw ingest through cite on a single line. How we will know, ninety seconds: recall as a fraction, groundedness as a fraction, leak-test pass or fail, cost at 1x and 10x. You say the current fractions honestly if they exist; if the set is still being judged, you say the bar and the date, not pretty good. Risks, the top three RAID rows, sixty seconds: ACL, stale SOP, citation theatre. You mention last week's filename chip without theatre. Ask: named owner we already have, two weeks to the eval bar, no CEO demo until the bar holds, no agents in v1. You stop. The timer is at 7:40. You do not fill the twenty seconds with a swarm you refused. Silence is a closer. Marcus has the floor.

Marcus interrupts on empty retrieve, as you hoped. What does the user see when it does not know. You answer with the screen, not with a hope: the exact refuse sentence, a link to ask the PMO, request id, no second prompt that says be helpful, no prior knowledge on policy. He asks whether that will make the demo look weak. You say a refuse on Jane's salary is the demo, and you will run it in front of whoever needs to see it, including a CEO, especially a CEO. Dev interrupts on ACL. You give him query-time SSO, groups at ingest, citations inherit, leak-test as a gate, no stripped tenant, Security on the RACI, title leaks count. He tries fine-tune, because he has not let it go. You give him the two questions — change rate, label owner — and the parking lot with a gate. He nods, which from Dev is a standing ovation. Marcus asks when they get the agent. Four sentences, then the path: copilot, one read later, one gated write if a knowledge owner asks. Dates only on the copilot.

Questions you refused to invent under the clock: vector brand, mascot, can it file the Jira if we just, all-of-Confluence by the offsite. Each gets one sentence back to the pack. Brand is Priya's with a re-index SLA, not a religion. Mascot is out until recall exists. Jira is a form later, not a tool now. Offsite is a no-go memo if they push. You do not take an action to explore those. Explore is how packs grow loops overnight. You take an action to harvest the last six eval questions with two PMs tomorrow, and to sit the twenty-chunk sample with the PMO lead on Friday. Those are the next verbs. The walkthrough is over. You tick the artifact only because a stranger could read the pack without you in the room. A cartoon without the question table is not done. A table without ACL is not done. You have both. The pack is ugly. Specific beats pretty.

Dev asks to see the optional script. You show the forty lines: hybrid search with space Atlas, acl user.groups, archived false; refuse if empty; prisoner contract; temperature 0; return text, sources, usage, id. He looks for retries and does not find them. You point at the appendix client spec: timeout 30, retries on 429 and 5xx, no retry on empty-length, kill switch. The script is v0. The spec is v1. He wanted to see if you would pretend the script was the service. You did not. Day 8 split still holds. You write the spec and the eval. He writes the connector and the filter. FDE-shaped you might pair on both. You name which hat you are wearing. He relaxes. Marcus does not care about the script and that is allowed. He cares that the empty path is a screen and that last week's chip cannot happen on the permissioned index. You show him the leak-test row in the table. He wants it in CI. Priya can have that. Put it in the minutes as a condition to proceed, not as a nice-to-have.

What you do not do in the leftover time: polish the cartoon, add a second audience, debug an install, or start a loop just to show Dev we could. Optional running code is extra credit this month. A repo without the design is a toy. A design without a repo is hireable for delivery and solutions. FDE loops will want both, later. You spend leftover minutes on the empty-gold row's wording and on the ACL paragraph, not on a Streamlit skin. Week 3 will turn this object into an operating system: governance, evals as a program, vendors, the charter. This artifact is an input, not a trophy you stop touching. When the charter asks for a thin slice, this is the slice. When vendor day asks for evals on our tasks, this is the table. Stop at 120 minutes. An 80 percent pack that exists beats a 100 percent pack you will start on Saturday. You tick. Tomorrow you are not a builder. You are back to operating. That is the job you are training for, pointed at a new object you can now draw, eval, and kill.

After Marcus drops, you write the eight minutes as bullets with clocks, because memory will lie by Thursday. Problem 45 seconds, slice 45, boxes 2 minutes, evals 90 seconds, risks 1 minute, ask 1 minute, interrupt buffer 1 minute. The sentences you actually said that worked: the job sentence, title leaks count, refuse is the demo, dates only on v1. The sentences that rambled: the hybrid merge rule, which Dev did not need. Cut it from the day-29 script. You file the pack under the capstone name, not under a clever filename you will not find in a screenshare. You send Marcus the one-sentence job, the three numbers, the leak-test, and the ask, in a mail that is shorter than this paragraph. The rest lives in the document. If he forwards only the mail, he still forwards a slice. That is the test of the talk. If he can only forward a cartoon, you failed the lab even if the pack is complete. He forwards the mail to the PMO lead with this is the slice. You did not see that in the room.

The interview probe this artifact is for will sound like Marcus, shorter. Walk me through a thin slice you would actually ship. You have eight minutes: problem, slice, boxes, evals, ACL, cost, non-goals, ask. If you cannot do that without opening a vendor site, the pack is not specific enough. Fix the sentence at the top, not the adjectives in the middle. You just did it with a burned sponsor and a skeptical architect after a week of Python, clients, chunks, RAG, leaks, and a keynote. You refused the agent. You kept the empty path. You put a name on the knowledge owner. That is enough building. You are not a staff engineer. You are dangerous in the useful way: you will not fund a chatbot of everything, and you can sit with someone who writes the code. The split from day 8 still holds. Claim the slice and the controls. Do not claim the platform. Rewrite positioning again if the lab changed it. Then close the laptop. Week 2 is a pack you can walk. Walking it was the case. Steal the clocks. Steal the refuse-is-the-demo line.

Diagram

Eight-minute walkthrough, with clocks

01

Problem · 45s

PMs cannot find decisions. Slack folklore becomes ticket policy.

02

Slice · 45s

Atlas, PMs, find-and-cite, 200 pages, read-only. Named owner.

03

Boxes · 2m

Ingest through cite. Prisoner generator. Empty path spoken, not appendix.

04

Evals + ACL + cost · 90s

Fractions, leak-test gate, 1x and 10x. No pretty good.

05

Risks + ask · 2m

ACL, stale, theatre. Two weeks to bar. No CEO demo. No agent. Then stop.

If you run long, cut architecture tourism. Keep evals, ACL, empty path, non-goals, and the ask. Silence is a closer.

Practice

The wiki-copilot design pack

90 minutes

Artifact #2. Write it so a skeptical engineer and a skeptical sponsor can both survive the read.

  1. One-sentence job. Users. Corpus in / out. Non-goals (no agents, no writes, no personal drives).
  2. Pipeline boxes with owners. Chunking rules. Hybrid search. Generator contract. Citation UX.
  3. ACL approach. Re-index SLA. Cost envelope at expected volume and 10× (day 5 math).
  4. Evals: 10+ retrieval questions, groundedness plan, refusal when empty.
  5. RAID: at least 6 rows. v1 scope vs later.
  6. Optional 20–40 lines of pseudo-Python for retrieve→generate.
  7. 8-minute talk track: problem, slice, how it works, how we'll know, risks, ask.

Done looks like: A document with those headings filled, not a mood board. Tick the capstone artifact.

Check yourself

Attempt in your notes first. Reveal is for after, not during.

  • What makes this artifact hireable?

  • What did you deliberately not build?

  • Who is the knowledge owner in your design?

  • Which two evals must appear as fractions?

  • What is v1 of the wiki copilot, mechanically?

  • What do you cut first if the eight-minute talk runs long?

Terms from this day

Job-to-be-done
The user's actual task (find the decision, draft from SOP), not the technology (chat).
Non-goal
A tempting expansion you explicitly refuse in v1 so the slice can ship.
Talk track
The timed story of the artifact for an interview or steering session.

If you have extra minutes

  • Optional: LangChain / LlamaIndex hello-world, or a raw Python retrieve+generate

    Only if you want a running demo. The design is mandatory; the repo is extra credit this month.

Your notes for day 14

Saved on this device. Use this as the start of the artifact.