Skip to content

docs(appcircle-ai): AI FAQ and disclaimer page - #20

Draft
ozcanovunc wants to merge 1 commit into
developfrom
docs/ai-faq-disclaimer
Draft

docs(appcircle-ai): AI FAQ and disclaimer page#20
ozcanovunc wants to merge 1 commit into
developfrom
docs/ai-faq-disclaimer

Conversation

@ozcanovunc

@ozcanovunc ozcanovunc commented Aug 2, 2026

Copy link
Copy Markdown
Member

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

  • At a glance + the AI-generated content disclaimer
  • Which Appcircle features use AI, and which ones run on your provider (MCP Server, AI Assistants) rather than ours
  • Data classification: what may reach a model and what never does
  • Training and retention as two separate questions
  • Inference location and the pinned-model policy
  • Anonymization and its limits - fail-closed, raw log never leaves the boundary, best-effort with no 100% guarantee
  • Output ownership
  • The five principles constraining AI features (recommendation not action, human judgment, explainability, honest confidence, explicit consent)
  • Consent: Organization Management Manager / Owner, org-level, once
  • Turning AI off (credit allowance 0 = off, manual trigger only)
  • Self-hosted scope, compliance, support

Two guarantees deliberately left qualified

A disclaimer must not promise something the implementation cannot hold. Two claims are therefore scoped rather than absolute:

  1. Secrets. Values stored as secret environment variables are masked by the platform at the source. A secret printed into the log by the user's own build steps is subject to best-effort detection only - this matches what the anonymization section already says, and an unqualified "never sent" would contradict it.
  2. MCP-backed assistants. Some assistant integrations bundle the Appcircle MCP Server and can retrieve private org, build and workflow data. That data goes to the user's own configured provider, so our anonymization / retention / no-training guarantees explicitly do not extend to it.

Still open - do not merge yet

HTML <!-- TODO --> comments mark every statement that needs a human decision before this is published:

  • Legal: per-provider no-training term; per-provider request-retention window; output ownership vs. the Appcircle ToS.
  • Product: retention period for stored interpretations and traces; the self-hosted / air-gapped AI story; the correct trust center / compliance URL.

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 build passes (the site has onBrokenLinks: "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

  • Documentation
    • Added a comprehensive FAQ and disclaimer covering AI features.
    • Documented data processing, anonymization, retention, model usage, ownership, consent, and security practices.
    • Clarified AI-generated output limitations and recommendations.
    • Added information about disabling AI features, consent requirements, credit controls, and self-hosted environment limitations.
    • Documented fail-closed anonymization for build logs and the exclusion of sensitive data.
    • Added a help component to the AI documentation.

@ozcanovunc
ozcanovunc requested a review from SarpBakis23 as a code owner August 2, 2026 15:18
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ozcanovunc, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 1cc9df1f-e3b5-4317-9347-f8aaf84034c9

📥 Commits

Reviewing files that changed from the base of the PR and between 8183042 and 8b7d086.

📒 Files selected for processing (2)
  • docs/appcircle-ai/ai-faq.md
  • docs/appcircle-ai/index.md
📝 Walkthrough

Walkthrough

The 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.

Changes

AI documentation

Layer / File(s) Summary
FAQ structure and navigation
docs/appcircle-ai/ai-faq.md, docs/appcircle-ai/index.md
Adds the FAQ page, AI scope, verification disclaimer, feature descriptions, model ownership details, and an index link.
Data processing and inference
docs/appcircle-ai/ai-faq.md
Documents data classifications, retention, model locations, provider terms, and fail-closed build-log anonymization.
Output ownership and consent controls
docs/appcircle-ai/ai-faq.md
Documents output ownership, operating principles, organizational consent, feedback controls, credit gating, and manual AI execution.
Deployment scope and support
docs/appcircle-ai/ai-faq.md
Documents Cloud Beta and self-hosted behavior, security references, external provider boundaries, support guidance, and the NeedHelp component.

Poem

I’m a rabbit with a FAQ to share,
AI facts are arranged with care.
Logs lose secrets before they fly,
Consent guards the gates nearby.
Check each answer with human sight—
Then hop through docs, clear and bright! 🐇

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the added AI FAQ and disclaimer page.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/ai-faq-disclaimer
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch docs/ai-faq-disclaimer

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.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 2, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

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

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 2, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

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

@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

🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between fd65965 and 5871946.

📒 Files selected for processing (2)
  • docs/appcircle-ai/ai-faq.md
  • docs/appcircle-ai/index.md

Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/ai-faq.md
Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/index.md
@ozcanovunc
ozcanovunc force-pushed the docs/ai-faq-disclaimer branch from 5871946 to 22d1c16 Compare August 2, 2026 18:40
@ozcanovunc
ozcanovunc marked this pull request as draft August 2, 2026 18:41
@ozcanovunc

Copy link
Copy Markdown
Member Author

Reviewed all six findings against the file and the rendered build. Five applied, one declined. Squashed into a single commit.

Applied

  1. Secrets row - "Never sent" removed. Agreed, and this was the most important one: it directly contradicted the anonymization section on the same page. Now distinguishes platform-masked secret environment variables from secrets printed into a log by the user's own build steps, which are best-effort only.
  2. MCP-backed assistants. Confirmed against appcircle-claude-assistant.md - the plugin bundles the MCP Server, so "public documentation only" was wrong. Corrected, and added a warning callout stating that Appcircle's anonymization / retention / no-training guarantees do not extend to data the user's own AI tool retrieves through MCP.
  3. Empty AI Insights cell. Confirmed in the built HTML (<td></td>). Resolved with the real answer rather than TBD: per ai-insights/build-insights.md, get_build_insights_report returns deterministic structured metrics computed by Appcircle, and the rendering is done by the user's own assistant. No LLM on the Appcircle side, so the TODO is closed.
  4. Nested HTML comment. Confirmed - a stray --> was rendering on the page. Flattened. (For the record the checklist text itself was not exposed; only the trailing marker leaked.)
  5. Retention vs. training. Agreed on both points. Split into two separate questions - training is a clean "no", retention honestly lists what is kept - and the model table's retention column no longer carries a no-training statement; training now has its own column.

Both fixes verified in the built output: zero leaked comment markers, zero empty table cells, yarn build green.

Declined

  1. Removing the index link. The remedy does not fit the problem. This targets develop, not production, and the page exists precisely so the Build Error Interpreter's first-use consent modal can link to it - delinking it from the index produces a page nothing can reach. The real gate is merge, not discoverability, so the PR is now marked draft and the open TODOs are listed in the description under "Still open - do not merge yet".

@ozcanovunc ozcanovunc self-assigned this Aug 2, 2026

@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: 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5871946 and 22d1c16.

📒 Files selected for processing (2)
  • docs/appcircle-ai/ai-faq.md
  • docs/appcircle-ai/index.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/appcircle-ai/index.md

Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/ai-faq.md Outdated
Comment thread docs/appcircle-ai/ai-faq.md Outdated
@ozcanovunc
ozcanovunc force-pushed the docs/ai-faq-disclaimer branch from 22d1c16 to c7c021d Compare August 2, 2026 18:50
@ozcanovunc

Copy link
Copy Markdown
Member Author

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 POST /ai/v1/build-analysis. They do not gate the MCP Server, the AI Assistants, or AI Insights - three of the four features listed in this page's own table. get_build_insights_report reaches Appcircle over MCP like everything else.

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 0 AI credits that has never accepted this disclaimer can still connect an assistant and send organization data to their own provider.

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: yarn build green. The site runs onBrokenAnchors: "throw", so the two new intra-page anchors resolve. Rendered output re-checked: zero leaked comment markers, zero empty table cells.

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

@ozcanovunc Confirmed. The three reported findings are addressed. I will perform a full review of the current squashed changes.


✏️ Learnings added
Learnt from: ozcanovunc
URL: https://github.com/appcircleio/appcircle-docs/pull/20

Timestamp: 2026-08-02T18:50:58.992Z
Learning: In `docs/appcircle-ai/ai-faq.md`, organization consent and AI credit allowance apply only to `POST /ai/v1/build-analysis`. They do not disable the MCP Server, AI Assistants, or AI Insights. The MCP Server uses a Personal Access Key and inherits the user account permissions. To prevent MCP access, revoke Personal Access Keys and manage normal role permissions.

Learnt from: ozcanovunc
URL: https://github.com/appcircleio/appcircle-docs/pull/20

Timestamp: 2026-08-02T18:50:58.992Z
Learning: For Appcircle AI documentation, provider model training is prohibited with no opt-in exception. Thumbs-up build interpretations can be human-reviewed and anonymized or hand-written, then reused as prompt-prefix example cases across organizations. This is derived-output reuse, not model training, and users can opt out.

Learnt from: ozcanovunc
URL: https://github.com/appcircleio/appcircle-docs/pull/20

Timestamp: 2026-08-02T18:50:58.992Z
Learning: In `docs/appcircle-ai/ai-faq.md`, compliance and data-handling claims must be scoped to Appcircle-performed processing. Provider-side processing and customer-run AI tooling, including tooling that retrieves data through MCP, are outside this scope.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

✅ Action performed

Full 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.

@ozcanovunc
ozcanovunc force-pushed the docs/ai-faq-disclaimer branch from c7c021d to 218c323 Compare August 2, 2026 19:10
@ozcanovunc

Copy link
Copy Markdown
Member Author

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 TBD; the absolute "Never sent" secrets guarantee qualified; retention split from training; training policy contradiction removed; consent and credit scoped to Appcircle-run features; the compliance assurance scoped to Appcircle-performed processing.

Declined (1)"Do not publish the draft FAQ through this index." The index link is kept. This branch targets develop, not production, and the page exists so the Build Error Interpreter's first-use consent modal has somewhere to link; delinking it from the index produces a page nothing can reach. The gate belongs on merge, which is why this is a draft PR with the open items listed in the description. Resolving the thread records the decision rather than the concern being dropped.

Also in this push: Cloud Beta

The 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:

  • The feature table row reads (**Cloud Beta**) and links to the self-hosted section.
  • The paragraph that scopes the rest of the page to Appcircle-run features now names it as a Cloud Beta and notes that Beta behavior and limits may change between releases.
  • The self-hosted section is narrowed to the claim we can actually make. It previously said "the AI features described here are available in Appcircle cloud only", which overreached: it swept in the MCP Server and the AI Assistants, whose self-hosted behavior is not something this page has established. It now speaks only for the Build Error Interpreter, and the TODO asks Product to confirm the other two rather than asserting on their behalf.

Verification: yarn build green with onBrokenAnchors: "throw", so the new #self-hosted-appcircle link resolves. Single squashed commit, 218c323f.

@ozcanovunc
ozcanovunc force-pushed the docs/ai-faq-disclaimer branch from 218c323 to 93eb5a7 Compare August 2, 2026 19:16
@ozcanovunc

Copy link
Copy Markdown
Member Author

Three review findings. Two were in this page and are fixed in 8183042a, kept as a separate commit on top of the original. The third is not in this repo.

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 stepName through the request body byte-for-byte so it matches the log section marker, echoes it back in the response, and writes it as a log context field. For a custom script the step name is text the customer wrote.

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 0" described a limit that does not exist. usageMonthlyAiCreditCount lives on the organization group and the license role; there is no per-user credit. Reworded to the organization's allowance. The rest of the page already said "per-organization", so this was the only occurrence.

3. The credit-pool wording — belongs to ac-service-ai, not this PR.

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:

  • ADA line 126: "Every AI feature draws from the same pool at a flat 1 credit per call"
  • ADA line 314: "A second AI feature draws from the same pool at the same flat 1 credit per call"

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 POST /ai/v1/build-analysis, and MCP does not pass through it. This FAQ is the accurate side, so nothing here changes. The fix is every AI featureevery Appcircle-run AI feature in ac-service-ai/docs/ada-phase1-analysis.md, in both places.

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: yarn build green. Branch is now two commits: 93eb5a7e (the page) and 8183042a (these corrections).

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>
@ozcanovunc
ozcanovunc force-pushed the docs/ai-faq-disclaimer branch from 8183042 to 8b7d086 Compare August 2, 2026 19:48

@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: 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

📥 Commits

Reviewing files that changed from the base of the PR and between 22d1c16 and 8183042.

📒 Files selected for processing (2)
  • docs/appcircle-ai/ai-faq.md
  • docs/appcircle-ai/index.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/appcircle-ai/index.md

Comment on lines +57 to +58
| 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) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 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 || true

Repository: 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.md

Repository: 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.

Suggested change
| 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.

Comment on lines +113 to +120
## 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 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 || true

Repository: 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
fi

Repository: 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()}")
PY

Repository: 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"]))
PY

Repository: 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.

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