← Cycles
Design · c133

Remediation Training

activecreated 2026-11-09· last activity 2026-11-13· mode: assemblage (the finding, the policy, the person and the session already exist in the data; the lesson is composed from them) → formula (the four-part model, applied per hazard).

A finding is a teaching moment. Short trainings (one to three minutes: an illustration or animation, what to do instead, a check that it landed), assigned by a policy, an operator or HQ, opened from the native app's message on the web app, and recorded in the audit log as proof of correction. Concrete, respectful, with a path to IT. Three pilots on the lab's top policies.

New in this cycle: The assignment written by the training's own file: what happened on mac-a1 under a personal account, and why it matters

Why

When qcontrol blocks or flags something, the person at the keyboard sees a disruption and nothing else. Mark Peterson asked for local feedback with a path to IT. Mark Parson's prompt goes one step further: the finding is a teaching moment, and we are the only party who sees both the violation and the person. A short training, taken at the moment and recorded in the audit log, turns a censure into a proof of correction.

The brand's register applies: name the real hazard plainly, don't dramatize, respect the reader. A safety briefing, not a reprimand. Trigger, lesson, check, record: a finding becomes a lesson and completion becomes proof in the audit log.Sketch: A training is four things, drawn 2026-11-10 in the design system; Mark's own drawings may replace it.From the policy's detection to one small event in the plane's audit log, and the three places that read it: the finding, Reports, the operator's inbox.Sketch: The record: one event, three reads, drawn 2026-11-11 for the walk with Tyler; Mark's own drawings may replace it.

Objective

Done means: the brief written and the problem cited; the four-part content model (trigger, lesson, check, record) as data; one training mocked in the lab from a real finding in the lab world; the record shown in the finding's history, the audit log and Reports; the authoring pipeline (a content collection, asset conventions, preview, publish); three pilots (secrets in prompts, personal accounts for work, unapproved MCP servers) reviewed one at a time; the hand-off to c134 (pages, record) and c131 (the notice) recorded here.

Scope

  • Design repo: cycles/c133.remediation-training/, the phase-4 lab (a training page in the web app's frame), a content collection for trainings, illustration and animation assets
  • Sister projects: ../market-analyst (the brief), ../qnative via c137 (the message), the control-plane repo via c134 (the pages and the record)
  • Out: video; languages other than English for the pilots; blocking enforcement ("no model access until taken") unless Mark rules it in

Key Changes

  • Instructions hidden in content (2026-11-12, night, for c144 S1): T-INJECT-1, written in the c142 session at Mark's word ("Write S1's") for c144's first doomsday scenario. See review-8-inject.md.
    • The world: one seed finding, F-H (Jordan's Claude Code read a hidden comment in a GitHub issue through GitHub MCP; P-PROMPT-INSPECT, Observed), and its session S-7, marked c133. c144's theatre check, the tours walk and the metrics check still pass.
    • The training: four steps, four questions and a Library section; slots keyed by policy (POLICY_SLOTS) because the finding names an MCP server as P-MCP's do; three new scenes. Voice: zero violations. Taken end to end and from the library.
    • The record: twelve captures under the thread "Instructions hidden in content (T-INJECT-1)…" (scripts/shot-programs/c133-inject.json), and five calls in the review note.
  • The four trainings c144's wave 1 wanted (2026-11-13): written in the c142 session at Mark's word ("Yes, write them"). See review-9-wave1.md.
    • The trainings:
      • Approved model providers (T-PROVIDERS-1) for S5, on F-F and TH-S5-b2-1.
      • Skills that update themselves (T-PROVENANCE-1) for S3 and S2.
      • Ask before an agent sends or publishes (T-APPROVAL-1) for S4, S1 and S3.
      • Unattended agents and their spend (T-SPEND-1) for S6.
    • The world: no addition. P-PROVENANCE and P-SPEND are Off in the base world, and P-TOOL-APPROVAL has no finding there, so three of the four are met in the simulation.
    • The slots: four policies join POLICY_SLOTS, and the configuration-only slots become POLICY_CONFIG_SLOTS, read by the library.
    • The scenes: eleven new ones, and the catalogue holds 35.
    • Checked:
      • Voice: zero violations.
      • 13 filled readings with nothing unfilled.
      • Each training taken end to end, and all four read in full from the library.
    • Fixed on the way:
      • ownerOf skips theatre's Theatre actor, so a training in the simulation names IT.
      • The preview page's two template-only imports are bound in its script.
    • The record: fifteen captures (scripts/shot-programs/c133-wave1.json) and four calls in the review note.
  • Review 8 and review 9 ruled (2026-11-13): Mark walked the nine calls one at a time in the c142 session. They are recorded as D57–D63 (plan.md), and both notes carry a Ruled section.
    • D57: F-H stays.
    • D58: slots keyed by policy are the pattern.
    • D59: the injection training's approval stays general.
    • D60: a seed finding where the policy is on and has none.
    • D61: the approval training's title.
    • D62: advice stays general for now.
    • D63: each training is bundled in the native app with the scenario that opens it.

    Review 8's calls 4 and 5 were closed as already done: T-INJECT-1 is bundled with the native S1, and a link that carries the simulation opens its finding.
    • D60 built the same day: F-I, Hana's Claude Code merging pull request #517 through GitHub MCP with approval set to never, Observed, and its session S-8, in governance-fixture.ts and marked c133.
      • The findings list holds 25.
      • theatre-check 190/0, tours-walk 455/0, c123 metrics 49.
      • The approval training was taken end to end on F-I.
      • Two captures (scripts/shot-programs/c133-approval-seed.json).
  • Into the native app, and a demo's polish (2026-11-12, evening, from the c143 session on Mark's word):
    • The trainings page (/pages/phase4/trainings): each training's title opens its prototype, and each training's section gains "Open the prototype" (the mock on its policy's first finding; a topic's library reading) and "On its own, from the library" (8e23a69852).
    • The quiz wording: Mark found some questions hard to follow. All sixteen, and the MCP library's Observe question, were reworded: the situation first, then one question; Observe and Enforce named as modes; parallel answer options. Ids, steps, slots and right answers unchanged; the voice check passes on all four (6b240395ff).
    • The native app (qnative c9 Trainings, answering D5): the four published trainings are bundled from /api/trainings and filled with the lab's values, three training assignments join E7 in the inbox, and Start training opens the training built to the lab mock: the five stops, the lesson with its scene, the check on one sheet, the result with the record, the retake, Recorded. The scenes are this lab's own, captured per step in light and dark by scripts/export-training-scenes.mjs (519f9d3dd0, 614371359b). Owed there: the motion and native drawings of the scenes.
  • Phase 7 review (2026-11-12): Mark took review-7.md's five defaults ("I've read and agree with your defaults, go with those"), recorded as D52–D56:
    • topic ids are named for what they cover (T-MODES-1);
    • a topic may cover several concepts where one doesn't stand alone;
    • "a record, not a verdict" stays;
    • the claim that some policies only record stays, to check with Tyler;
    • the operator's send of a topic is c134's.

    No code changed. handoff.md § 7 gained the Tyler check.
  • Phase 6 review and Phase 7 (2026-11-12): Mark walked review-6.md's five calls in the c142 session and ruled them as D45–D51.
    • D45–D48: as proposed: the # Library section, v1 kept, the Compliance section only, the world's clock.
    • D49–D51: a training answers a policy or a topic; the seed topics are all 18 of the guide's concepts; the library, an operator and later the guide offer them.
    • Phase 7 built:
      • the model and parser for a topic (policyId optional beside topic, exactly one);
      • Observe and Enforce (T-MODES-1, en/observe-and-enforce.md, 2 minutes), voice-checked with zero violations, with four new scenes (policy-modes, mode-observe, mode-enforce, mode-ask);
      • the library, the record card, the preview page and its gallery, which now has 16 scenes;
      • the Compliance count, and the docs (authoring.md, publish.md, handoff.md § 7, the /training skill).
    • The record: five captures under the thread "Phase 7 · …" (scripts/shot-programs/c133-p7.json), and five calls in review-7.md.
  • Phase 6 (2026-11-12): built in the c142 session the same day Mark ruled D38–D44, at his word ("Do this task here"). See review-6.md.
    • D38: an optional # Library section in each file, entries in the grammar of the step or question they replace, by id (parse.ts, types.ts library, library.ts, voice.ts). Library words were written for the three pilots and voice-checked, zero violations. All three now read 4 of 4 steps and 4 of 4 questions on their own (Phase 5: 3/3, 3/3 and 2/3), and every content hash moved, still v1.
    • D39: the self-taken record on the person's finding: a line on the training strip, with the assignment left open. The lab knob ?took= seeds one.
    • D42: "Trainings taken on their own" in the Compliance report beside Enforcement Posture: counts only, read as a strength, not in Corrections.
    • The docs: authoring.md, publish.md, handoff.md and the /training skill updated.
    • The record: five captures under the thread "Phase 6 · …" (scripts/shot-programs/c133-p6.json), and five calls in review-6.md, including the topic-trainings proposal (clarifying question 6).
  • Phase 5 review (2026-11-12): Mark walked review-5.md's seven calls in the c142 session and ruled them as D38–D44 (plan.md; review-5.md § Ruled). Two calls went against the proposal:
    • call 1: each file gets its own words for the library (D38), changing the parser, the format, the skill and the hash;
    • call 5: self-taken completions count in Posture as a strength (D42). The other five went as proposed. On call 3 Mark added that a high self-taken count shows a strong posture, and that we can offer trainings on areas that confuse people, categorized as self. That's clarifying question 6, trainings on a topic rather than a finding. Phase 6 builds D38, D39 and D42 once kicked off.
  • the brief, found merged (2026-11-12): asked on c142's second c133 tour how much is ready to merge, the tour checked market-analyst. Phase 0's brief merged on 2026-11-11 at 19:49Z as briefs/enforcement-without-local-context.md (qpoint-io/market-analysis#15). handoff.md, the story's pickup and its "brief" change still said in flight; all three are corrected. The cycle now waits on Mark's seven Phase 5 calls, Tyler's D22–D27, c134's frame and copy step, c121's policy fields and Peterson.
  • scene gallery, from c142's first cycle tour (2026-11-12): Mark asked where the illustrations come from, and no page showed them together. The Scenes section of /pages/phase4/trainings is now a gallery instead of a table. All twelve scenes are drawn there, each on the first finding of a training that uses it, with that step's caption as the person reads it and a link to the step in the mock (?findingId=…&at=lesson&step=n). The gallery showed sanctioned-list overflowing its figure by 156 px: its three columns switched on at the viewport's md breakpoint, not the figure's width. The same overflow hit the lesson itself at viewports from 768 px to about 1,100 px, and at 1440 by about 55 px. It now wraps by the figure's width: the list, then "reviewed" with the server. Checked at 1440 and 375: twelve drawn, none overflowing, no console errors. Recorded in c142. The same day Mark named Rob Genova's blog drawings as the inspiration for the scenes (see Lineage). They're credited in authoring.md § Scenes, under the gallery's heading, and in the story.
  • Phase 5 (2026-11-12): the hand-off and the library, by an execution session, in three commits. First, Phase 4's two small things: Corrections in Reports read "0 in this window" for a record written at the cutoff, because the lab's two clocks differ (the reports' data ends on 29 October, the lab writes the record at the world's clock, 1 November); a window that runs to the reports' last day of data now runs to the cutoff (app/data/trainings/reports.ts), and the section's source line names training.completed.* (D27). Second, D34: T-MCP-1's choices reordered so the right one sits third, first, second, third, no word changed, so v1 stays and the content hash moves to ed4d2679c3cd… (D31); voice check zero violations; two captures under the thread "Phase 5 · T-MCP-1's choices reordered" (scripts/shot-programs/c133-p5-reorder.json, new file names, Phase 1's kept). Third, the hand-off: handoff.md, for c134 (the training page from the lab mock, the JSON copied in at release per D29, the record as audit rows per event-shape.md §8, the history row and the Corrections block per D16, D19, D20, Corrections in Reports per D17, D18, who may read what per D10, the library) and for c131 and qnative c4 (the training-assignment card with start-training, the web app opened signed in through the plane connection, training.completed.* ending the message, a table of whose is what; c4 already has the types, and its Start training answers "not on this build yet"). The library, D2's "a library for the person later": /pages/phase4/mock/training-library in the lab's qdash shell lists the three trainings from the collection with their minutes, policy, what each covers and the person's record (Assigned with Start to the training on their finding, Recorded with Take it again, No record with Take it on your own). A training taken on its own is filled from the reader and the policy, never from a finding (app/data/trainings/library.ts; slots.ts refactored to share the policy-level helpers, the 21 pages it touches rendering identically before and after); the steps and questions that tell a finding are left out and said so (3 of 4 steps for MCP and accounts, 2 of 4 for secrets); the record is the same record with no finding and no assigner, one audit row training.completed.self (types.ts, RecordCard.vue, Progress.vue and AuditLog.vue learned it). Taken end to end in the browser pane (a wrong answer, the retake keeping two, the pass, Finish, the list reading Recorded on your own); no console errors; every new sentence through check-brand-voice, zero violations. Registered under c133-training, on the phase-4 index. Five captures under the thread "Phase 5 · the training library" (scripts/shot-programs/c133-p5-library.json). The review stop: review-5.md, seven calls (library words; the self-taken record and D24; the event's name; what the record names; self-taken completions in Reports; the contact line on its own; the examples the library reads).
  • Phases 3–4 review (2026-11-12): Mark walked the ten calls of review-3.md, review-4-accounts.md and review-4-secrets.md with the design session and took all ten as proposed (D28–D37): the right answers stay in the published data; the publish step's JSON goes into the plane at release; English with a line when a language has no file; the version moves on meaning; the operator's reason shown as written; the self-report kept and asked of Peterson; T-MCP-1's answers reordered in the file; F-G kept in the base world; the secrets lesson names the check that is off; rotation stays outside the record. An execution session takes the two small things Phase 4 found, D34's reorder, then Phase 5.
  • stage 1 (2026-11-09): prompt and plan written from c130's split. CYCLE.md written before kick-off at Mark's request (c130 clarifying question 6). The same day: the candidate problem promoted in market-analyst (problem:enforcement-without-local-context), the gate moved from "the shape's messaging section" to c137's bones, and Mark's note on hard-hat training and Metamythic recorded as a note only.
  • 2026-11-09, later: Mark confirmed the defaults and ruled D9: a training can in theory block access, by default it does not. Committed the same day.
  • kick-off (2026-11-11): Mark ruled Phase 1 starts now. The gate's first half holds (c137's bones, 2026-11-09, and its D9–D13 ruled this day); the second, the brief, is in flight: Phase 0 runs as a cloud session in market-analyst against problem:enforcement-without-local-context and lands as a PR there. Phase 1 does not read the brief's text, so it did not wait.
  • Phase 1 (2026-11-11): the content model as data in app/data/trainings/types.ts: a training is a lesson (three to five steps, each with an illustration named as a scene), a check (three to five questions with one right choice, the step each verifies and why the right answer is right), a contact (R5) and the record completion writes (R4: training and version, finding, policy, person and endpoint, the final result, the time, who assigned it, the assignment it closes; not how long, not how many tries, not which answers); the pass rule all right with retake (D3) and the six stages. The first pilot (D6), unapproved-mcp-servers.ts, T-MCP-1, written for a real finding in the lab world: F-A, Vanta MCP from Claude Code on mac-a1 under Unsanctioned MCP server in use, Observed; four lesson steps (what happened on this machine, what an MCP server can do, why there is a sanctioned list, what to do instead), four questions on the idea; every sentence voice-checked with the brand MCP, zero violations. index.ts composes the training with the finding: the slots filled from the world (the date and time, the agent, the device, the team, the server, the session, qcontrol's evidence, the outcome, the policy's sanctioned list from its configuration, the exception that lets GRC use the server quoted as the operator wrote it, the policy's owner from the last change), the assignment built as c137's training-assignment in three sentences (D8), the grade, the record and its audit rows; D2's training field on the policy held as POLICY_TRAININGS until c121's model takes it. The mock, in the lab's qdash shell: /pages/phase4/mock/training, reached from S1's new training strip (the policy's assignment, Assigned or Recorded, the one path) or from the assignment card, through the lesson (the scenes drawn from the pawns and the sketch kit, one flow animated, still under reduced motion, D7), the check, the result with the record shown before Finish writes it, the retake that keeps what was right and names the step to reread, and the record: one row in the finding's history (training-completed, a new event kind that leaves the status alone, D9) and an audit log mock with message.sent, training.completed, message.done. ?at= opens any stage; a policy without a training says so and names the pilots. useTrainingMock keeps the visit's progress; the strip shows only what the plane would know (R4). Registered under the collapse c133-training and a Trainings section on the phase-4 index. Nine captures under the thread "Phase 1 · the content model and one training" (scripts/shot-programs/c133-training.json, subjects per state). The review stop: review-1.md, with the calls on the record's HR and legal sensitivity (question 2), languages (question 3), what the training needs from the finding's data, and five smaller ones.
  • Phase 1 review (2026-11-11, evening): Mark walked review-1.md at the c130 G1 session and ruled the seven calls that were his: D10 the record's audience (the name on the finding and in the audit log, counts only in Reports; the personnel-data question goes to Peterson first), D11 languages (English for the pilots, lang per file with Phase 3, operator text never translated), D12 the exception's reason shown as written, D13 nothing learned between assignment and record (confirmed as the product), D14 the Finish step kept, D15 the retake keeps what was right, D16 the history row now and a Corrections block once Tyler agrees the event shape. Call 8, the person's frame, is c134's. shape.md accepted at the same session: c133 formally open. Recorded in plan.md (D10–D16, questions 2 and 3 closed) and the story module.
  • Phase 2 (2026-11-11, night): the record's homes, under D10 and D16. event-shape.md: training.completed in qevents' pattern (a tagged enum, type and payload), the fields the record keeps and the ones R4 forbids, the audit row beside c137's message.sent and message.done, the four projections (the history row today, the Corrections block once agreed, Reports' count, the operator's inbox), who may read it, and six questions for Tyler (where it lives, whose contract, assignments from message.sent or a training.assigned, idempotency, version or hash, operator and HQ assignment). Reports: c128's Findings report gains a Corrections section between Blocked and observed and Data protection, counts only as of the cutoff (assigned, completed, waiting, per training; app/data/trainings/reports.ts, TrainingReportCorrections), staged with its source named. The finding: a Corrections block (TrainingCorrections: the record as the audit log keeps it, the status unchanged, the three audit rows) behind the slot variant ?v.corrections=block; the default keeps the history row as the record's home (D16). Three captures under the thread "Phase 2 · the record" (scripts/shot-programs/c133-record.json). The review stop: review-2.md, with Tyler's six questions and four calls for Mark.
  • Phase 2 review (2026-11-11, night): Mark took the four calls as proposed: D17 Corrections as a state as of the cutoff, D18 assigned on detection in the count, D19 the block under History before Details, D20 the block as default once Tyler agrees the shape. D21: published trainings served by the design API (/api/trainings, /api/trainings/<id>), the content collection the source. Phases 3 and 4 handed to an execution session the same night; this session signs off at the review stop.
  • Tyler's questions, assumed (2026-11-11, night): Mark walked event-shape.md §6 and set assumptions to validate with Tyler, recorded as D22–D27 and in §8: the audit log as the store; the existing event pattern as the base with the plane's richer record object consuming the small event; assignment and completion both audit rows, a completion associated with the person's earlier findings under the policy to show and drive remediation; every completion a row, one grouped object (his sketch: type, completed, the training's id and name, proof of understanding); version and a content hash; separate completion events per assigner. The hash and the record's fields went to the execution session for the publish step.
  • Tyler walk page (2026-11-11): the record's event flow drawn as a second sketch, "The record: one event, three reads" at /cycles/design/sketches/c133-record (app/pages/cycles/design/sketches/c133-record.vue): the flow from the policy's detection to the person and the training page, the one small event in qevents' pattern (training.completed.policy, .operator, .hq, D27) consumed by the plane's record object (D23) and written as audit rows with the audit log as the store (D22, D25), the three reads (the finding's history row today and the Corrections block once agreed, Reports' counts, the operator's inbox), the association with the person's earlier findings under the policy (D24), the notes on what R4 keeps out and on version and hash (D26), and the orange note for what stays Tyler's. Registered in program-sketches.ts and the sketches shot program, to be captured as c133-sketch-record.png. The walk itself: tyler-walk.md, ten minutes, one paragraph per assumption D22–D27 with the one question each needs answered, then the four items that are Tyler's alone. The story module gains the outcome record-sketch.
  • Phase 3 (2026-11-11, night): the authoring pipeline (D4, D21), built by the execution session. The collection: one markdown file per training and language, content/trainings/<lang>/<slug>.md (D11), frontmatter for the training's fields and the body for its words (# Assignment with the message's first two sentences, # Lesson as ## steps with an id:/scene:/alt: block, # Check as ## questions with id:/step:/explain: and the choices as a task list); content.config.ts gains the trainings collection. One parser, app/data/trainings/parse.ts, for both readers: the lab reads the files at build time (index.ts, which now derives TRAININGS and POLICY_TRAININGS from them) and the API reads the collection's raw text; a file with problems is withheld from both. The first pilot moved into content/trainings/en/unapproved-mcp-servers.md with no word changed (the parsed object equals Phase 1's field for field; thirteen rendered mock pages compared identical); its assignment sentences moved out of code into the file. Slots moved to slots.ts, keyed by the finding's kind. Scenes stay components, one file each in components/training/scenes/, catalogued in data/trainings/scenes.ts (the decision and the asset convention in authoring.md §Scenes). The preview page /pages/phase4/trainings (registered under c133-training, on the phase-4 index's Trainings section): per training the policy, minutes, steps, questions, lang, version, hash, the brand voice rules run live on the file and on every finding of its policy (voice.ts, mirrored from the MCP), the slots, the scenes, links to open it on each finding. The publish step: server/api/trainings/index.get.ts and [id].get.ts (server/data/trainings.ts), shape in publish.md. Mark's D25–D27, ruled while it was built: the record names the training's title, version and content hash (one SHA-256 for the API and the lab, hash.ts), and the lab's audit log writes training.completed.policy. The record page's Reports line now links the Corrections section. The /training skill (.claude/skills/training/SKILL.md) carries the loop for a new training. Two captures under the thread "Phase 3 · the authoring pipeline" (scripts/shot-programs/c133-pipeline.json). The review note: review-3.md, with four calls (the right answers in the published data, how the apps reach the API behind Access, a language with no file, when the version moves) and an incident owned: the preview page's first draft broke every route on the shared dev server for about 25 minutes.
  • Phase 4, pilot 2 (2026-11-11, night): Personal accounts for work, T-ACCT-1, through the /training skill, for F-C (User A's Claude Code session on mac-a1 under usera@gmail.com, under Personal account is in use, Observed; Dana's exception Off for User A until 31 October ended and the finding reopened on 1 November). No world addition. app/data/trainings/en/personal-accounts-for-work.md: four steps (what happened, with the policy that can only record and the exception quoted as written, D12; where the work goes; how to tell which account a session uses; what to do instead), four questions with the right choices in different places. slots.ts gains the kind account (account, outcome read from the policy's enforceability, blocked, the person's own exception live or ended). Four scenes (account-session, account-boundary, account-check, account-switch), two redrawn in two rows after the first captures wrapped. Every sentence and scene label through check-brand-voice: zero violations. Taken end to end in the browser pane from F-C's strip (a wrong answer, the retake keeping three, the pass, Finish, the history row; the finding stays open, D9); no console errors on fresh loads. A correction to Phase 3 in the same commit: the training files moved from content/trainings/ to app/data/trainings/<lang>/, because Nuxt Content hides content/ from Vite's watcher and the lab never saw an edit; the collection reads the new folder through its cwd source. Eleven captures under the thread "Phase 4 · pilot 2, Personal accounts for work" (scripts/shot-programs/c133-p4-accounts.json). The review note: review-4-accounts.md, three calls (the operator's third-person reason shown to the person, the self-report in step 4, the right answer's position in T-MCP-1).
  • Phase 4, pilot 3 (2026-11-11, night): Secrets in prompts, T-SECRETS-1, through the /training skill. The lab world had no finding under Credentials must not be sent to a model, so governance-fixture.ts gained one, marked c133: F-G, an AWS access key (the policy's first detector) in a prompt from Priya's Cursor on mac-eng-07, from a pasted .env file, critical, Observed (the policy observes organisation-wide), with its session S-6; the governance pages (24 registry routes), the seven report kinds, the findings list (now 23) and the policy checked with no console errors. app/data/trainings/en/secrets-in-prompts.md: four steps (what happened; why a key in a prompt is a key disclosed; what to do about this key, revoke it today and tell IT; what to do instead, a reference not the secret, with the policy's detectors and the one that is off read from its configuration) and four questions. slots.ts gains the kind dataClass (the class with its article, the detectors, the check that is off, outcome-dependent advice). Four scenes (secret-prompt, secret-copies, secret-rotate, secret-reference); the catalogue holds twelve. Every sentence and scene label through check-brand-voice: zero violations. Taken end to end from F-G's strip, checked in dark mode. /api/trainings serves all three; the preview page lists them with nothing withheld; Corrections in Reports counts five findings across the three trainings. Thirteen captures under the thread "Phase 4 · pilot 3, Secrets in prompts" (scripts/shot-programs/c133-p4-secrets.json). The review note: review-4-secrets.md, three calls of its own (keep F-G in the base world, name the check that is off, rotation outside the record), two small things in Phase 2's lines left for later, and all ten open calls of Phases 3 and 4 collected. One knock-on outside c133: integrations-fixture.ts hardcodes 22 findings.
  • sketch and story (2026-11-10): the sketch "A training is four things" at /cycles/design/sketches/c133-training (app/pages/cycles/design/sketches/c133-training.vue: who assigns, the four parts as a strip, the assignment as a c137 message, the audit log as the record, D9, the three pilots), to be captured as c133-sketch-training.png for the hero; the story module app/data/stories/c133.ts (D1–D9 as decisions, the problem, the pickup); the image under Why and §The shape added here.
  • re-homed by c147 (2026-11-13): c137 App Messaging closed into design c147 (Findings, a Common Tongue), so the assignment no longer travels as a c137 training-assignment message: it is a training-assigned event on the finding (from: plane), and completion stays the training-completed event. event-shape.md §1 steps 1 and 3 and §2's message_id read against c147 finding-shape.md §9; message_id becomes assignment_event_id. Nothing else changes here; for the native V1 the training ships as the event and the record only (c147 Q5).
  • D9 revised by c147 (2026-11-13): Mark ruled at c147 review stop 3 (6a) that a finished training closes its finding when a policy assigned it: the person's training-completed record still moves nothing, and the policy then resolves the finding ("Resolved: training completed", a resolve from the plane with origin system); HQ can reopen it. Trainings an operator or HQ assigned keep D9 as it stands. The lab's model (foldFinding) doesn't close on completion yet; it's in c147 qnative-brief.md and waits on this cycle's lab for the prototype.

Outcome

Not started.

The shape

Documents: the plan · Mark's prompt · the Phase 1 review stop · the event shape, for Tyler · the Phase 2 review stop · the walk for Tyler · authoring a training · what the apps read · the Phase 3 review note · pilot 2, personal accounts · pilot 3, secrets in prompts, and every open call · the hand-off to c134 and c131 · the Phase 5 review stop · instructions hidden in content, for c144 S1 · the four trainings for c144's wave 1 · the lab: the trainings · the library · personal accounts on F-C · secrets in prompts on F-G · the published JSON · the training on F-A · the finding with its training · the Findings report with Corrections · the phase-4 index

The problem. When qcontrol blocks or flags something, the person at the keyboard sees a disruption and nothing else, and the operator sees a finding with no sign the person understood. Mark Peterson asked for local feedback with a path to IT (problem:enforcement-without-local-context); we are the only party who sees both the violation and the person.

The core idea. The finding is a teaching moment: a short lesson about this hazard, a check that it landed, and completion written to the audit log, so a censure becomes proof of correction. Short, concrete, respectful; a safety briefing, not a reprimand.

The pieces.

  • Trigger: a finding, a policy's enforcement, a censure or an assignment; a training-assignment message with a start-training action (c137, D8), shown in the native app's inbox and linked from the web app.
  • Lesson: one to three minutes, an illustration or animation, what to do instead; a page on the web app (c134, D1), authored as a content collection on the design site (D4), delivered to the native app as content modules (D5).
  • Check: one to three questions that verify the concept; the same page; all right to pass, retake allowed (D3).
  • Record: completion, the check's final result and the finding it answers; the audit log, the finding's history and Reports (c128); training-completed back through c137.
  • Who assigns: a policy's training field first, an operator from a finding second, HQ's notices third (D2); a library for the person later.
  • Three pilots (D6): secrets in prompts, personal accounts for work, unapproved MCP servers; illustrations and short animations, no video (D7).

The pattern we follow. A training is four things: trigger plus protocol. The trigger is a message (c137's one schema, no channel of its own); the lesson, the check and the record are the protocol every training keeps, so a new hazard is content, not a new flow. Composed from what the lab already has (the finding, the policy, the person, the session), then applied per hazard.

What stays open. The brief in market-analyst (in flight); the record's event shape, with Tyler (Phase 2); whether a completed training counts as personnel data in the organisations Peterson knows (the first question for him, D10); where the person's page lives (c134). Settled on 2026-11-11: who sees the record (D10), languages (D11), the operator's words as written (D12), nothing between assignment and record (D13), Finish (D14), the retake (D15), the record's home (D16). Blocking stays off by default (D9).

Visual record

118 captures — heroes, page slices, and full-page renders. Click to view.

F-I, the seed finding for Ask before an agent sends or publishes (Mark's ruling at the review-9 walk)

2026-11-13· 2 captureslatest
F-I, the lab world's one finding under Consequential tool calls require approval (added 2026-11-13, marked c133): github.merge_pull_request ran without approval, #517 into main; Observed; the strip offers Ask before an agent sends or publishes, assigned to Hana on mac-eng-05.
F-I, the lab world's one finding under Consequential tool calls require approval (added 2026-11-13, marked c133): github.merge_pull_request ran without approval, #517 into main; Observed; the strip offers Ask before an agent sends or publishes, assigned to Hana on mac-eng-05. open page →history · 7 moments →
Step 1 of 4 on F-I: Hana's Claude Code made a call through GitHub MCP during release branch cleanup; nothing was held, as Engineering observes.
Step 1 of 4 on F-I: Hana's Claude Code made a call through GitHub MCP during release branch cleanup; nothing was held, as Engineering observes. open page →history · 6 moments →

The four trainings c144's wave 1 wanted: Approved model providers, Skills that update themselves, Ask before an agent sends or publishes, Unattended agents and their spend

2026-11-13· 16 captures
F-F, Priya's Cursor on priya-x1 sending a request to deepseek.com, blocked under Approved model providers only; the strip offers Approved model providers (T-PROVIDERS-1), assigned to Priya.
F-F, Priya's Cursor on priya-x1 sending a request to deepseek.com, blocked under Approved model providers only; the strip offers Approved model providers (T-PROVIDERS-1), assigned to Priya. open page →history · 7 moments →
In the simulation, S5 Card numbers to a stranger: User A's ticket went to api.refundhelper.example; Observed on Team A, so the provider received the prompt.
In the simulation, S5 Card numbers to a stranger: User A's ticket went to api.refundhelper.example; Observed on Team A, so the provider received the prompt. open page →history · 6 moments →
The collection with nine trainings published, nothing withheld: the four c144's wave 1 wanted join; each passes the voice check, three with no finding in the base world, and the scene catalogue holds 35 drawings.
The collection with nine trainings published, nothing withheld: the four c144's wave 1 wanted join; each passes the voice check, three with no finding in the base world, and the scene catalogue holds 35 drawings. open page →history · 4 moments →
Step 1 of 4, in the simulation S4 The public link: Jordan's Claude Code made github.create_gist, public: true, through GitHub MCP; it ran without anyone approving it.
Step 1 of 4, in the simulation S4 The public link: Jordan's Claude Code made github.create_gist, public: true, through GitHub MCP; it ran without anyone approving it. open page →history · 6 moments →
Step 1 of 4, in the simulation S3 The secrets stealer: Kofi's Claude Code loaded repo-tidy 1.5; the team reviewed and pinned 1.4; recorded, as the check cannot stop a load.
Step 1 of 4, in the simulation S3 The secrets stealer: Kofi's Claude Code loaded repo-tidy 1.5; the team reviewed and pinned 1.4; recorded, as the check cannot stop a load. open page →history · 6 moments →
Step 1 of 4: the request to deepseek.com, not on the approved list, which never received the prompt: it was blocked before it left priya-x1.
Step 1 of 4: the request to deepseek.com, not on the approved list, which never received the prompt: it was blocked before it left priya-x1. open page →history · 6 moments →
Step 1 of 4, in the simulation S6 The runaway loop: Ravi's unattended Claude Code passed the $10 per-person ceiling ($14, 1,200 turns); recorded, as the ceiling cannot pause a session.
Step 1 of 4, in the simulation S6 The runaway loop: Ravi's unattended Claude Code passed the $10 per-person ceiling ($14, 1,200 turns); recorded, as the ceiling cannot pause a session. open page →history · 6 moments →
Step 2, Which calls should wait for you: reading, searching and drafting stay on the machine; sending, posting, publishing, deleting and a command that reaches out act on the world.
Step 2, Which calls should wait for you: reading, searching and drafting stay on the machine; sending, posting, publishing, deleting and a command that reaches out act on the world. open page →history · 6 moments →
Step 2, Why a new version matters: the next version does what its publisher wrote, with the agent's access to files, commands and services.
Step 2, Why a new version matters: the next version does what its publisher wrote, with the agent's access to files, commands and services. open page →history · 6 moments →
Step 2, Where a prompt goes: the prompt carries what the agent put in it; anthropic.com and openai.com work under terms the organisation agreed to, deepseek.com under terms nobody here has read.
Step 2, Where a prompt goes: the prompt carries what the agent put in it; anthropic.com and openai.com work under terms the organisation agreed to, deepseek.com under terms nobody here has read. open page →history · 6 moments →
Step 2, How an agent on its own runs up a bill: a step fails, the agent tries again, and each try is a paid turn with the model.
Step 2, How an agent on its own runs up a bill: a step fails, the agent tries again, and each try is a paid turn with the model. open page →history · 6 moments →
Step 4, What to do instead: keep the agent asking, say how in the request, read where a call goes and who can open it before approving it.
Step 4, What to do instead: keep the agent asking, say how in the request, read where a call goes and who can open it before approving it. open page →history · 6 moments →
Step 4, What to do instead: install at a fixed version, ask IT to review and pin a new one, and replace keys a version nobody reviewed has read.
Step 4, What to do instead: install at a fixed version, ask IT to review and pin a new one, and replace keys a version nobody reviewed has read. open page →history · 6 moments →
Step 4, What to do instead: use the approved providers, check what the agent is set to use, ask IT before sending a new one anything, and send nothing to a provider that asks for more.
Step 4, What to do instead: use the approved providers, check what the agent is set to use, ask IT before sending a new one anything, and send nothing to a provider that asks for more. open page →history · 6 moments →
Step 4, What to do instead: before leaving it, give the agent a limit (a few tries, then stop and report; a maximum number of turns), and stop a loop you find.
Step 4, What to do instead: before leaving it, give the agent a limit (a few tries, then stop and report; a maximum number of turns), and stop a loop you find. open page →history · 6 moments →
c133 full
open page →history · 4 moments →

Instructions hidden in content (T-INJECT-1), c144 S1's training, on F-H (the seed finding added for it), through the /training skill

2026-11-12· 16 captures
F-H, the lab world's one finding under Prompts are inspected for injection and leakage (added 2026-11-12 for c144 S1, marked c133): Instruction override in issue #482, read through GitHub MCP (score 0.91), Observed, as the policy can only observe; the strip offers Instructions hidden in content, assigned to Jordan on mac-eng-11.
F-H, the lab world's one finding under Prompts are inspected for injection and leakage (added 2026-11-12 for c144 S1, marked c133): Instruction override in issue #482, read through GitHub MCP (score 0.91), Observed, as the policy can only observe; the strip offers Instructions hidden in content, assigned to Jordan on mac-eng-11. open page →history · 7 moments →
Assigned: the message for F-H in three sentences, the first two from the file (content read through GitHub MCP held instructions written for the agent, recorded, not blocked; how hidden text can steer an agent, and what stops it).
Assigned: the message for F-H in three sentences, the first two from the file (content read through GitHub MCP held instructions written for the agent, recorded, not blocked; how hidden text can steer an agent, and what stops it). open page →history · 4 moments →
The check, unanswered: why an agent might follow a hidden line, what prompt inspection stopped, a step you did not ask for, and the setting that leaves a hidden instruction the least room (R3); the right choices in different places.
The check, unanswered: why an agent might follow a hidden line, what prompt inspection stopped, a step you did not ask for, and the setting that leaves a hidden instruction the least room (R3); the right choices in different places. open page →history · 5 moments →
Retake (D15): 3 of 4 right; the missed question points back to its step; nothing is recorded.
Retake (D15): 3 of 4 right; the missed question points back to its step; nothing is recorded. open page →history · 4 moments →
All 4 right: the right choice and why for each, and the record as it will be written: Instructions hidden in content, T-INJECT-1 v1 and its hash, F-H under P-PROMPT-INSPECT, Jordan on mac-eng-11.
All 4 right: the right choice and why for each, and the record as it will be written: Instructions hidden in content, T-INJECT-1 v1 and its hash, F-H under P-PROMPT-INSPECT, Jordan on mac-eng-11. open page →history · 5 moments →
F-H after completion: the strip reads Recorded, passed 4 of 4; History has detected and training completed → open.
F-H after completion: the strip reads Recorded, passed 4 of 4; History has detected and training completed → open. open page →history · 7 moments →
The collection with five trainings published: Instructions hidden in content (T-INJECT-1, c144 S1's) joins the three pilots and Observe and Enforce; the voice check passes on every finding of its policy, and the scene catalogue holds nineteen scenes.
The collection with five trainings published: Instructions hidden in content (T-INJECT-1, c144 S1's) joins the three pilots and Observe and Enforce; the voice check passes on every finding of its policy, and the scene catalogue holds nineteen scenes. open page →history · 4 moments →
Step 1 of 4, What happened on mac-eng-11: content from outside, read through GitHub MCP, carries a hidden line written for the agent (the flow animated); the session, qcontrol's evidence, and why nothing was blocked: prompt inspection records and cannot stop the agent.
Step 1 of 4, What happened on mac-eng-11: content from outside, read through GitHub MCP, carries a hidden line written for the agent (the flow animated); the session, qcontrol's evidence, and why nothing was blocked: prompt inspection records and cannot stop the agent. open page →history · 6 moments →
On its own, from the library: step 1 in the library's words (What happens when an agent reads hidden instructions); all four steps and four questions read, nothing left out.
On its own, from the library: step 1 in the library's words (What happens when an agent reads hidden instructions); all four steps and four questions read, nothing left out. open page →history · 3 moments →
Step 2, Why an agent follows text it reads: your request and the email's hidden line sit together in what the agent reads, with nothing to tell them apart; text can be hidden from you and still reach it.
Step 2, Why an agent follows text it reads: your request and the email's hidden line sit together in what the agent reads, with nothing to tell them apart; text can be hidden from you and still reach it. open page →history · 6 moments →
Step 3, What Qpoint does about it: prompt inspection checks for the heuristics that are on, read from the policy's configuration, and says the encoded payload check is off; it records, and an approval stops the next step.
Step 3, What Qpoint does about it: prompt inspection checks for the heuristics that are on, read from the policy's configuration, and says the encoded payload check is off; it records, and an approval stops the next step. open page →history · 6 moments →
Step 4, What to do instead (R2): treat what an agent reads from outside as material; keep it asking before it sends, posts or deletes; decline a step you did not ask for and tell IT.
Step 4, What to do instead (R2): treat what an agent reads from outside as material; keep it asking before it sends, posts or deletes; decline a step you did not ask for and tell IT. open page →history · 6 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 7 moments →
c133 full
open page →history · 4 moments →

Phase 7 · the first training on a topic (D49): Observe and Enforce, in the library, taken on its own, and counted beside Enforcement Posture

2026-11-12· 7 captures
The library as User A sees it, now four trainings: Observe and Enforce, 2 minutes, a topic (no policy, no finding; Take it on your own), beside the three that answer a policy.
The library as User A sees it, now four trainings: Observe and Enforce, 2 minutes, a topic (no policy, no finding; Take it on your own), beside the three that answer a policy. open page →history · 3 moments →
All 4 right, and the record as it will be written: training.completed.self, T-MODES-1 v1 with its hash, no finding; the topic is observe-and-enforce; User A on mac-a1. Questions about this training? Ask IT.
All 4 right, and the record as it will be written: training.completed.self, T-MODES-1 v1 with its hash, no finding; the topic is observe-and-enforce; User A on mac-a1. Questions about this training? Ask IT. open page →
Trainings taken on their own: 2, by 1 person; Observe and Enforce 1 and Secrets in prompts 1, a topic and a policy's training counted the same way, read as a strength.
Trainings taken on their own: 2, by 1 person; Observe and Enforce 1 and Secrets in prompts 1, a topic and a policy's training counted the same way, read as a strength. open page →history · 2 moments →
Observe and Enforce taken on its own by User A, step 1 of 4: What a policy does on mac-a1. The new scene policy-modes: Off lets the action through and records nothing, Observe lets it through and records a finding, Enforce stops it and records a finding; the mode each policy has for Team A.
Observe and Enforce taken on its own by User A, step 1 of 4: What a policy does on mac-a1. The new scene policy-modes: Off lets the action through and records nothing, Observe lets it through and records a finding, Enforce stops it and records a finding; the mode each policy has for Team A. open page →
Step 3 of 4: Enforce, the action is stopped on mac-a1 before it leaves, a finding recorded there too; the model or the server never reached. Some policies can only record, whatever their mode.
Step 3 of 4: Enforce, the action is stopped on mac-a1 before it leaves, a finding recorded there too; the model or the server never reached. Some policies can only record, whatever their mode. open page →
c133 full
open page →history · 3 moments →
c133 full
open page →

Phase 6 · each training's own words for the library (D38), the self-taken record on the finding (D39), and the count in the Compliance report (D42)

2026-11-12· 5 captures
The preview page's section for Secrets in prompts: On its own (the library), 4 of 4 steps and 4 of 4 questions as User A reads it with no finding, in the file's own words for what-happened and this-key; the voice check now covers the library reading too (zero violations).
The preview page's section for Secrets in prompts: On its own (the library), 4 of 4 steps and 4 of 4 questions as User A reads it with no finding, in the file's own words for what-happened and this-key; the voice check now covers the library reading too (zero violations). open page →
F-G's training strip: Secrets in prompts, Assigned, as before; under it, Priya took it on their own on Nov 1, 2026, passed 4 of 4, TR-1, v1. A training taken on its own answers no finding, so the assignment stays open.
F-G's training strip: Secrets in prompts, Assigned, as before; under it, Priya took it on their own on Nov 1, 2026, passed 4 of 4, TR-1, v1. A training taken on its own answers no finding, so the assignment stays open. open page →
The Compliance report's new section beside Enforcement Posture: Trainings taken on their own, 2 (1 person, a count not a list), Secrets in prompts 1 and Unapproved MCP servers 1, read as a strength; it answers no finding, so it isn't in Corrections. Source: training.completed.self.
The Compliance report's new section beside Enforcement Posture: Trainings taken on their own, 2 (1 person, a count not a list), Secrets in prompts 1 and Unapproved MCP servers 1, read as a strength; it answers no finding, so it isn't in Corrections. Source: training.completed.self. open page →history · 2 moments →
Secrets in prompts taken on its own by User A, step 1 of 4: How a key ends up in a prompt, the file's library words in place of What happened on {device}. The prompt reaches the model, which receives it; qcontrol's detectors read from the policy. No Left out note: Phase 5 kept 2 of 4 steps here.
Secrets in prompts taken on its own by User A, step 1 of 4: How a key ends up in a prompt, the file's library words in place of What happened on {device}. The prompt reaches the model, which receives it; qcontrol's detectors read from the policy. No Left out note: Phase 5 kept 2 of 4 steps here. open page →history · 2 moments →
Step 3 of 4 on its own: What to do if a key reached a model, the library's words for the step that read {keyAdvice} on a finding (revoke it and issue a new one the same day; tell IT). Its question, q-revoke, comes back into the check with it.
Step 3 of 4 on its own: What to do if a key reached a model, the library's words for the step that read {keyAdvice} on a finding (revoke it and issue a new one the same day; tell IT). Its question, q-revoke, comes back into the check with it. open page →history · 2 moments →

Sketches — the structures, drawn in the design system

2026-11-10· 4 captures
From the policy's detection to one small event in the plane's audit log, and the three places that read it: the finding, Reports, the operator's inbox.
From the policy's detection to one small event in the plane's audit log, and the three places that read it: the finding, Reports, the operator's inbox. open page →
Trigger, lesson, check, record: a finding becomes a lesson and completion becomes proof in the audit log.
Trigger, lesson, check, record: a finding becomes a lesson and completion becomes proof in the audit log. open page →
c133 full
open page →
c133 full
open page →

Phase 5 · the training library: the three trainings with the person's record, and one taken on its own, written with no finding and no assigner

2026-11-12· 9 captures
Trainings, as User A sees them: Personal accounts for work, Assigned (finding F-C asks for it; Start opens the training on F-C); Secrets in prompts, No record (no finding of theirs asks for it; Take it on your own); Unapproved MCP servers, Recorded (passed 4 of 4 for F-A; Take it again). Each with its minutes, its policy and what it covers.
Trainings, as User A sees them: Personal accounts for work, Assigned (finding F-C asks for it; Start opens the training on F-C); Secrets in prompts, No record (no finding of theirs asks for it; Take it on your own); Unapproved MCP servers, Recorded (passed 4 of 4 for F-A; Take it again). Each with its minutes, its policy and what it covers. open page →history · 3 moments →
Secrets in prompts taken on its own by User A: no Assignment stop; the note that it has 2 of its 4 steps and 3 of its 4 questions on its own (what happened and what to do about this key tell a finding); step 1, Why a key in a prompt is a key disclosed, the prompt drawn with the policy's first detector, an AWS access key.
Secrets in prompts taken on its own by User A: no Assignment stop; the note that it has 2 of its 4 steps and 3 of its 4 questions on its own (what happened and what to do about this key tell a finding); step 1, Why a key in a prompt is a key disclosed, the prompt drawn with the policy's first detector, an AWS access key. open page →history · 2 moments →
All 3 right, and the record as it will be written (D14): training.completed.self, T-SECRETS-1 v1 with its hash, no finding (the policy P-CREDENTIALS), User A on mac-a1, passed 3 of 3, assigned by nobody, taken on their own from the library.
All 3 right, and the record as it will be written (D14): training.completed.self, T-SECRETS-1 v1 with its hash, no finding (the policy P-CREDENTIALS), User A on mac-a1, passed 3 of 3, assigned by nobody, taken on their own from the library. open page →
Recorded: the record as the audit log keeps it (TR-2, training.completed.self), where it shows (the audit log, one row; no message was sent, so none ends; no finding asked for it, so the Findings report does not count it) and the audit log's one row.
Recorded: the record as the audit log keeps it (TR-2, training.completed.self), where it shows (the audit log, one row; no message was sent, so none ends; no finding asked for it, so the Findings report does not count it) and the audit log's one row. open page →
Back on Trainings after the take: Secrets in prompts reads Recorded, passed 3 of 3 on 1 November, on your own; Unapproved MCP servers stays recorded for F-A; Personal accounts for work still waits on F-C.
Back on Trainings after the take: Secrets in prompts reads Recorded, passed 3 of 3 on 1 November, on your own; Unapproved MCP servers stays recorded for F-A; Personal accounts for work still waits on F-C. open page →history · 3 moments →
c133 full
open page →history · 3 moments →
c133 full
open page →
c133 full
open page →
c133 full
open page →history · 3 moments →

Phase 5 · T-MCP-1's choices reordered (D34): the right answer third, first, second, third; same words, version 1, a new content hash

2026-11-12· 4 captures
The check on F-A after D34, unanswered: the same four questions and the same choices in a new order, so the right one sits third, first, second and third; nothing is shuffled at render.
The check on F-A after D34, unanswered: the same four questions and the same choices in a new order, so the right one sits third, first, second and third; nothing is shuffled at render. open page →history · 5 moments →
All 4 right after D34: the right choice and why for each question, and the record as it will be written, naming T-MCP-1 v1 with the new hash ed4d2679c3cd (no change of meaning, so the version stays; the hash moves with any change).
All 4 right after D34: the right choice and why for each question, and the record as it will be written, naming T-MCP-1 v1 with the new hash ed4d2679c3cd (no change of meaning, so the version stays; the hash moves with any change). open page →history · 5 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 5 moments →

Phase 4 · pilot 3, Secrets in prompts, on F-G (the one seed finding added to the lab world for it), through the /training skill; the collection complete

2026-11-11· 18 captures
S1 for F-G, the lab world's one finding under Credentials must not be sent to a model (added in Phase 4, marked c133): AWS access key AKIA…7Q2F in a prompt from a pasted .env file, Observed, so it reached the model; the strip offers Secrets in prompts, assigned to Priya on mac-eng-07.
S1 for F-G, the lab world's one finding under Credentials must not be sent to a model (added in Phase 4, marked c133): AWS access key AKIA…7Q2F in a prompt from a pasted .env file, Observed, so it reached the model; the strip offers Secrets in prompts, assigned to Priya on mac-eng-07. open page →history · 7 moments →
Assigned: the training-assignment for F-G in three sentences, the first two from the file (a prompt with an AWS access key that reached the model; why a key in a prompt counts as disclosed and how to give an agent a secret without pasting it).
Assigned: the training-assignment for F-G in three sentences, the first two from the file (a prompt with an AWS access key that reached the model; why a key in a prompt counts as disclosed and how to give an agent a secret without pasting it). open page →history · 4 moments →
The check, unanswered: a deleted conversation, what makes a disclosed key safe, how to give an agent a password, what an unflagged prompt proves (R3); the right choices in different places.
The check, unanswered: a deleted conversation, what makes a disclosed key safe, how to give an agent a password, what an unflagged prompt proves (R3); the right choices in different places. open page →history · 5 moments →
Retake (D15): 3 of 4 right; the missed question points back to step 2, Why a key in a prompt is a key disclosed; nothing is recorded.
Retake (D15): 3 of 4 right; the missed question points back to step 2, Why a key in a prompt is a key disclosed; nothing is recorded. open page →history · 4 moments →
All 4 right: the right choice and why for each, and the record as it will be written: Secrets in prompts, T-SECRETS-1 v1 and its hash, F-G under P-CREDENTIALS, Priya on mac-eng-07.
All 4 right: the right choice and why for each, and the record as it will be written: Secrets in prompts, T-SECRETS-1 v1 and its hash, F-G under P-CREDENTIALS, Priya on mac-eng-07. open page →history · 5 moments →
Recorded: TR-1 for F-G as the audit log keeps it (training.completed.policy), where it shows, and the audit log's three rows.
Recorded: TR-1 for F-G as the audit log keeps it (training.completed.policy), where it shows, and the audit log's three rows. open page →history · 4 moments →
S1 for F-G after completion: the strip reads Recorded, passed 4 of 4; History has detected and training completed → open; the key's rotation is the person's act, the record is proof they know why (D9).
S1 for F-G after completion: the strip reads Recorded, passed 4 of 4; History has detected and training completed → open; the key's rotation is the person's act, the record is proof they know why (D9). open page →history · 7 moments →
The Findings report's Corrections section with the three pilots, as of the cutoff: findings under a policy with a training, completed and waiting, per training (Unapproved MCP servers, Personal accounts for work, Secrets in prompts); counts only (D10).
The Findings report's Corrections section with the three pilots, as of the cutoff: findings under a policy with a training, completed and waiting, per training (Unapproved MCP servers, Personal accounts for work, Secrets in prompts); counts only (D10). open page →history · 3 moments →
The collection with D6's three pilots published: Personal accounts for work, Secrets in prompts and Unapproved MCP servers, each with its policy, minutes, steps, questions, lang, version, hash, the voice check passing on every finding of its policy, and the scene catalogue (twelve scenes).
The collection with D6's three pilots published: Personal accounts for work, Secrets in prompts and Unapproved MCP servers, each with its policy, minutes, steps, questions, lang, version, hash, the voice check passing on every finding of its policy, and the scene catalogue (twelve scenes). open page →history · 4 moments →
Step 1 of 4, What happened on mac-eng-07: Cursor sends a prompt and the model received the AWS access key (the flow animated); the session, qcontrol's evidence, and why nothing was blocked: on Engineering the policy observes.
Step 1 of 4, What happened on mac-eng-07: Cursor sends a prompt and the model received the AWS access key (the flow animated); the session, qcontrol's evidence, and why nothing was blocked: on Engineering the policy observes. open page →history · 6 moments →
Step 2, Why a key in a prompt is a key disclosed: once sent, the prompt has copies in the transcript, the provider's logs and the tools it reached; a prompt cannot be called back, so the fix is to make the key useless.
Step 2, Why a key in a prompt is a key disclosed: once sent, the prompt has copies in the transcript, the provider's logs and the tools it reached; a prompt cannot be called back, so the fix is to make the key useless. open page →history · 6 moments →
Step 3, What to do about this key: it reached the model, so revoke it and issue a new one today; tell IT what you did and when.
Step 3, What to do about this key: it reached the model, so revoke it and issue a new one today; tell IT what you did and when. open page →history · 6 moments →
Step 4, What to do instead (R2): give the agent a reference, not the secret; look in a file before pasting it; what qcontrol checks for, read from the policy's detectors, and the check that is off.
Step 4, What to do instead (R2): give the agent a reference, not the secret; look in a file before pasting it; what qcontrol checks for, read from the policy's detectors, and the check that is off. open page →history · 6 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 4 moments →
c133 full
open page →history · 7 moments →
c133 full
open page →history · 4 moments →

Phase 4 · pilot 2, Personal accounts for work, on F-C (User A's usera@gmail.com), through the /training skill

2026-11-11· 15 captures
S1 for F-C, the personal account usera@gmail.com on mac-a1: the strip now reads Personal accounts for work, 3 minutes, assigned by the policy on detection, sent to User A, Assigned; nothing is blocked meanwhile.
S1 for F-C, the personal account usera@gmail.com on mac-a1: the strip now reads Personal accounts for work, 3 minutes, assigned by the policy on detection, sent to User A, Assigned; nothing is blocked meanwhile. open page →history · 7 moments →
Assigned: the training-assignment for F-C in three sentences, the first two from the file's # Assignment section (a session under usera@gmail.com, recorded not blocked; where work goes under a personal account), beside what this is and what is recorded.
Assigned: the training-assignment for F-C in three sentences, the first two from the file's # Assignment section (a session under usera@gmail.com, recorded not blocked; where work goes under a personal account), beside what this is and what is recorded. open page →history · 4 moments →
The check, unanswered: where work sits under a personal account, how to tell which account a session uses, why an observed finding matters, what to do without a seat (R3); the right choices sit in different places.
The check, unanswered: where work sits under a personal account, how to tell which account a session uses, why an observed finding matters, what to do without a seat (R3); the right choices sit in different places. open page →history · 5 moments →
Retake (D15): 3 of 4 right; the missed question points back to step 2, Where the work goes; what was right stays answered; nothing is recorded.
Retake (D15): 3 of 4 right; the missed question points back to step 2, Where the work goes; what was right stays answered; nothing is recorded. open page →history · 4 moments →
All 4 right: the right choice and why for each question, and the record as it will be written: Personal accounts for work, T-ACCT-1 v1 and its hash, F-C under P-ACCT, User A on mac-a1, passed 4 of 4.
All 4 right: the right choice and why for each question, and the record as it will be written: Personal accounts for work, T-ACCT-1 v1 and its hash, F-C under P-ACCT, User A on mac-a1, passed 4 of 4. open page →history · 5 moments →
Recorded: TR-1 for F-C as the audit log keeps it (training.completed.policy, D27), where it shows, and the audit log's rows: message.sent, the completion, message.done.
Recorded: TR-1 for F-C as the audit log keeps it (training.completed.policy, D27), where it shows, and the audit log's rows: message.sent, the completion, message.done. open page →history · 4 moments →
S1 for F-C after completion: the strip reads Recorded, passed 4 of 4; History has detect, allowed by Dana's exception, reopened when it ended on 1 November, and now training completed → open: the training is proof, not a resolution (D9).
S1 for F-C after completion: the strip reads Recorded, passed 4 of 4; History has detect, allowed by Dana's exception, reopened when it ended on 1 November, and now training completed → open: the training is proof, not a resolution (D9). open page →history · 7 moments →
Step 1 of 4, What happened on mac-a1: Claude Code runs a session under usera@gmail.com (the flow animated); qcontrol's evidence; the policy only records, it cannot block; Dana's exception quoted as written, ended on 31 October, so the finding is open again (D12).
Step 1 of 4, What happened on mac-a1: Claude Code runs a session under usera@gmail.com (the flow animated); qcontrol's evidence; the policy only records, it cannot block; Dana's exception quoted as written, ended on 31 October, so the finding is open again (D12). open page →history · 6 moments →
Step 2, Where the work goes: the same prompts, files and answers under the organisation's account (inside its agreement with the provider) and under usera@gmail.com (outside its reach).
Step 2, Where the work goes: the same prompts, files and answers under the organisation's account (inside its agreement with the provider) and under usera@gmail.com (outside its reach). open page →history · 6 moments →
Step 3, How to tell which account a session uses: the account the agent shows it is signed in with; check before work starts and after a reinstall or a new machine.
Step 3, How to tell which account a session uses: the account the agent shows it is signed in with; check before work starts and after a reinstall or a new machine. open page →history · 6 moments →
Step 4, What to do instead (R2): sign out of usera@gmail.com and sign in with the organisation's account; with no seat yet, ask IT; tell IT what already went through it.
Step 4, What to do instead (R2): sign out of usera@gmail.com and sign in with the organisation's account; with no seat yet, ask IT; tell IT what already went through it. open page →history · 6 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 4 moments →
c133 full
open page →history · 7 moments →

Phase 3 · the authoring pipeline: the collection previewed in the lab, published at /api/trainings, the record naming the published hash

2026-11-11· 4 captures
The collection previewed in the lab: Unapproved MCP servers, moved from TypeScript into content/trainings/en without a word changed, listed with its policy, minutes, steps, questions, lang, version and the voice check (pass on 77 texts across F-A, F-B and F-E), the findings it opens on, the slots it reads, the content hash the API serves (D26) and the scene catalogue.
The collection previewed in the lab: Unapproved MCP servers, moved from TypeScript into content/trainings/en without a word changed, listed with its policy, minutes, steps, questions, lang, version and the voice check (pass on 77 texts across F-A, F-B and F-E), the findings it opens on, the slots it reads, the content hash the API serves (D26) and the scene catalogue. open page →history · 4 moments →
Recorded, after Phase 3: the record reads training.completed.policy (D27) and names Unapproved MCP servers, T-MCP-1 v1 and the first twelve characters of the hash /api/trainings serves (D26); the audit log's middle row is the same event; Reports links the Findings report's Corrections section.
Recorded, after Phase 3: the record reads training.completed.policy (D27) and names Unapproved MCP servers, T-MCP-1 v1 and the first twelve characters of the hash /api/trainings serves (D26); the audit log's middle row is the same event; Reports links the Findings report's Corrections section. open page →history · 4 moments →
c133 full
open page →history · 4 moments →
c133 full
open page →history · 4 moments →

Phase 2 · the record: a count in Reports, a Corrections block on the finding as the proposal, the event shape for Tyler

2026-11-11· 4 captures
The Findings report's new Corrections section, as of the data cutoff: 3 findings under a policy with a training (all under Unsanctioned MCP server in use), 1 completed, 2 waiting; per training; names stay on the finding and in the audit log (D10). Staged, with its source named.
The Findings report's new Corrections section, as of the data cutoff: 3 findings under a policy with a training (all under Unsanctioned MCP server in use), 1 completed, 2 waiting; per training; names stay on the finding and in the audit log (D10). Staged, with its source named. open page →history · 3 moments →
The whole Findings report with Corrections between Blocked and observed and Data protection; the verdict and the window line unchanged.
The whole Findings report with Corrections between Blocked and observed and Data protection; the verdict and the window line unchanged. open page →history · 3 moments →
The Corrections block under History on S1 (?v.corrections=block): the record as the audit log keeps it, the sentence that the status did not change, the link to the record page, and the three audit rows. The history row stays the record's home until the shape is agreed.
The Corrections block under History on S1 (?v.corrections=block): the record as the audit log keeps it, the sentence that the status did not change, the link to the record page, and the three audit rows. The history row stays the record's home until the shape is agreed. open page →history · 7 moments →
c133 full
open page →history · 3 moments →

Phase 1 · the content model and one training: Unapproved MCP servers on F-A, in the web app's frame, state by state

2026-11-11· 14 captures
S1 Finding detail with the c133 strip: Unapproved MCP servers, 3 minutes, assigned by the policy on detection, sent to User A on mac-a1, Assigned; nothing is blocked meanwhile (D9); the path opens the training as User A.
S1 Finding detail with the c133 strip: Unapproved MCP servers, 3 minutes, assigned by the policy on detection, sent to User A on mac-a1, Assigned; nothing is blocked meanwhile (D9); the path opens the training as User A. open page →history · 7 moments →
Assigned: the training-assignment message built from F-A (three sentences, Attention, Start training), beside what this is, what is recorded (R4) and Not now (D9: nothing is blocked while it waits).
Assigned: the training-assignment message built from F-A (three sentences, Attention, Start training), beside what this is, what is recorded (R4) and Not now (D9: nothing is blocked while it waits). open page →history · 4 moments →
The check, unanswered: four situations with three choices each (R3), the pass rule stated, Check my answers held until every question is answered.
The check, unanswered: four situations with three choices each (R3), the pass rule stated, Check my answers held until every question is answered. open page →history · 5 moments →
Retake (D3): 3 of 4 right, not yet; the missed question with the step to reread; Retake the check keeps what was right. Nothing is recorded.
Retake (D3): 3 of 4 right, not yet; the missed question with the step to reread; Retake the check keeps what was right. Nothing is recorded. open page →history · 4 moments →
All 4 right: the right choice and why for each question, and the record as it will be written (training, finding, policy, person, result, time; and the line of what is not recorded) before Finish and record.
All 4 right: the right choice and why for each question, and the record as it will be written (training, finding, policy, person, result, time; and the line of what is not recorded) before Finish and record. open page →history · 5 moments →
Recorded: the record as the audit log keeps it (TR-1, training.completed), where it shows (the finding's history, the operator's inbox, Reports in Phase 2), and the audit log's rows: message.sent, training.completed, message.done.
Recorded: the record as the audit log keeps it (TR-1, training.completed), where it shows (the finding's history, the operator's inbox, Reports in Phase 2), and the audit log's rows: message.sent, training.completed, message.done. open page →history · 4 moments →
S1 after completion: the strip reads Recorded, passed 4 of 4 with the time; History has one more row, training completed → open, marked Manual with User A as the actor and the record as its cause; the status did not move (D9).
S1 after completion: the strip reads Recorded, passed 4 of 4 with the time; History has one more row, training completed → open, marked Manual with User A as the actor and the record as its cause; the status did not move (D9). open page →history · 7 moments →
Lesson, step 1 of 4, What happened on mac-a1: Claude Code on mac-a1 connecting to Vanta MCP (the flow animated), the finding's evidence as qcontrol recorded it, and the outcome: nothing was blocked, the record stays.
Lesson, step 1 of 4, What happened on mac-a1: Claude Code on mac-a1 connecting to Vanta MCP (the flow animated), the finding's evidence as qcontrol recorded it, and the outcome: nothing was blocked, the record stays. open page →history · 6 moments →
Step 3, Why there is a sanctioned list: the list for Team A from the policy's configuration (GitHub MCP, Atlassian MCP, Postgres MCP read-only for analytics harnesses) beside Vanta MCP, sanctioned for GRC alone by the exception, quoted as written.
Step 3, Why there is a sanctioned list: the list for Team A from the policy's configuration (GitHub MCP, Atlassian MCP, Postgres MCP read-only for analytics harnesses) beside Vanta MCP, sanctioned for GRC alone by the exception, quoted as written. open page →history · 6 moments →
Step 4, What to do instead (R2): check, ask for the server to be sanctioned, disconnect what you did not expect; the request goes to the policy's owner, read from the world; Go to the check.
Step 4, What to do instead (R2): check, ask for the server to be sanctioned, disconnect what you did not expect; the request goes to the policy's owner, read from the world; Go to the check. open page →history · 6 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 5 moments →
c133 full
open page →history · 4 moments →
c133 full
open page →history · 7 moments →

Artifacts

/pages/phase4/mock/training?findingId=F-C&at=assigned&demo=1/pages/phase4/mock/training?findingId=F-C&at=check&demo=1/pages/phase4/mock/finding-detail?findingId=F-C&demo=1/pages/phase4/mock/finding-detail?findingId=F-C&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-C&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=F-C&at=passed&demo=1/pages/phase4/mock/training?findingId=F-C&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-C&at=retake&demo=1/pages/phase4/mock/finding-detail?findingId=F-I&theatre=off&demo=1/pages/phase4/mock/training?findingId=F-I&theatre=off&at=lesson&step=1&demo=1/pages/phase4/mock/finding-detail?findingId=F-A&at=recorded&v.corrections=block&demo=1/pages/phase4/mock/finding-detail?findingId=F-A&demo=1/pages/phase4/mock/finding-detail?findingId=F-A&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-H&at=assigned&demo=1/pages/phase4/mock/training?findingId=F-H&at=check&demo=1/pages/phase4/mock/finding-detail?findingId=F-H&demo=1/pages/phase4/mock/finding-detail?findingId=F-H&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-H&at=lesson&step=1&demo=1/pages/phase4/mock/training-library?take=T-INJECT-1&self=lesson&step=1/pages/phase4/mock/training?findingId=F-H&at=passed&demo=1/pages/phase4/mock/training?findingId=F-H&at=retake&demo=1/pages/phase4/mock/training-library?findingId=F-A&at=recorded&take=T-SECRETS-1&self=recorded&demo=1/pages/phase4/mock/training-library?take=T-SECRETS-1&self=lesson&step=1&demo=1/pages/phase4/mock/training-library?take=T-SECRETS-1&self=passed&demo=1/pages/phase4/mock/training-library?findingId=F-A&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-A&at=recorded&demo=1/pages/phase4/mock/reports/findings?findingId=F-G&at=recorded&demo=1/pages/phase4/mock/reports/compliance?took=T-SECRETS-1,T-MCP-1&demo=1/pages/phase4/mock/finding-detail?findingId=F-G&took=T-SECRETS-1&demo=1/pages/phase4/mock/training-library?take=T-SECRETS-1&self=lesson&step=3&demo=1/pages/phase4/trainings?demo=1/pages/phase4/mock/reports/compliance?took=T-MODES-1,T-SECRETS-1&demo=1/pages/phase4/mock/training-library?demo=1/pages/phase4/mock/training-library?take=T-MODES-1&self=lesson&step=1&demo=1/pages/phase4/mock/training-library?take=T-MODES-1&self=lesson&step=3&demo=1/pages/phase4/mock/training-library?take=T-MODES-1&self=passed&demo=1/pages/phase4/mock/reports/findings?findingId=F-A&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-G&at=assigned&demo=1/pages/phase4/mock/training?findingId=F-G&at=check&demo=1/pages/phase4/mock/finding-detail?findingId=F-G&demo=1/pages/phase4/mock/finding-detail?findingId=F-G&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-G&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=F-G&at=passed&demo=1/pages/phase4/mock/training?findingId=F-G&at=recorded&demo=1/pages/phase4/mock/training?findingId=F-G&at=retake&demo=1/cycles/design/sketches/c133-record/cycles/design/sketches/c133-training/pages/phase4/mock/training?findingId=F-A&at=assigned&demo=1/pages/phase4/mock/training?findingId=F-A&at=check&demo=1/pages/phase4/mock/training?findingId=F-A&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=F-A&at=passed&demo=1/pages/phase4/mock/training?findingId=F-A&at=retake&demo=1/pages/phase4/trainings/pages/phase4/mock/training?findingId=TH-S4-b3-1&theatre=public-link&beat=3&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=TH-S3-b2-1&theatre=secrets-stealer&beat=2&at=lesson&step=1&demo=1/pages/phase4/mock/finding-detail?findingId=F-F&theatre=off&demo=1/pages/phase4/mock/training?findingId=F-F&theatre=off&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=TH-S5-b2-1&theatre=card-to-stranger&beat=2&at=lesson&step=1&demo=1/pages/phase4/mock/training?findingId=TH-S6-b2-1&theatre=runaway-loop&beat=2&at=lesson&step=1&demo=1

Qpoint Brand Style Guide