Skip to content

docs: state public claims directly - #275

Merged
anipotts merged 1 commit into
mainfrom
codex/remove-litotes
Aug 10, 2026
Merged

docs: state public claims directly#275
anipotts merged 1 commit into
mainfrom
codex/remove-litotes

Conversation

@anipotts

@anipotts anipotts commented Aug 10, 2026

Copy link
Copy Markdown
Owner

why

the launch copy still used litotes and negative comparison frames in several guides, evidence labels, run notes, and compatibility pages. direct claims make the reasoning easier to scan and easier to defend.

changes

  • rewrites the active codex, claude code, market, hardware, methodology, field lab, and operating-system copy
  • gives unavailable field-run values and pending scenarios clearer reader-facing labels
  • aligns reader-facing examples and frozen compatibility documentation with the same voice
  • records the rule in both agent guides, the public methodology, and the validation workflow

verification

  • field-run schema and 18-source registry validation
  • Astro type checking, 13-page production build, and 12-route generated-site tests
  • Markdown lint, workflow YAML parsing, diff checks, and the repository-wide litotes scan
  • 45 cc tests and 175 lore tests during the compatibility window

boundaries

historical changelogs retain their original wording. direct safety prohibitions and factual pending or unavailable states remain precise.

Summary by CodeRabbit

  • Documentation

    • Clarified guidance for evidence-based testing, worktree isolation, handoffs, memory review, migration planning, and hardware selection.
    • Updated field-lab and publication records to distinguish measured evidence, pending validation, unavailable metrics, and open questions.
    • Refined market, operating-system, plugin, and evaluation documentation for clearer expectations and terminology.
  • Style

    • Added editorial standards favoring direct claims and consistent labels.
    • Improved wording across examples and user-facing run details.
  • Quality

    • Added validation to flag prohibited negative-comparison phrasing in tracked Markdown content.

Replace litotes and negative comparison framing across the active publication, public run labels, reader-facing examples, and frozen compatibility documentation. Keep factual absence states precise while moving recommendations and explanations into direct language.

Make the preference durable in both agent instruction files, the public methodology, and the validation workflow.

Verified with field-run and source validation, Astro type checking and production build, generated-route tests, Markdown lint, workflow YAML parsing, 45 cc tests, 175 lore tests, and the repository-wide litotes scan.
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The change adds Markdown wording validation and updates repository guidance. It revises evidence, tooling, market, hardware, operating-system, field-lab, and run-page language to distinguish direct claims, pending work, unavailable measurements, and comparable evidence.

Changes

Documentation guidance and evidence

Layer / File(s) Summary
Copy rules and validation
.github/workflows/validate.yml, AGENTS.md, CLAUDE.md, docs/methodology.md, examples/agents/*
The workflow rejects configured negative-comparison phrases in tracked Markdown. Writing guidance requires direct claims and clearer explanations of changes, bugs, and fixes.
Evidence and operating guidance
docs/methodology.md, docs/market/*, docs/shared/operating-system.md
Guidance now distinguishes live sources, repeated evidence, hosted computation, shared resources, isolated files, and untested scope. Market and hardware descriptions use updated evidence and planning terms.
Tool and plugin guidance
docs/claude-code/README.md, docs/codex/README.md, docs/legacy-tools.md, plugins/*/README.md
Documentation updates evidence status, hook validation, worktree boundaries, handoffs, memory sharing, migration review, plugin direction, and evaluation semantics.
Field-lab evidence and status display
docs/field-lab/*, src/pages/field-lab/runs/[runId].astro
Field-lab records and page labels now distinguish pending validation, unavailable measurements, comparable run evidence, and open questions.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the purpose, changes, and verification, but it omits most required template sections, including rollout, risks, and legacy compatibility. Use the required headings and add product decisions, evidence details, rollout scope, risks, and an explicit legacy compatibility confirmation.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main documentation change: replacing indirect wording with direct claims.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/remove-litotes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 389d32ebe2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread plugins/README.md
`cc`, `lore`, and `time` are frozen through 2026-11-05. the compatibility window covers validated security issues, data-loss risks, current claude code compatibility breaks, and installation blockers.

the plugins remain available so existing users can migrate deliberately. they are not the active direction of the repository, and no codex ports are planned.
the plugins remain available so existing users can migrate deliberately. the active guide defines the repository's current direction, and the retirement plan excludes codex ports.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Revert editorial changes to frozen legacy paths

During the active compatibility window, this editorial rewrite and the similar changes under plugins/cc and plugins/lore fall outside the permitted security, data-loss, compatibility, and installation-blocker categories. Changing these frozen artifacts creates avoidable drift in the compatibility surface; keep the voice cleanup confined to the active handbook.

AGENTS.md reference: AGENTS.md:L15-L15

Useful? React with 👍 / 👎.

"https://github.com/anipotts/coding-agent-tips/tree/main/docs/decisions"
],
"notes": "decisions were persisted in signed commits and repository documents; a separate resumed-session recovery was not run"
"notes": "decisions were persisted in signed commits and repository documents; resumed-session recovery remains pending"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the immutable field-run observation

The field-run policy in docs/field-lab/runs/README.md says records are immutable and corrections require a note or replacement run, but this rewrites the August 7 observation from “was not run” to “remains pending,” which adds a later claim about future work directly to the historical record. Preserve the original observation and publish any revised interpretation separately.

AGENTS.md reference: AGENTS.md:L21-L23

Useful? React with 👍 / 👎.

const display = (value: string | number | null) => value ?? 'unavailable';
const statusLabel = { complete: 'complete', partial: 'partially complete', pending: 'planned' }[run.status];
const resultLabel = { pass: 'passed', fail: 'needs work', partial: 'partial', 'not-run': 'not run' };
const resultLabel = { pass: 'passed', fail: 'needs work', partial: 'partial', 'not-run': 'pending' };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep not-run results distinct from pending work

In the current Codex baseline, delegated-analysis is not-run because delegation was outside the execution policy, while the run-level pending status is rendered as “planned.” Mapping every not-run scenario to “pending” therefore turns a deliberate omission into a future-work claim and collapses two distinct result states; retain a distinct reader-facing label for not-run.

AGENTS.md reference: AGENTS.md:L21-L23

Useful? React with 👍 / 👎.


const { run } = Astro.props as { run: FieldRun };
const display = (value: string | number | null) => value ?? 'not recorded';
const display = (value: string | number | null) => value ?? 'unavailable';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid labeling every missing measurement unavailable

The shared formatter is used for fields whose null values have different meanings: in the current run, memoryGb is null because memory was not recorded, while the model identifier was unavailable from the product surface. Rendering both as “unavailable” contradicts the machine note and obscures whether data was inaccessible or simply unmeasured; use a neutral fallback or field-specific labels.

AGENTS.md reference: AGENTS.md:L7-L8

Useful? React with 👍 / 👎.

@anipotts
anipotts merged commit c5151ca into main Aug 10, 2026
4 of 5 checks passed
@anipotts
anipotts deleted the codex/remove-litotes branch August 10, 2026 14:36

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (1)
.github/workflows/validate.yml (1)

126-129: 🎯 Functional Correctness | 🔵 Trivial | 🏗️ Heavy lift

Avoid scanning embedded examples as public prose.

The check scans every line in every tracked Markdown file. The repository’s .markdownlint.jsonc Lines 1-5 describe prompt-heavy content with embedded Markdown examples. A literal phrase in a fenced prompt or quoted source can therefore fail the workflow even when the public prose follows the rule. Restrict the scan to prose or add documented exceptions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/validate.yml around lines 126 - 129, Update the litotes
scan in the workflow so it does not flag matching phrases inside fenced examples
or quoted prompt/source content, while continuing to validate public Markdown
prose. Use the existing .markdownlint.jsonc guidance to define the excluded
embedded-content patterns, or add narrowly documented exceptions without
weakening checks for ordinary prose.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/validate.yml:
- Around line 126-129: Update the git grep check in the validation workflow to
capture its exit status and accept only status 1 as “no match”; continue failing
on status 0 for matches and propagate any other nonzero status as a scan error.
Keep the existing message and exit behavior for detected matches.

In `@docs/claude-code/README.md`:
- Line 29: Update the local installation note in the README by adding its
observation date and environment, or remove the environment-specific “2.1.220 is
installed” statement from the public page. Keep the hands-on protocol status as
a separate statement.

In `@docs/market/hardware.md`:
- Line 33: Update the hosted inference statement in the hardware documentation
to avoid implying that repository work is always local. Scope it specifically to
hosted models using local agents, or explicitly describe both local-agent and
remote-agent execution patterns while preserving the distinction defined by the
hosted-model terminology nearby.

In `@docs/shared/operating-system.md`:
- Line 107: Revise the sentence around the agent infrastructure workflow
comparison to qualify “outperform” by stating the conditions or evidence
supporting that outcome, or explicitly framing it as an inference. Preserve the
recommendation while clearly distinguishing evidence-based observations from
inference.
- Line 60: Update the Git isolation guidance in the operating-system
documentation to clarify that worktrees isolate checked-out tracked files and
branch selection, while branch references, repository objects, remotes, and
other Git metadata remain shared. Preserve the existing warning about shared
runtime resources and parallel implementations.

In `@src/pages/field-lab/runs/`[runId].astro:
- Line 40: Update the display helper to return “unavailable” for empty optional
strings as well as nullish values, while preserving non-empty strings and
numbers; use the existing display symbol in
src/pages/field-lab/runs/[runId].astro rather than changing unrelated schema
definitions.

---

Nitpick comments:
In @.github/workflows/validate.yml:
- Around line 126-129: Update the litotes scan in the workflow so it does not
flag matching phrases inside fenced examples or quoted prompt/source content,
while continuing to validate public Markdown prose. Use the existing
.markdownlint.jsonc guidance to define the excluded embedded-content patterns,
or add narrowly documented exceptions without weakening checks for ordinary
prose.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 16fa3515-04de-49e9-b332-9524f816001d

📥 Commits

Reviewing files that changed from the base of the PR and between e040a55 and 389d32e.

📒 Files selected for processing (20)
  • .github/workflows/validate.yml
  • AGENTS.md
  • CLAUDE.md
  • docs/claude-code/README.md
  • docs/codex/README.md
  • docs/field-lab/README.md
  • docs/field-lab/runs/README.md
  • docs/field-lab/runs/codex-publication-baseline-2026-08-07.json
  • docs/legacy-tools.md
  • docs/market/README.md
  • docs/market/hardware.md
  • docs/methodology.md
  • docs/shared/operating-system.md
  • examples/agents/try-worktree.md
  • examples/agents/write-pr.md
  • plugins/README.md
  • plugins/cc/README.md
  • plugins/cc/eval/README.md
  • plugins/lore/README.md
  • src/pages/field-lab/runs/[runId].astro

Comment on lines +126 to +129
if git grep -n -iE '\bnot (only|just|merely|simply|uncommon|insignificant|impossible|bad|wrong|unreasonable|unlikely|automatically|enough)\b|\bno (small|minor|mean|little)\b' -- '*.md' ':(exclude)CHANGELOG.md' ':(exclude)plugins/**/CHANGELOG.md'; then
echo "litotes or negative comparison framing found"
exit 1
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Propagate git grep errors.

Line 126 runs git grep as the if condition. A match returns 0, and no match returns 1. A scan error can return another nonzero status. Because the condition has no else branch, a scan error can make this validation step pass. Accept only status 1 as “no match” and propagate every other error.

Suggested status handling
           if git grep -n -iE '\bnot (only|just|merely|simply|uncommon|insignificant|impossible|bad|wrong|unreasonable|unlikely|automatically|enough)\b|\bno (small|minor|mean|little)\b' -- '*.md' ':(exclude)CHANGELOG.md' ':(exclude)plugins/**/CHANGELOG.md'; then
             echo "litotes or negative comparison framing found"
             exit 1
+          else
+            status=$?
+            if [ "$status" -ne 1 ]; then
+              echo "Markdown scan failed"
+              exit "$status"
+            fi
           fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if git grep -n -iE '\bnot (only|just|merely|simply|uncommon|insignificant|impossible|bad|wrong|unreasonable|unlikely|automatically|enough)\b|\bno (small|minor|mean|little)\b' -- '*.md' ':(exclude)CHANGELOG.md' ':(exclude)plugins/**/CHANGELOG.md'; then
echo "litotes or negative comparison framing found"
exit 1
fi
if git grep -n -iE '\bnot (only|just|merely|simply|uncommon|insignificant|impossible|bad|wrong|unreasonable|unlikely|automatically|enough)\b|\bno (small|minor|mean|little)\b' -- '*.md' ':(exclude)CHANGELOG.md' ':(exclude)plugins/**/CHANGELOG.md'; then
echo "litotes or negative comparison framing found"
exit 1
else
status=$?
if [ "$status" -ne 1 ]; then
echo "Markdown scan failed"
exit "$status"
fi
fi
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/validate.yml around lines 126 - 129, Update the git grep
check in the validation workflow to capture its exit status and accept only
status 1 as “no match”; continue failing on status 0 for matches and propagate
any other nonzero status as a scan error. Keep the existing message and exit
behavior for detected matches.

primary source: [official claude code documentation](https://code.claude.com/docs/en)

local note: 2.1.220 is installed, but the current hands-on protocol in [methodology](/method/) has not been rerun for this reset. recommendations below that depend on current product behavior are therefore source-verified rather than presented as fresh comparative testing.
local note: 2.1.220 is installed. the current hands-on protocol in [methodology](/method/) remains pending for this reset, so recommendations that depend on current product behavior use source-verified evidence.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file context =="
sed -n '1,45p' docs/claude-code/README.md

echo "== related local note occurrences =="
rg -n "2\.1\.220|installed|source-verified|hands-on protocol|pending" docs/claude-code/README.md

Repository: anipotts/coding-agent-tips

Length of output: 3025


Scope the local installation note.

2.1.220 is installed is environment-specific. Add the observation date and environment, or remove it from the public page. Keep the hands-on protocol status as a separate supported statement.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/claude-code/README.md` at line 29, Update the local installation note in
the README by adding its observation date and environment, or remove the
environment-specific “2.1.220 is installed” statement from the public page. Keep
the hands-on protocol status as a separate statement.

Source: Coding guidelines

Comment thread docs/market/hardware.md
| hosted model, many local agents | provider | your machine | duplicated workspaces and simultaneous development processes |

using a hosted model does not make the workflow resource-free. it removes model inference from the mac while leaving the repository workload local.
hosted inference moves model compute away from the mac while repository work remains local.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Scope the hosted-inference statement.

At Line 33, the statement says repository work remains local for hosted inference. Line 29 defines a hosted-model, remote-agent pattern where code execution is remote. Apply this statement only to hosted models with local agents, or describe both execution patterns.

Proposed wording
-hosted inference moves model compute away from the mac while repository work remains local.
+when the agent runs locally, hosted inference moves model compute away from the mac while repository work remains local.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
hosted inference moves model compute away from the mac while repository work remains local.
when the agent runs locally, hosted inference moves model compute away from the mac while repository work remains local.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/market/hardware.md` at line 33, Update the hosted inference statement in
the hardware documentation to avoid implying that repository work is always
local. Scope it specifically to hosted models using local agents, or explicitly
describe both local-agent and remote-agent execution patterns while preserving
the distinction defined by the hosted-model terminology nearby.

use one branch or worktree per independently reviewable change. parallel agents need explicit ownership of files, subsystems, or responsibilities.

git isolation does not isolate runtime resources. check ports, databases, local services, browser profiles, caches, generated files, and external accounts before running several implementations at once.
git isolation covers tracked files and branches. runtime resources remain shared, so check ports, databases, local services, browser profiles, caches, generated files, and external accounts before running several implementations at once.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Clarify the scope of Git isolation.

At Line 60, worktrees isolate checked-out tracked files and branch selection. Branch references, repository objects, remotes, and other Git metadata remain shared. State this boundary so parallel agents do not treat branch updates as fully isolated.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/shared/operating-system.md` at line 60, Update the Git isolation
guidance in the operating-system documentation to clarify that worktrees isolate
checked-out tracked files and branch selection, while branch references,
repository objects, remotes, and other Git metadata remain shared. Preserve the
existing warning about shared runtime resources and parallel implementations.

- whether the change is easier to understand than the system it replaces.

the same standard applies to agent infrastructure. a large control plane is not automatically more capable than a small, well-understood workflow.
the same standard applies to agent infrastructure. a small, well-understood workflow can outperform a large control plane.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Qualify the outperform claim.

Line 107 presents a comparative outcome without stating its conditions or evidence. State the conditions that support the claim, or label it as an inference.

As per coding guidelines, public documentation must separate observed behavior, official product facts, and inference. Based on learnings, recommendations must follow from the evidence and prose must preserve precision.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/shared/operating-system.md` at line 107, Revise the sentence around the
agent infrastructure workflow comparison to qualify “outperform” by stating the
conditions or evidence supporting that outcome, or explicitly framing it as an
inference. Preserve the recommendation while clearly distinguishing
evidence-based observations from inference.

Sources: Coding guidelines, Learnings


const { run } = Astro.props as { run: FieldRun };
const display = (value: string | number | null) => value ?? 'not recorded';
const display = (value: string | number | null) => value ?? 'unavailable';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Handle empty optional strings as unavailable.

At Line 40, display replaces only nullish values. The schema permits empty strings for productVersion, model, and machineProfile.notes. Those values render as blank fields instead of unavailable. Reject empty strings in the schema or normalize them here.

Proposed fix
-const display = (value: string | number | null) => value ?? 'unavailable';
+const display = (value: string | number | null) =>
+  typeof value === 'string' && value.trim() === '' ? 'unavailable' : value ?? 'unavailable';
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const display = (value: string | number | null) => value ?? 'unavailable';
const display = (value: string | number | null) =>
typeof value === 'string' && value.trim() === '' ? 'unavailable' : value ?? 'unavailable';
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/field-lab/runs/`[runId].astro at line 40, Update the display helper
to return “unavailable” for empty optional strings as well as nullish values,
while preserving non-empty strings and numbers; use the existing display symbol
in src/pages/field-lab/runs/[runId].astro rather than changing unrelated schema
definitions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant