AI Product Decision Firewall

Challenge scope drift with Claude Code, Linear, and cited product decisions.

Introduction

30 Second Summary

Product ideas often grow one harmless request at a time. Soon, a calm one-button experience has four competing controls despite the decisions that once kept it focused.

In this project, you will turn Claude Code into an AI agent that acts as a product sparring partner. You will compare its baseline critique with a principles-aware critique grounded in prior Linear decisions.

What You'll Build

You watch Claude Code turn a bloated Focus Timer proposal into a one-control recommendation grounded in your own Linear decisions.

By the end of this project, you'll have:

  • A citable decision workspace containing a product brief, aligned work, plus explicit decisions that you can open from generated issue links.
  • A connected evidence-grounded critique workflow using the Model Context Protocol to inspect Linear issues, identify scope clashes, plus state when ticket evidence is missing.
  • A before-and-after product record where proposal history preserves the original scope beside the one-control replacement. A cited decision log captures the reasoning behind that change.
  • Secret Mission: Add a later decision that reverses an older rule for one accessibility scenario, then test whether the agent applies that narrow exception.

Are there any prerequisites?

You need a Mac running macOS 13.0 or later with eligible Claude Code or Anthropic Console access. Linear Free covers the workspace, but Claude Code subscription or Console usage charges may apply.

Before We Start

This opening checkpoint defines the sparring partner's job before any setup begins: protect the minimal 25-minute focus-session experience from scope drift. Linear ticket citations ground its critique in recorded product evidence.

Set Up Linear, Claude Code, and MCP

Your sparring partner needs direct access to an authenticated Linear workspace before it can retrieve ticket evidence. It also needs a clean local context before it can challenge product decisions.

This step prepares Claude Code on your Mac. The official Linear MCP server then connects it to Linear through the Model Context Protocol.

In this step, get ready to:
  • Prepare a Linear Free workspace with one available team.
  • Prepare Claude Code for authenticated use on macOS.
  • Connect Claude Code to Linear through the official remote MCP server.
Create or enter your Linear workspace

Linear stores the tickets that become evidence for your sparring partner. Its Free plan includes every workspace feature this workflow needs.

The Linear Free plan costs $0. One available team is enough for this project.

Your next action depends on whether you already have a Linear workspace.

✔️ I already have a workspace

  • Sign in to your existing Linear workspace.
  • Select one existing team for this project.
  • Confirm that the workspace opens with that team available.

ⓧ I need a workspace

  • Create a Linear account through the browser flow.
  • Select the Free plan when the plan choice appears.
  • Create one team when Linear prompts you.
  • Continue until the workspace opens with that team available.

You're in. Your Linear Free workspace now has the team that will hold the product brief and its supporting decisions.

Install and authenticate Claude Code

Claude Code runs as a command-line tool inside Terminal. It needs an eligible Claude account or Anthropic Console access.

Claude subscription or Console usage charges may apply to later Claude Code activity. Your browser handles the sign-in flow so your credentials stay out of Terminal.

  • Press Cmd+Space to open macOS search.
  • Type Terminal and press Enter to open it.
  • Install Claude Code by running this command:
curl -fsSL https://claude.ai/install.sh | bash

What does this command do?

  • The download script retrieves the native Claude Code installer from Anthropic.
  • The pipe sends that installer to bash so your Mac can run it.
  • A new Terminal window loads the updated command path after installation.

The installer prints its progress in Terminal. It finishes when control returns to the command prompt without an installation error.

Installation not finishing?

  • Confirm that your Mac still has an internet connection.
  • Rerun the installation command after the connection is stable.

Use help me troubleshoot this Claude Code installation if the installer still stops early. You can also share the non-secret error details with the NextWork community.

  • Close the Terminal window after the installer finishes.
  • Press Cmd+Space to open macOS search again.
  • Type Terminal and press Enter to open a new window.
  • Check the Claude Code installation by running:
claude --version

What does this check prove?

The version check proves that the new Terminal window can find the Claude Code executable. A version number confirms the installation is available from your command path.

✔️ I see a version number

That installation is ready. Claude Code can now start from Terminal.

ⓧ I see command not found

  • Close the current Terminal window.
  • Open another Terminal window through macOS search.
  • Repeat the version check by running:
claude --version

Why try a new window?

A fresh Terminal window reloads the command path changed by the installer. The version check succeeds once that path includes Claude Code.

Still cannot find Claude Code?

Rerun the official installation command from the earlier code block. Close Terminal after the installer finishes.

Use help me fix the missing Claude Code command if a fresh window still cannot find the command.

The next launch starts an interactive session. The first session guides you through browser login for your eligible Claude account.

  • Launch Claude Code by running this command:
claude

What happens on first launch?

The command starts Claude Code inside Terminal. The first launch directs you to a browser so you can authenticate.

  • Follow the on-screen login action to continue in your browser.
  • Complete the browser login with your eligible Claude account.
  • Return to Terminal after the browser confirms authentication.
  • Confirm that Claude Code shows its interactive session.
  • Close this Terminal window after the interactive session is ready.

Authentication is complete. Claude Code can now start without repeating the account setup.

Create the folder and connect Linear MCP

The empty local folder gives Claude Code a project boundary for the work ahead. The MCP connection gives that project controlled access to your Linear tickets.

  • Press Cmd+Space to open macOS search.
  • Type Terminal and press Enter to open it.
  • Create the empty decision-firewall folder on your Desktop and move into it by running these commands:
cd ~/Desktop
mkdir decision-firewall
cd decision-firewall
ls

What do these commands do?

  • The first cd command moves Terminal to your Desktop.
  • The mkdir command creates the decision-firewall folder.
  • The second cd command moves Terminal into that folder.
  • The ls command lists any visible files inside it.

The final command should return no file names. That blank result confirms that decision-firewall is empty.

Folder command did not work?

  • Check whether a decision-firewall folder already exists on your Desktop.
  • Remove any accidental files from that existing folder before continuing.

Use help me prepare the empty project folder before deleting anything you do not recognize.

  • Configure the official remote Linear MCP server from the decision-firewall folder by running:
claude mcp add --transport http linear-server https://mcp.linear.app/mcp

What does this connection command do?

  • The MCP configuration uses http as its transport.
  • Claude Code stores the server under the name linear-server.
  • The URL https://mcp.linear.app/mcp points to Linear's official remote server.

Claude Code now has the server configuration. Linear still needs to authorize the connection before ticket access works.

Server configuration failed?

  • Confirm that Terminal is still inside the decision-firewall folder.
  • Confirm that the Claude Code version check succeeded earlier.
  • Rerun the connection command after restoring your internet connection.

Use help me troubleshoot the Linear MCP configuration if the configuration still fails.

  • Start Claude Code from the decision-firewall folder by running:
claude

Why launch from this folder?

Claude Code treats the folder where it starts as the current project context. Future project instructions can live inside decision-firewall.

The server is configured but still needs Linear authorization. The MCP status screen starts that browser flow.

  • Open the MCP status screen inside Claude Code by entering:
/mcp

What does this command show?

The MCP status screen lists configured servers. It also provides the authorization flow for linear-server.

  • Follow the on-screen authorization action for linear-server.
  • Approve access to your Linear workspace in the browser.
  • Return to Terminal after Linear confirms authorization.

The browser authorization links your signed-in Linear workspace to the configured server. Claude Code can now request Linear data through that approved connection.

Before you check again, do you expect the server to show a connected state or an authorization request?

  • Check the final Linear MCP connection state by entering:
/mcp

What does the final check prove?

The status screen confirms whether configuration and browser authorization both succeeded. A connected state proves that Claude Code can reach the official Linear MCP server.

You'll see linear-server shown as connected. That's the setup complete: your local Claude Code project now has an authenticated path to Linear.

Linear server not connected?

  • Select the authorization action for linear-server again.
  • Confirm that the browser is signed in to the intended Linear workspace.
  • Allow the browser authorization flow to return control to Claude Code.

Use help me connect the official Linear MCP server if the status remains disconnected. You can also share the non-secret status details with the NextWork community.

Setup checkpoint

  • Your Linear Free workspace is signed in with one available team.
  • Claude Code is installed and authenticated. Its version check succeeds in Terminal.
  • Your empty decision-firewall folder is open in Terminal on your Mac.
  • The linear-server connection uses transport http with URL https://mcp.linear.app/mcp. It is authorized with Linear and connected in /mcp.

Your authenticated tools now share one clean project context. Next, you'll turn that connection into a citable Linear alignment workspace.

Build the Alignment Workspace

Your connected Linear workspace can exchange project data with Claude Code through the Model Context Protocol. The missing piece is a shared record that your sparring partner can cite.

Product decisions drift when the brief, delivery work, or accepted constraints live only in someone's memory. This step turns that context into four visible issues with stable IDs.

In this step, get ready to:
  • Create the Focus Timer Decision Firewall project.
  • Add four issues covering the brief, aligned work, or accepted decisions.
  • Verify the citable four-issue workspace in Linear.
Preview and create the project

A Linear project groups the evidence for one product outcome. Previewing the write first gives you a chance to catch a naming or scope mistake before the project exists.

  • Switch back to your Claude Code session from earlier.
  • Prepare a no-write project preview by pasting this prompt:
Preview a Linear project with the following details. Do not create it yet.

Name: Focus Timer Decision Firewall
Purpose: A minimal focus timer whose core outcome is starting or stopping a 25-minute focus session without extra settings.
Team: Use the available team in my connected Linear workspace.

Show the exact project name and purpose you plan to create.

What does this preview do?

  • The preview asks linear-server to prepare the project details without writing them to Linear.
  • The project purpose keeps the workspace focused on one calm screen with no extra settings.
  • Check that the preview names the project Focus Timer Decision Firewall.
  • Check that the purpose describes a 25-minute focus session without extra settings.

The next prompt creates a Linear resource. Claude Code may ask you to approve the write before it continues.

  • Create only the reviewed project by pasting this prompt:
Create the Linear project exactly as previewed. Create only one project. After creation, confirm the project name.

What does this creation prompt do?

This prompt turns the approved preview into one Linear project. The final confirmation gives you an immediate signal that the write completed.

  • Approve the Linear write if Claude Code displays a permission request.
  • Read Claude Code's result to confirm that it created Focus Timer Decision Firewall.

Project creation did not complete?

  • Confirm that linear-server still shows as connected in /mcp.
  • Check that Claude Code has permission to create a project in your available Linear team.

Get help with diagnosing the failed Linear project write.

Preview and create the four issues

The project needs a brief, one piece of aligned work, or two accepted decisions. Together, those issues give the sparring partner evidence about the intended outcome plus the boundaries around it.

  • Prepare a no-write preview of the four starting issues by pasting this prompt:
Preview exactly four new issues inside the Linear project named Focus Timer Decision Firewall. Do not create them yet.

1. Title: [Brief] Focus Mode v1
Description: The user should start or stop a 25-minute focus session from one calm main screen. Success means the current state is obvious and one primary action is visible.

2. Title: [Work] Build the one-control focus screen
Description: Deliver the smallest screen that shows focus state and one on/off control.

3. Title: [Decision] One primary action on the main screen
Description: The main screen will expose one primary action so the next step is unambiguous. Secondary controls stay off the main screen.

4. Title: [Decision] Replace Pause with an on/off switch
Description: Pause was removed because it introduced a third state. The on/off control now starts and stops the session.

Show every planned title and description. Do not write to Linear.

Why use these four issue types?

The title prefixes make each issue's role visible at a glance. The descriptions preserve the user outcome plus the constraints that shape future work.

The two decision issues record why the main screen has one action. Their generated IDs make those decisions citable later.

  • Count the issues in Claude Code's preview.
  • Compare every previewed title with the requested title.
  • Compare every previewed description with the requested description.

You should see exactly four planned issue writes. Two titles should start with [Decision].

  • Create the reviewed issues by pasting this prompt:
Create exactly the four issues from the preview inside Focus Timer Decision Firewall. Do not create any other issues. Preserve every title and description exactly.

What does this issue write do?

Claude Code uses the connected Linear MCP server to create the four reviewed issues. Keeping the titles unchanged preserves the visible distinction between the brief, work, or decisions.

  • Approve each Linear write permission request if Claude Code displays one.
  • Wait for Claude Code to report all four created issues.

That is the core workspace in place. Your product outcome plus its two active constraints now live in a shared system.

One or more issues missing?

  • Check that Claude Code used the Focus Timer Decision Firewall project.
  • Compare Claude Code's creation report with the four-item preview.
  • Ask Claude Code to create only a missing issue using its matching previewed description.

Get help with reconciling the Linear issue creation result.

Record the issue IDs and verify the workspace

Every Linear issue receives a unique issue ID. Recording each ID with its direct link gives you evidence that future critiques can cite or reopen.

  • Request the generated IDs plus direct links by pasting this prompt:
Return the generated Linear issue ID and direct link for each of these issues in Focus Timer Decision Firewall:

- [Brief] Focus Mode v1
- [Work] Build the one-control focus screen
- [Decision] One primary action on the main screen
- [Decision] Replace Pause with an on/off switch

Also return the direct link to the Focus Timer Decision Firewall project. Do not create or edit anything.

Why capture IDs and links?

The IDs provide compact citations for factual claims. The direct links let you verify that each citation resolves to the intended issue.

  • Record the generated ID for [Brief] Focus Mode v1 here: your brief issue ID.
  • Record the direct link for [Brief] Focus Mode v1 here: your brief issue direct link.
  • Record the generated ID for [Work] Build the one-control focus screen here: your work issue ID.
  • Record the direct link for [Work] Build the one-control focus screen here: your work issue direct link.
  • Record the generated ID for [Decision] One primary action on the main screen here: your one-action decision ID.
  • Record the direct link for [Decision] One primary action on the main screen here: your one-action decision direct link.
  • Record the generated ID for [Decision] Replace Pause with an on/off switch here: your on-off decision ID.
  • Record the direct link for [Decision] Replace Pause with an on/off switch here: your on-off decision direct link.

Before you check Linear, do you expect the visible issue list to match the four planned writes exactly?

  • Open the returned project direct link in your browser.
  • Count the issues visible inside Focus Timer Decision Firewall.

You should see exactly four starting issues. Two titles should begin with [Decision].

  • Compare the four visible titles with the four requested titles.
  • Open each recorded issue direct link one at a time.
  • Compare each visible description with the requested wording.

What should I see?

  • The project contains exactly four issues.
  • The [Brief] Focus Mode v1 issue describes one calm screen with one visible primary action.
  • The [Work] Build the one-control focus screen issue asks for the smallest screen with focus state plus one on/off control.
  • The two [Decision] issues preserve the one-action constraint plus the removal of Pause.

Issue count or details do not match?

  • Check that the project name in Claude Code's response is exactly Focus Timer Decision Firewall.
  • Compare each returned direct link with the issue title visible in Linear.
  • Use the matching previewed description when asking Claude Code to correct a missing detail.

Get help with checking the four-issue workspace.

You now have a citable product memory with a brief, aligned work, or two explicit decisions. Next, you can test whether that evidence is strong enough to expose scope drift.

Introduce Drift and Run the Baseline Spar

Your Linear workspace now holds the focus timer brief. It also preserves one aligned work item plus two explicit decisions.

A decision workspace proves its value when a new request pushes against it. You will introduce deliberate scope drift as that test.

Claude Code will then produce an evidence-grounded critique from the tickets alone.

In this step, get ready to:
  • Create a fifth issue that deliberately conflicts with the recorded product decisions.
  • Run the exact five-question critique without product principles.
  • Verify every factual citation against your real Linear issue IDs.
Create the scope-breaking proposal

The next ticket is a controlled failure case. The main screen grows from one visible control to four.

This request creates one real issue in Linear. Claude Code may pause for permission before the write.

  • Return to the Claude Code session in the decision-firewall folder.
  • Send the exact issue details by pasting this request:
Create a fifth issue in the `Focus Timer Decision Firewall` project.

Title: `[Proposal] Add quick controls to Focus Mode`

Description: `Add three buttons beside the current on/off control: Pause, +5 min, and Skip. Keep all four controls visible on the main screen and ship them in v1 so users have more flexibility.`

Return the generated issue ID.

What Does This Request Create?

  • The Pause button revives the state that an earlier decision removed.
  • The +5 min button introduces timing variation.
  • The Skip button creates another path through the main screen.
  • Shipping all four controls in v1 makes that growth part of the immediate scope.
  • Approve the Linear write operation if Claude Code asks for permission.
  • Record the returned ID here: your proposal issue ID.
  • Follow Claude Code's issue link to return to Linear.
  • Confirm the issue title is [Proposal] Add quick controls to Focus Mode.
  • Confirm the description is Add three buttons beside the current on/off control: Pause, +5 min, and Skip. Keep all four controls visible on the main screen and ship them in v1 so users have more flexibility..

You should now see five issues in Focus Timer Decision Firewall. The newest ticket should show the generated proposal issue ID.

Proposal Issue Missing?

  • Confirm Claude Code is still running from the decision-firewall folder.
  • Check linear-server in /mcp if Claude Code cannot reach Linear.

Help me diagnose why Claude Code did not create the proposal issue in my Focus Timer Decision Firewall project through the connected Linear MCP server.

Run the baseline spar

The baseline measures what ticket evidence can reveal on its own. Its read-only prompt asks for five specific angles without adding new guidance.

Before you run the critique, do you think the recorded tickets contain enough evidence to expose the proposal's conflict?

  • Submit the baseline review by pasting this prompt:
Review `[[PROPOSAL_ID="your proposal issue ID"]]` against every related issue in the `Focus Timer Decision Firewall` project. Answer exactly five questions: 1. What does this clash with? 2. What have we tried or decided before? 3. Whose perspective is missing? 4. What should we not build? 5. What is the biggest risk? Every factual claim must end with at least one Linear issue citation in `[TEAM-123]` format. Separate evidence from inference. If Linear has no evidence, write `No ticket evidence found.` Do not edit Linear.

How Does the Baseline Stay Read-Only?

  • The opening sentence limits the review to issues related to the recorded proposal ID.
  • The five questions give each part of the critique a fixed purpose.
  • The [TEAM-123] format ties factual claims to Linear issue IDs.
  • The sentence Do not edit Linear. keeps this run focused on analysis.
  • Wait for Claude Code to finish retrieving the related issues.

You should receive exactly five answers. The response should expose the proposal's deliberate shortfall.

The proposal revives Pause. It also expands the main screen from one control to four.

Missing Citations?

  • Check that the prompt contains the recorded proposal ID: your proposal issue ID.
  • Confirm linear-server still shows connected in /mcp.
  • Rerun the unchanged prompt after restoring the connection.

Help me troubleshoot a Claude Code critique that did not cite the real Linear issues in my Focus Timer Decision Firewall project.

Verify the evidence trail

A citation becomes trustworthy when it maps to a real ticket. This final check separates retrieved evidence from plausible-sounding claims.

Before you compare the response with your records, which question do you expect to have the weakest ticket evidence?

  • Leave the completed baseline response visible in the current Claude Code session.
  • Count exactly five numbered answers in the response.
  • Match every cited issue ID to the records from Step 2.
  • Open each matching direct link from your Step 2 records.
  • Confirm at least one clash names both decision issue IDs.
  • Confirm evidence appears separately from inference.
  • Locate No ticket evidence found. wherever the related issues do not support an answer.
  • Return to the proposal issue in Linear.

You should find exactly five answers backed by real issue IDs. At least one clash should cite both decision issues.

Where Linear lacks support, you should see No ticket evidence found.

Back in Linear, you should see the original proposal unchanged. Its description should still read Add three buttons beside the current on/off control: Pause, +5 min, and Skip. Keep all four controls visible on the main screen and ship them in v1 so users have more flexibility..

Citation Does Not Resolve?

  • Compare the citation character for character with your recorded issue IDs.
  • Rerun the exact baseline prompt if the response cites an issue outside the project.

Help me check why a citation in my Claude Code baseline critique does not match a real issue in my Focus Timer Decision Firewall project.

Your evidence-only baseline is now preserved beside the deliberate scope conflict. Next, you will add persistent product principles. A fresh session will test the same critique again.

Add Product Principles and Spar Again

Your baseline critique proved that ticket evidence can expose direct clashes in Linear. However, retrieval alone can miss systematic checks such as counting controls or recommending the smallest option.

The next comparison gives Claude Code persistent product principles through CLAUDE.md. A fresh session loads those rules as project context.

In this step, get ready to:
  • Store the product principles in project-level CLAUDE.md.
  • Confirm a fresh Claude Code session loads the file.
  • Rerun the unchanged five-question sparring prompt.
Define always-on review rules

Project-level CLAUDE.md gives every new session the same review context. Claude Code may request permission before it creates the file.

  • Ask Claude Code to create ./CLAUDE.md with exactly the content below:
# Product Principles

- Show one thing on screen at a time.
- Keep the main screen to one primary action.
- Prefer replacing or removing controls over adding parallel controls.
- Add complexity only when it improves the core task.

# Product Review Rules

- Search Linear before critiquing product work.
- Treat accepted `[Decision]` issues as active constraints unless a later `[Decision]` issue explicitly reverses them.
- Cite every factual claim with a Linear issue ID.
- Separate evidence from inference. If evidence is missing, say so.
- Count visible interactive controls before and after every UI proposal.
- Recommend the smallest version that preserves the core outcome.

What do these instructions change?

  • The Product Principles section defines the product experience that each critique should protect.
  • The Product Review Rules section defines how Claude Code should gather evidence.
  • The control-counting rule makes scope growth measurable.
  • The smallest-version rule turns criticism into a concrete alternative.
  • Allow the file change if Claude Code asks for permission.
  • Check Claude Code's response for confirmation that it created CLAUDE.md inside decision-firewall.

File created in the wrong folder?

Confirm the active folder is decision-firewall. Ask Claude Code to move the file there before you start a fresh session.

If the location still looks wrong, help me confirm where Claude Code created CLAUDE.md.

✔️ Awesome, I've got everything!

Great. Your product principles now live beside the project they govern.

ⓧ I'd like to double check the full code

Compare your CLAUDE.md with this complete reference.

# Product Principles

- Show one thing on screen at a time.
- Keep the main screen to one primary action.
- Prefer replacing or removing controls over adding parallel controls.
- Add complexity only when it improves the core task.

# Product Review Rules

- Search Linear before critiquing product work.
- Treat accepted `[Decision]` issues as active constraints unless a later `[Decision]` issue explicitly reverses them.
- Cite every factual claim with a Linear issue ID.
- Separate evidence from inference. If evidence is missing, say so.
- Count visible interactive controls before and after every UI proposal.
- Recommend the smallest version that preserves the core outcome.

What should match?

Your file should contain both headings in this order. Every rule should match this reference exactly.

Load the principles in a fresh session

Claude Code loads project instructions at session start. Restarting creates a clean comparison because the baseline session began without these principles.

  • End the current Claude Code session.
  • Start a fresh Claude Code session from decision-firewall by running this command:
claude

Why start a fresh session?

Project instructions load when the session starts. The fresh session receives CLAUDE.md as context from its first response.

These instructions guide Claude Code without enforcing identical output. The comparison focuses on observable differences.

Before you check, do you expect the new session to list the project instruction file?

  • Confirm the loaded project context by entering this command inside Claude Code:
/context

What does this check show?

The context view lists instruction files available to the current session. It gives you direct evidence that the product principles loaded before the second critique.

Under Memory files, you should see CLAUDE.md.

CLAUDE.md missing from Memory files?

  • Confirm the fresh session started from decision-firewall.
  • Confirm the file name uses uppercase letters as shown in CLAUDE.md.
  • End the session after correcting the file location.
  • Start another fresh session from decision-firewall.

If the file still does not appear, help me diagnose why CLAUDE.md is missing from Memory files.

Compare the principles-aware critique

The second run keeps the question unchanged. This isolates the effect of the loaded product principles.

Before you rerun the review, do you expect the critique to count the visible controls this time?

  • Replace the proposal placeholder with your recorded proposal issue ID.
  • Run the same five-question review in the fresh Claude Code session by pasting this prompt:
Review [[PROPOSAL_ID="your recorded proposal issue ID"]] against every related issue in the `Focus Timer Decision Firewall` project. Answer exactly five questions: 1. What does this clash with? 2. What have we tried or decided before? 3. Whose perspective is missing? 4. What should we not build? 5. What is the biggest risk? Every factual claim must end with at least one Linear issue citation in `[TEAM-123]` format. Separate evidence from inference. If Linear has no evidence, write `No ticket evidence found.` Do not edit Linear.

Why keep the prompt unchanged?

The same prompt gives both sessions the same proposal and questions. The loaded CLAUDE.md is the meaningful difference between the two runs.

The comparison remains observational because generated wording can vary. Look for the required reasoning behaviors instead of identical sentences.

  • Return to the baseline critique from the previous step.
  • Check that the new critique supports factual claims with real Linear issue citations.
  • Find where the new critique names Pause, +5 min, and Skip.
  • Confirm the new critique compares one existing control with four visible controls.
  • Confirm the new critique recommends retaining one on/off control.

That comparison is working. Your sparring partner now combines ticket evidence with persistent review rules to challenge scope growth.

Missing a principle in the response?

  • Enter /context again in the fresh session.
  • Confirm CLAUDE.md appears under Memory files.
  • Retry the unchanged prompt after confirming the file loaded.

If the result still misses a rule, help me compare my principles-aware critique with the loaded CLAUDE.md rules.

Your principles-aware critique now points to a smaller product direction. Next, you will turn that recommendation into a durable ticket update and decision record.

Simplify the Ticket and Record the Decision

Your fresh Claude Code session has challenged the bloated proposal with evidence from Linear. It has also shown that one on/off control preserves the core flow.

A critique becomes durable product alignment when the shared ticket changes. The reasoning also needs a permanent record.

In this step, get ready to:
  • Attach both critiques to the proposal with their citations preserved.
  • Replace the bloated proposal with the one-control scope.
  • Record the choice in a cited decision log.
Attach both critiques to the proposal

Comments keep each critique beside the issue it evaluates. This gives the team a shared evidence trail after the terminal session ends.

How to label the critique evidence

  • The Baseline Critique comment contains the baseline response with every ticket citation unchanged.
  • The Principles-Aware Critique comment contains the latest response with every ticket citation unchanged.

Claude Code may request permission before it writes either comment to Linear.

  • Copy the baseline critique you preserved in Step 3.
  • Switch back to the active Claude Code session.
  • Ask Claude Code to add both critiques to the recorded proposal using the labels above.
  • Approve each Linear comment action if Claude Code requests permission.
  • Return to the recorded proposal issue in Linear.
  • Compare the two new comments with their source critiques.

You'll see two separately titled comments under the proposal. Each comment retains the citations and conclusions from its source critique.

Your critique evidence now survives beyond the terminal session.

Comments missing content?

  • Ask Claude Code to replace an incomplete comment with the full source critique.
  • Confirm that the request names the recorded proposal issue ID.

Get help repairing the proposal comments.

Replace the proposal description

The proposal description is the team's current contract for the work. Linear's description history keeps the superseded scope available for comparison.

What belongs in the replacement?

  • The existing on/off control remains the only main-screen action.
  • The Pause control stays out of v1.
  • The +5 min control stays out of v1.
  • The Skip control stays out of v1.
  • The description cites the relevant brief plus both prior decision issue IDs.
  • Switch back to the active Claude Code session.
  • Ask Claude Code to replace the recorded proposal description with the requirements above.
  • Approve the Linear update action if Claude Code requests permission.
  • Return to the proposal issue in Linear.
  • Open the issue's three-dot menu.
  • Select Show description history.
  • Compare the original description with the current description.

You'll see the original four-control proposal beside the replacement description. The replacement keeps the on/off control as the only main-screen action for v1.

You have now turned the recommendation into a visible scope change with its history intact.

Only seeing one description?

  • Confirm that the current proposal description contains the one-control replacement.
  • Confirm that Claude Code targeted the recorded proposal issue ID.

Get help finding the missing description version.

Create the decision log

A decision log captures why the team chose a scope. It gives future reviewers enough evidence to revisit that choice without reopening the entire debate.

What must the decision log capture?

  • The Context section cites the original proposal plus both prior decision issues.
  • The Options considered section includes adding all three proposed buttons.
  • The Options considered section includes retaining one on/off control.
  • The Options considered section includes deferring alternative timing controls until evidence exists.
  • The Decision section keeps the on/off control as the only main-screen action in v1.
  • The Decision section cites the brief plus the relevant decision issues.
  • The Trade-off section accepts less immediate flexibility for a clearer core flow with lower scope risk.

Claude Code may request permission before it creates the new Linear issue.

  • Switch back to the active Claude Code session.
  • Ask Claude Code to create [Decision Log] Keep one primary focus control inside the Focus Timer Decision Firewall project using the structure above.
  • Approve the Linear issue creation action if Claude Code requests permission.

Before the final check, do you expect the smaller scope to trace back to every earlier ticket? Hold that prediction in mind.

  • Return to the Focus Timer Decision Firewall project in Linear.
  • Open [Decision Log] Keep one primary focus control.
  • Check each section against the structure above.
  • Return to [Proposal] Add quick controls to Focus Mode.
  • Reopen the issue's three-dot menu.
  • Select Show description history for the final comparison.

What should I see?

  • The proposal history shows the original four-control scope plus the current one-control replacement.
  • The Context section cites the original proposal plus both prior decisions.
  • The Options considered section names all three scope choices.
  • The Decision section retains only the on/off main-screen control in v1.
  • The Trade-off section records the flexibility given up for a clearer core flow with lower scope risk.
  • The citations connect the decision log to the proposal plus the brief plus both earlier decisions.

Decision log missing citations?

  • Ask Claude Code to update the same decision log issue with the generated proposal issue ID.
  • Ask Claude Code to add the generated brief plus decision issue IDs.
  • Confirm that each cited ID opens the expected Linear issue.

Get help repairing the decision log evidence.

That closes the loop. Your product history now preserves the critique plus the scope change plus the reasoning behind the choice.

Secret mission

Test a Decision Reversal

Product rules can change for a valid reason. Create one later decision with a narrow accessibility exception, then test whether your sparring partner resolves the conflict using evidence from both decisions.

Clean Up Your Resources

Clean Up Your Resources

Choose whether to keep your Linear Free project available, pause its connection, or delete its artifacts. Claude Code subscription or Console usage costs may still apply.

Resources you used:

  • The Focus Timer Decision Firewall project containing its issues, comments, and description history.
  • The saved Linear authorization for the linear-server MCP connection.
  • The local decision-firewall folder containing CLAUDE.md.

Keep everything running

No action is needed. Choose this if you want to reuse the decision workspace for future product reviews.

  • Retain the Focus Timer Decision Firewall project as your shared decision record.
  • Leave linear-server enabled for future evidence retrieval.
  • Keep the decision-firewall folder for its product principles.

Pause - I'll come back to this later

Disable the MCP connection to pause Linear access from Claude Code. Your Linear project and local folder stay available.

  • Return to the Claude Code session from earlier.
  • Enter /mcp to view the server status.
  • Select linear-server.
  • Disable linear-server without removing its configuration.

You should see that linear-server is disabled. Its configuration remains available for later.

Delete - I don't want to use this again

Remove every project artifact if you do not plan to reuse this workflow. This choice also removes the local project memory from your Mac.

Delete the Linear project:

  • Return to the Focus Timer Decision Firewall project in Linear.
  • Open the three-dot menu beside the project name.
  • Select Delete.
  • Open Recently deleted projects to confirm the project appears there.

What Happens to the Deleted Project?

Linear keeps the deleted project under Recently deleted projects for 30 days. This recovery window includes the issues stored inside the project.

Clear the Linear authorization:

  • Return to the Claude Code session from earlier.
  • Enter /mcp.
  • Select linear-server.
  • Clear the Linear server authentication for this connection.
  • Confirm linear-server no longer has authenticated Linear access.

Delete the local folder:

  • Enter decision-firewall in Finder's search field.
  • Select the decision-firewall folder.
  • Delete the selected folder from Finder.
  • Confirm Finder no longer lists decision-firewall.

Nice Work!

Nice Work!

You did it. You built an evidence-grounded product sparring workflow using Linear with Claude Code.

You've learned how to:

  • Build a citable product workspace in Linear for a minimal focus timer. Preserve the proposal's description history. Record the final scope in a structured decision log.
  • Connect Claude Code to the Linear MCP server to retrieve ticket evidence. Support factual claims with real issue IDs. Separate evidence from inference when ticket support is missing.
  • Compare an evidence-only baseline with a principles-aware critique from a fresh session. Use CLAUDE.md to count the shift from one visible control to four. Recommend the one-control alternative that protects the core outcome.
  • Secret Mission: Test a later scoped decision reversal. Cite both the original decision and its replacement. Apply the accessibility exception only within its defined scope.

Ready to quiz yourself?