docs(appcircle-ai): AI FAQ and disclaimer page - #20
Conversation
|
Warning Review limit reached
Next review available in: 55 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe PR adds an AI FAQ and disclaimer. It documents AI features, data classification, anonymization, model usage, retention, ownership, consent, controls, self-hosted limitations, and security references. It also adds navigation and support components. ChangesAI documentation
Poem
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
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. Comment |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
appcircle-docs | 8b7d086 | Commit Preview URL Branch Preview URL |
Aug 02 2026, 07:51 PM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
appcircle-docs | 8b7d086 | Commit Preview URL Branch Preview URL |
Aug 02 2026, 07:51 PM |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 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 `@docs/appcircle-ai/ai-faq.md`:
- Line 40: Update the AI Insights / Build Insights Report row in the FAQ table
so the “Who runs the model” cell visibly contains “TBD”, or remove the row until
Product confirms its classification; do not leave the cell containing only an
HTML comment.
- Around line 67-87: Revise the FAQ section around “Is my content retained or
used to train models?” to distinguish raw build-log retention, anonymized
derived-data retention, provider request retention, and model-training
restrictions; remove the opening “No” that incorrectly denies all retention.
Replace the retention-period TODO with the approved retention period and update
the inference table’s “Provider retention” value so it states request-retention
terms, while keeping model-training status in a separate field or statement.
- Around line 35-42: The AI Assistants entry and surrounding distinction in the
FAQ must acknowledge that some integrations, including the Claude assistant
documented in appcircle-claude-assistant.md, can retrieve private organization,
build, or workflow data through MCP rather than only public documentation.
Clarify that anonymization and retention guarantees apply exclusively to
Appcircle-run features, not data retrieved by the user’s AI tool or provider.
- Around line 58-60: Update the “Secrets and environment variables” row in the
data-handling table to remove the absolute “Never sent” claim. Distinguish
platform-managed secret fields, which are removed, from secrets printed into
build logs, which may be included if anonymization does not detect them, using
the same best-effort qualification described in the anonymization section.
- Around line 10-15: Remove the nested HTML comment marker in the draft
checklist, specifically the inner TODO comment reference, so the surrounding
comment remains flat and its checklist text stays hidden when rendered.
In `@docs/appcircle-ai/index.md`:
- Around line 31-36: Remove the AI FAQ and Disclaimer entry from the published
index, including the heading and ContentRef to /appcircle-ai/ai-faq, until the
draft FAQ’s unresolved TODOs and draft markers are resolved; alternatively,
exclude the draft page from the published build so it is not publicly
discoverable.
🪄 Autofix (Beta)
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: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ce3ca31d-58a6-4140-8f8b-412aa8c8ce70
📒 Files selected for processing (2)
docs/appcircle-ai/ai-faq.mddocs/appcircle-ai/index.md
5871946 to
22d1c16
Compare
|
Reviewed all six findings against the file and the rendered build. Five applied, one declined. Squashed into a single commit. Applied
Both fixes verified in the built output: zero leaked comment markers, zero empty table cells, Declined
|
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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 `@docs/appcircle-ai/ai-faq.md`:
- Line 140: Update the consent statement near item 5 and the related credit
statements around the FAQ’s consent/credit block to explicitly scope them to
Appcircle-run AI features, not user-run MCP or AI Assistants. Clarify that MCP
access is controlled separately through the MCP disablement setting, while
preserving the existing consent and credit requirements for Appcircle-run
features.
- Line 166: Update the security statement near the Appcircle Security link to
scope its controls, certifications, and data-handling assurances to
Appcircle-controlled AI processing only. Explicitly state that provider terms
and assurances govern provider-side request handling, while preserving the
existing security reference.
- Line 75: Align the policy statements in the AI output section around the FAQ
entry and the corresponding content near the output-derived content discussion
so they use one consistent training policy. Update the Terms of Service wording
to match, removing any conflicting permission-based exception if the policy is
that training is never allowed; retain the existing provider-specific
contractual qualification until it is legally confirmed.
🪄 Autofix (Beta)
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: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e777b64d-2dc3-4635-9f9d-f8e605a06e63
📒 Files selected for processing (2)
docs/appcircle-ai/ai-faq.mddocs/appcircle-ai/index.md
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/appcircle-ai/index.md
22d1c16 to
c7c021d
Compare
|
All three findings from the second review confirmed against the file and applied. Squashed into the same single commit. 1. Consent / credit scope (line 140, 154-156) - the most consequential of the three. Confirmed, and the real scope is wider than the finding states: the consent gate and the AI credit allowance only gate The MCP Server authenticates with a Personal Access Key, which per its own doc "inherits the permissions of your user account". So a member in an organization with A security team reading the old wording could conclude "credits are zero, AI is off" and be wrong. Fixed by splitting the section into features Appcircle runs and features the customer runs, with an explicit warning callout that credits do not disable MCP, and by naming the actual control: Personal Access Key revocation and ordinary role permissions. 2. Training policy contradiction (line 75 vs 128). Confirmed - self-inflicted: line 128 carried over Bitrise's permission carve-out while line 75 was written as an absolute. Removed the carve-out and made it explicit that there is no opt-in to grant. Resolving it surfaced something adjacent that the page was silent on, so it is now disclosed rather than implied: per the ADA Phase 1 design, thumbs-up interpretations may be curated by hand into example cases that sit in the prompt prefix for every organization. That is not model training, and the cases are anonymized or hand-written and human-reviewed, but it is a reuse of derived output and a reader is entitled to know. Added as a short "One exception, stated plainly" subsection with an opt-out. 3. Compliance scope (line 166). Confirmed - it was the last remaining platform-wide claim on a page that otherwise draws the boundary carefully. Scoped to Appcircle-performed processing, with provider-side handling and user-run tooling named as explicitly outside it. Verification: @coderabbitai full review |
|
✏️ Learnings added
✅ Action performedFull review finished. Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 50 minutes. |
c7c021d to
218c323
Compare
|
All nine review threads resolved. Eight applied, one declined with the reasoning below, so none is left hanging. Applied (8) — nested HTML comment; MCP-backed assistant data documented separately; AI Insights cell filled with the real answer rather than Declined (1) — "Do not publish the draft FAQ through this index." The index link is kept. This branch targets Also in this push: Cloud BetaThe Build Error Interpreter is labeled Cloud Beta, and the cloud-only constraint is now stated at first mention instead of only in the self-hosted section at the bottom:
Verification: |
218c323 to
93eb5a7
Compare
|
Three review findings. Two were in this page and are fixed in 1. Step names are not anonymized — fixed. The row read "Build and pipeline metadata (step name, status, duration) → Sent only as needed, in anonymized form". That is not what happens: the ADA design carries Split into its own row saying it is sent as-is, not anonymized, with the reason and a caution to keep secrets out of step names. One consequence worth flagging, since it changes a classification rather than just wording: the step name is now classified non-sensitive, not sensitive, anonymizable. Neither of the other two classes works. "Sensitive, anonymizable" promises anonymization we do not perform on it, and "sensitive, non-anonymizable" promises in the table directly above that the value never reaches a model, which is false for a step name. Non-sensitive is the only class that stays true to the table's own definitions. 2. AI credits are org-level, not per-member — fixed. "A member whose AI credits are 3. The credit-pool wording — belongs to This one is a conflict between this page and the ADA Phase 1 design document, and the finding is that the design document is the side that needs correcting:
Read literally, that says the MCP Server should burn credits too. It does not and cannot — the credit gate is a gateway license scope on That is a different repository, so it cannot ride this commit. Flagging it here so the inconsistency is recorded against the decision that surfaced it. Verification: |
Adds a public AI FAQ / disclaimer under Appcircle AI, modeled on Bitrise's AI FAQ and grounded in the ADA Phase 1 design (ac-service-ai/docs/ada-phase1-analysis.md). This is the page the AI Build Error Interpreter's first-use consent modal links to, so the full disclaimer text lives here and the frontend keeps no copy. Covers: which features use AI and which run on the user's own provider, data classification, training and retention (kept as two separate questions), inference location and the pinned-model policy, the limits of log anonymization, output ownership, the five principles constraining AI features, org-level consent, and how to turn AI off. The Build Error Interpreter is labeled Cloud Beta throughout, with the cloud-only constraint stated at first mention rather than only in the self-hosted section. Claims are deliberately scoped rather than absolute, because a disclaimer must not promise what the implementation cannot hold: - Secrets printed into a build log by a user's own build steps are subject to best-effort detection, not a "never sent" guarantee. - The step name is sent to the model as-is, not anonymized: it has to match the log section marker byte-for-byte, and for a custom script it is text the customer wrote. Classified non-sensitive, since the anonymizable class would promise anonymization we do not perform and the non-anonymizable class promises the value never reaches a model. - Assistant integrations that bundle the MCP Server can retrieve private data, so Appcircle's guarantees do not extend to the user's own AI provider. - The consent gate and the AI credit allowance gate only the features Appcircle runs. They do not restrict MCP access, which is governed by Personal Access Keys and ordinary role permissions - stated explicitly so nobody reads "credits = 0" as "no AI touches our data". Credits are an organization attribute, so the page speaks of an organization's allowance rather than a member's. - The curated example-case library is disclosed: a thumbs-up interpretation may become a reviewed, anonymized example case shown to other organizations. Not model training, but a reuse of derived output, so it is named rather than implied. The page carries no TODO markers - it reads as the finished text so reviewers respond to what would actually publish. The statements still needing legal and product sign-off are tracked in the pull request description instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8183042 to
8b7d086
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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 `@docs/appcircle-ai/ai-faq.md`:
- Around line 57-58: Update the “Source code” row in the FAQ’s data-handling
table to qualify the guarantee: distinguish repository or artifact contents,
which are not sent to models, from source text emitted into build logs, which
follows the best-effort anonymization path and may be sent onward. Remove the
absolute “Not sent to any model” wording while preserving the separate
secrets/environment-variable guidance.
- Around line 113-120: Revise the “Who owns the AI output?” section and its
surrounding statements to use approved, legally vetted qualification rather than
assigning ownership unconditionally. Reference the governing contract terms and
applicable law, and preserve the existing distinction between anonymized
sensitive content and non-sensitive platform data without asserting definitive
legal entitlements.
🪄 Autofix (Beta)
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: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4a3ebef0-a4c5-4fa4-9f2e-4a2771131308
📒 Files selected for processing (2)
docs/appcircle-ai/ai-faq.mddocs/appcircle-ai/index.md
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/appcircle-ai/index.md
| | Source code | Sensitive, non-anonymizable | Not sent to any model by Appcircle | | ||
| | Secrets and environment variables | Sensitive, non-anonymizable | Values you store as secret environment variables are masked by the platform at the source, so they do not appear in a build log to begin with. A secret **printed into the log by your own build steps** is subject to best-effort detection - see [Anonymization](#anonymization-and-its-limits) | |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== docs/appcircle-ai/ai-faq.md outline/preview =="
wc -l docs/appcircle-ai/ai-faq.md
sed -n '1,140p' docs/appcircle-ai/ai-faq.md
echo
echo "== searching Appcircle AI source-code / anonymization statements =="
rg -n "source code|secret|build log|Anonymization|anonymization|model|Sent|send|sent" docs/appcircle-ai/ai-faq.md readme.md CONTRIBUTING.md 2>/dev/null || trueRepository: appcircleio/appcircle-docs
Length of output: 21333
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== inspect relevant CONTRIBUTING docs guidelines =="
if [ -f CONTRIBUTING.md ]; then
wc -l CONTRIBUTING.md
rg -n "docs/|internal links|forward slash|redirects|terminology|headings|tags|screenshots|brand|product naming" CONTRIBUTING.md || true
fi
echo
echo "== exact table/anonymization section context =="
sed -n '45,70p;95,115p' docs/appcircle-ai/ai-faq.mdRepository: appcircleio/appcircle-docs
Length of output: 5186
Qualify the source-code guarantee.
Build logs can contain source text emitted by a build step or compiler, and build logs are sent through the best-effort anonymization path. This row should not overpromise that source code is never sent to a model.
Distinguish repository and artifact contents from source text printed into logs.
Suggested wording
-| Source code | Sensitive, non-anonymizable | Not sent to any model by Appcircle |
+| Source code | Sensitive, non-anonymizable | Repository and artifact contents are not sent by Appcircle; source printed into build logs follows best-effort log anonymization and may be included if detection misses it |📝 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.
| | Source code | Sensitive, non-anonymizable | Not sent to any model by Appcircle | | |
| | Secrets and environment variables | Sensitive, non-anonymizable | Values you store as secret environment variables are masked by the platform at the source, so they do not appear in a build log to begin with. A secret **printed into the log by your own build steps** is subject to best-effort detection - see [Anonymization](#anonymization-and-its-limits) | | |
| | Source code | Sensitive, non-anonymizable | Repository and artifact contents are not sent by Appcircle; source printed into build logs follows best-effort log anonymization and may be included if detection misses it | | |
| | Secrets and environment variables | Sensitive, non-anonymizable | Values you store as secret environment variables are masked by the platform at the source, so they do not appear in a build log to begin with. A secret **printed into the log by your own build steps** is subject to best-effort detection - see [Anonymization](`#anonymization-and-its-limits`) | |
🤖 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/appcircle-ai/ai-faq.md` around lines 57 - 58, Update the “Source code”
row in the FAQ’s data-handling table to qualify the guarantee: distinguish
repository or artifact contents, which are not sent to models, from source text
emitted into build logs, which follows the best-effort anonymization path and
may be sent onward. Remove the absolute “Not sent to any model” wording while
preserving the separate secrets/environment-variable guidance.
| ## Who owns the AI output? | ||
|
|
||
| | Input to the model | Output ownership | | ||
| | --- | --- | | ||
| | Your anonymized sensitive content | **You.** The interpretation of your build failure is yours. | | ||
| | Non-sensitive platform data | Appcircle | | ||
|
|
||
| Appcircle does not reuse or re-train models on output derived from your content. There is no permission you can grant that changes this - it is not an opt-in we offer. |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== file existence and relevant excerpt =="
if [ -f docs/appcircle-ai/ai-faq.md ]; then
sed -n '1,180p' docs/appcircle-ai/ai-faq.md | nl -ba | sed -n '100,130p'
echo
else
echo "docs/appcircle-ai/ai-faq.md not found"
fi
echo "== search for AI output ownership references =="
rg -n "output ownership|Who owns|output derived|derive|ownership|AI output" docs CONTRIBUTING.md README.md .github 2>/dev/null || true
echo "== repository docs/ files with ownership language near AI terms =="
rg -n "\b(AI output|AI-generated|generated output|customer owns|Appcircle owns|output ownership|output derived)\b" docs -S 2>/dev/null | head -100 || trueRepository: appcircleio/appcircle-docs
Length of output: 246
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== file existence =="
[ -f docs/appcircle-ai/ai-faq.md ] && echo "exists" || echo "missing"
echo "== relevant excerpt from docs/appcircle-ai/ai-faq.md =="
awk '{printf "%6d\t%s\n", NR, $0}' docs/appcircle-ai/ai-faq.md | sed -n '1,180p'
echo
echo "== output-ownership and AI ownership references =="
python3 - <<'PY'
import re, pathlib
terms = ["output ownership", "Who owns", "AI output", "AI-generated", "generated output", "customer owns", "Appcircle owns", "output derived", "rerun or re-train", "re-train", "does not reuse"]
for p in [pathlib.Path("docs/appcircle-ai/ai-faq.md"), pathlib.Path("docs"), pathlib.Path(".")]:
print(f"## target: {p}")
for pat in terms:
it = re.finditer(re.escape(pat), p.read_text(errors="replace"), re.I)
hits = [str(m.start()+1) for m in it]
if hits:
print(f" {pat}: {min(hits)}-{max(hits)} ({len(hits)} hits)")
PY
echo
echo "== CONTRIBUTING rule mentions and docs guidelines =="
if [ -f CONTRIBUTING.md ]; then
wc -l CONTRIBUTING.md
python3 - <<'PY'
from pathlib import Path
s = Path("CONTRIBUTING.md").read_text(errors="replace")
terms = ["front matter", "heading hierarchy", "product naming", "brand", "redirects", "screenshots", "legal", "ownership", "trademark", "Docusaurus", "docs"]
for t in terms:
if t.lower() in s.lower():
print(t)
PY
fiRepository: appcircleio/appcircle-docs
Length of output: 16771
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== repository top-level files =="
git ls-files | awk -F/ '{print $1}' | sort -u | sed -n '1,120p'
echo
echo "== CONTRIBUTING.md ownership-adjacent terms =="
if [ -f CONTRIBUTING.md ]; then
python3 <<'PY'
from pathlib import Path
s = Path("CONTRIBUTING.md").read_text(errors="replace").lower()
terms = ["ownership", "legal", "product naming", "brand", "guidelines", "docusaurus", "redirects", "screenshots", "headings", "front matter", "terminology", "trademark"]
for t in terms:
print(f"{t}: {t in s}")
PY
else
echo "CONTRIBUTING.md missing"
fi
echo
echo "== documentation ownership / disclaimer searches =="
python3 <<'PY'
import os, re
from pathlib import Path
terms = [
re.compile(r"\b(ownership|AI output|Who owns|output derived|legal|disclaimer|Contract|applicable law|governed by|terms)\b", re.I),
]
docs = Path("docs")
for path in docs.rglob("*.md"):
text = path.read_text(errors="replace")
hit_terms = [t.pattern for t in terms if t.search(text)]
if hit_terms:
print(f"## {path}")
for line_no, line in enumerate(text.splitlines(), 1):
if any(t.search(line) for t in hit_terms):
print(f"{line_no}: {line.strip()}")
PYRepository: appcircleio/appcircle-docs
Length of output: 880
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== ownership/disclaimer searches in docs =="
python3 <<'PY'
import re
from pathlib import Path
terms = [
re.compile(r"\b(ownership|AI output|Who owns|output derived|legal|disclaimer|Contract|applicable law|governed by|terms)\b", re.I),
]
for path in sorted(Path("docs").rglob("*.md")):
text = path.read_text(errors="replace")
hit_terms = [t.pattern for t in terms if t.search(text)]
if hit_terms:
print(f"## {path}")
for line_no, line in enumerate(text.splitlines(), 1):
if any(t.search(line) for t in hit_terms):
print(f"{line_no}: {line.strip()}")
PY
echo
echo "== exact ownership table and disclaimer section =="
awk '{printf "%6d: %s\n", NR, $0}' docs/appcircle-ai/ai-faq.md | sed -n '112,121p;134,143p'
echo
echo "== static evidence of ownership qualifiers in AI FAQ =="
python3 <<'PY'
from pathlib import Path
text = Path("docs/appcircle-ai/ai-faq.md").read_text(errors="replace")
q = "## Who owns the AI output?"
start = text.index(q)
section = text[start:start + text.index("\n## ", start + len(q))]
for key in ["juris", "law", "Contract", "contract", "terms and", "Terms and", "according to", "per", "as set", "governed by"]:
print(key + ":", key in section)
print("contains unconditional ownership sentences:", any(x in section for x in ["The interpretation of your build failure is yours", "Appcircle does not reuse"]))
PYRepository: appcircleio/appcircle-docs
Length of output: 445
Qualify the AI-output ownership statements.
docs/appcircle-ai/ai-faq.md:115-120 assigns ownership of AI output unconditionally to “You” or “Appcircle” without referencing contract terms or applicable law. These are legal entitlements; use approved, legally vetted wording that avoids publication risk.
🤖 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/appcircle-ai/ai-faq.md` around lines 113 - 120, Revise the “Who owns the
AI output?” section and its surrounding statements to use approved, legally
vetted qualification rather than assigning ownership unconditionally. Reference
the governing contract terms and applicable law, and preserve the existing
distinction between anonymized sensitive content and non-sensitive platform data
without asserting definitive legal entitlements.
What
Adds
docs/appcircle-ai/ai-faq.md- a public AI FAQ and Disclaimer page, plus a link to it from the Appcircle AI index.Modeled on Bitrise's AI FAQ, with the content grounded in our own ADA Phase 1 design.
Why
The AI Build Error Interpreter's first-use consent modal is deliberately a short frontend-owned popup that links to the public AI FAQ, where the full disclaimer text lives (ADA Phase 1 decisions 20 and 26). This page is that target. Without it there is no place the consent modal can point to.
Sections
0= off, manual trigger only)Two guarantees deliberately left qualified
A disclaimer must not promise something the implementation cannot hold. Two claims are therefore scoped rather than absolute:
Still open - do not merge yet
HTML
<!-- TODO -->comments mark every statement that needs a human decision before this is published:Delete each marker once resolved. Please also sanity-check the model table against what actually ships at Beta.
Kept as a draft PR for this reason - the index link stays, because a page the consent modal cannot reach is useless, and the gate belongs on merge rather than on discoverability.
Verification
yarn buildpasses (the site hasonBrokenLinks: "throw", so all internal links resolve). Rendered output checked for leaked comment markers and empty table cells - none.🤖 Generated with Claude Code
Summary by CodeRabbit