From b414b703b0140f6c23db8c03ea3a0a085036bc5d Mon Sep 17 00:00:00 2001
From: abrichr
Date: Tue, 18 Aug 2026 11:52:27 -0400
Subject: [PATCH 1/2] docs: scope production qualification claims
---
README.md | 5 ++++-
components/Faq.js | 4 ++++
components/InstallSection.js | 6 +++---
components/MastHead.js | 4 ++--
components/ProductStatus.js | 8 +++----
components/StructuredData.js | 2 +-
pages/index.js | 2 +-
public/llms-full.txt | 29 +++++++++++++++++++++++---
public/llms.txt | 7 +++++++
tests/aiDiscoverability.test.js | 37 +++++++++++++++++++++++++++++++++
tests/publicTruth.test.js | 3 ++-
11 files changed, 91 insertions(+), 16 deletions(-)
diff --git a/README.md b/README.md
index c7e6e655..456d2f9c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
# openadapt-web
-**Lifecycle: Beta**
+**Lifecycle: Internal**
+
+This label classifies the website publishing repository. It does not change the
+OpenAdapt product lifecycle in `public/status.json`, which is Beta.
Source for the [openadapt.ai](https://openadapt.ai) marketing site.
diff --git a/components/Faq.js b/components/Faq.js
index 747be952..a3982774 100644
--- a/components/Faq.js
+++ b/components/Faq.js
@@ -27,6 +27,10 @@ export const faqItems = [
question: 'Is managed hosted execution available?',
answer: 'Yes. OpenAdapt Cloud provides managed browser execution plus run history, reports, usage, and governed workflow updates. Desktop, RDP, and Citrix connect through self-hosted or customer-controlled runtimes under the same governance model. Start from the pricing section, then qualify the first workflow and its verification boundary during onboarding.',
},
+ {
+ question: 'How does OpenAdapt qualify production use?',
+ answer: 'OpenAdapt does not use one platform-wide readiness label. The product lifecycle is Beta. Each production deployment qualifies the exact workflow, application, environment, identity contract, effect verifier, data boundary, and operator responsibilities. The public Cloud readiness page checks service dependencies; it is not an SLA or a workflow certificate. A production SLA or regulated deployment is scoped separately.',
+ },
{
question: 'What software does OpenAdapt work with?',
answer: 'OpenAdapt targets repeated workflows across browser applications, Windows UI Automation, native macOS Accessibility, Linux AT-SPI, RDP, Citrix, and other remote desktop environments. Choose managed browser execution or connect a local, self-hosted, or customer-controlled runtime for desktop, remote, private-system, and regulated workflows.',
diff --git a/components/InstallSection.js b/components/InstallSection.js
index 19507c80..39486e1f 100644
--- a/components/InstallSection.js
+++ b/components/InstallSection.js
@@ -47,9 +47,9 @@ export default function InstallSection() {
One command installs the OpenAdapt launcher and governed
workflow compiler. The same CLI records, compiles, and replays
across browser, Windows, macOS, Linux, RDP, and Citrix under one
- governed loop; browser runs in production today, and the desktop
- and remote surfaces run through customer-controlled
- qualification. No account or hosted service is required.
+ governed loop. Browser is the reference Beta path. Desktop and
+ remote surfaces run through customer-controlled qualification.
+ No account or hosted service is required.
diff --git a/components/MastHead.js b/components/MastHead.js
index 0e4d0356..b29ce573 100644
--- a/components/MastHead.js
+++ b/components/MastHead.js
@@ -58,8 +58,8 @@ export default function Home({ githubStats: initialGithubStats }) {
OpenAdapt compiles demonstrations into one
governed loop across browser, desktop, RDP, and
- Citrix. Browser runs in production today;
- desktop, RDP, and Citrix run through
+ Citrix. Browser is the reference Beta path.
+ Desktop, RDP, and Citrix run through
customer-controlled qualification. It verifies
consequential results and halts when it cannot
prove the intended outcome.
diff --git a/components/ProductStatus.js b/components/ProductStatus.js
index 3ad5835f..7c00c159 100644
--- a/components/ProductStatus.js
+++ b/components/ProductStatus.js
@@ -48,10 +48,10 @@ export default function ProductStatus() {
treated as interchangeable.
- Browser runs in production today; desktop, RDP, and Citrix
- run through customer-controlled qualification. Each surface
- carries its own measured acceptance evidence, published per
- surface in the{' '}
+ Browser is the reference Beta path. Desktop, RDP, and
+ Citrix run through customer-controlled qualification. Each
+ surface carries its own measured acceptance evidence,
+ published per surface in the{' '}
{
+ // Assistants often collapse a Beta product and a live service dependency
+ // check into one global verdict. The published answer must keep product,
+ // workflow, deployment, and SLA status separate.
+ for (const [name, text] of [
+ ['llms.txt', llms],
+ ['llms-full.txt', llmsFull],
+ ]) {
+ const normalized = text.replace(/\s+/g, ' ')
+ assert.match(normalized, /does not use one platform-wide readiness label/i)
+ assert.match(normalized, /product lifecycle is Beta/i)
+ assert.match(normalized, /Each production deployment qualifies the exact workflow/i)
+ assert.match(normalized, /not an SLA or a workflow certificate/i)
+ assert.match(normalized, /Desktop is a Beta supporting surface/i)
+ assert.doesNotMatch(
+ normalized,
+ /no unattended desktop runs/i,
+ `${name} must not invent a platform-wide unattended-run prohibition`
+ )
+ }
+})
+
+test('llms files publish the canonical launcher quickstart', () => {
+ for (const [name, text] of [
+ ['llms.txt', llms],
+ ['llms-full.txt', llmsFull],
+ ]) {
+ assert.match(text, /python -m pip install --upgrade 'openadapt\[browser\]'/)
+ assert.match(text, /openadapt quickstart/)
+ assert.doesNotMatch(
+ text,
+ /^demo-record\b/m,
+ `${name} must not drop the launcher or engine command prefix`
+ )
+ }
+})
+
test('llms.txt points at the canonical machine-readable status', () => {
assert.ok(llms.includes(`${SITE}/status.json`))
assert.ok(llms.includes(`${SITE}/llms-full.txt`))
diff --git a/tests/publicTruth.test.js b/tests/publicTruth.test.js
index 429304d9..3053810c 100644
--- a/tests/publicTruth.test.js
+++ b/tests/publicTruth.test.js
@@ -207,7 +207,8 @@ test('machine-readable use cases do not claim mortgage, LOS, or a healthcare ver
})
test('public repository declares its lifecycle state', () => {
- assert.match(read('README.md'), /Lifecycle: Beta/)
+ assert.match(read('README.md'), /Lifecycle: Internal/)
+ assert.match(read('README.md'), /product lifecycle.*Beta/is)
})
test('lending demo media has durable synthetic evidence provenance', () => {
From 7cd27e13bf6cae5a84ecfa226304722ff2c2ae5e Mon Sep 17 00:00:00 2001
From: abrichr
Date: Tue, 18 Aug 2026 11:59:54 -0400
Subject: [PATCH 2/2] docs: prepare evidence-bound production claim
---
components/Faq.js | 2 +-
components/InstallSection.js | 5 +++--
components/MastHead.js | 3 ++-
components/ProductStatus.js | 8 ++++----
components/StructuredData.js | 2 +-
pages/index.js | 2 +-
public/llms-full.txt | 14 +++++++-------
public/llms.txt | 2 +-
tests/aiDiscoverability.test.js | 27 ++++++++++++++++++---------
9 files changed, 38 insertions(+), 27 deletions(-)
diff --git a/components/Faq.js b/components/Faq.js
index a3982774..c82a35a0 100644
--- a/components/Faq.js
+++ b/components/Faq.js
@@ -29,7 +29,7 @@ export const faqItems = [
},
{
question: 'How does OpenAdapt qualify production use?',
- answer: 'OpenAdapt does not use one platform-wide readiness label. The product lifecycle is Beta. Each production deployment qualifies the exact workflow, application, environment, identity contract, effect verifier, data boundary, and operator responsibilities. The public Cloud readiness page checks service dependencies; it is not an SLA or a workflow certificate. A production SLA or regulated deployment is scoped separately.',
+ answer: 'OpenAdapt qualifies production use per deployment, not with one platform-wide readiness label. Browser is the available end-to-end reference path. Each production deployment qualifies the exact workflow, application, environment, identity contract, effect verifier, data boundary, and operator responsibilities. The public Cloud readiness page checks service dependencies; it is not an SLA or a workflow certificate. A production SLA or regulated deployment is scoped separately.',
},
{
question: 'What software does OpenAdapt work with?',
diff --git a/components/InstallSection.js b/components/InstallSection.js
index 39486e1f..a4a2c0f8 100644
--- a/components/InstallSection.js
+++ b/components/InstallSection.js
@@ -47,8 +47,9 @@ export default function InstallSection() {
One command installs the OpenAdapt launcher and governed
workflow compiler. The same CLI records, compiles, and replays
across browser, Windows, macOS, Linux, RDP, and Citrix under one
- governed loop. Browser is the reference Beta path. Desktop and
- remote surfaces run through customer-controlled qualification.
+ governed loop. Browser is the available end-to-end reference
+ path. Desktop and remote surfaces run through
+ customer-controlled qualification.
No account or hosted service is required.
diff --git a/components/MastHead.js b/components/MastHead.js
index b29ce573..c1b06120 100644
--- a/components/MastHead.js
+++ b/components/MastHead.js
@@ -58,7 +58,8 @@ export default function Home({ githubStats: initialGithubStats }) {
OpenAdapt compiles demonstrations into one
governed loop across browser, desktop, RDP, and
- Citrix. Browser is the reference Beta path.
+ Citrix. Browser is the available end-to-end
+ reference path.
Desktop, RDP, and Citrix run through
customer-controlled qualification. It verifies
consequential results and halts when it cannot
diff --git a/components/ProductStatus.js b/components/ProductStatus.js
index 7c00c159..396bd8cf 100644
--- a/components/ProductStatus.js
+++ b/components/ProductStatus.js
@@ -48,10 +48,10 @@ export default function ProductStatus() {
treated as interchangeable.
- Browser is the reference Beta path. Desktop, RDP, and
- Citrix run through customer-controlled qualification. Each
- surface carries its own measured acceptance evidence,
- published per surface in the{' '}
+ Browser is the available end-to-end reference path.
+ Desktop, RDP, and Citrix run through customer-controlled
+ qualification. Each surface carries its own measured
+ acceptance evidence, published per surface in the{' '}
{
}
})
-test('llms.txt and llms-full.txt never promote a substrate above status.json', () => {
+test('llms.txt and llms-full.txt bind a production-ready claim to immutable evidence', () => {
// status.json is the canonical machine-readable source of truth. The
// superseded ladder wording ("early access", "exploratory") must never
- // reappear, and neither may an unqualified "production ready" claim.
+ // reappear. The target browser claim can publish only with an immutable
+ // acceptance record from the engine or hosted control-plane repository.
for (const [name, text] of [
['llms.txt', llms],
['llms-full.txt', llmsFull],
@@ -381,11 +382,19 @@ test('llms.txt and llms-full.txt never promote a substrate above status.json', (
/early access|exploratory|design.partner/i,
`${name} must not use the superseded maturity ladder`
)
- assert.doesNotMatch(
- text,
- /production[- ]ready|fully certified|guaranteed/i,
- `${name} must not overstate maturity`
- )
+ assert.doesNotMatch(text, /fully certified|guaranteed/i)
+ if (/production[- ]ready/i.test(text)) {
+ assert.match(
+ text,
+ /production-ready for qualified browser workflows/i,
+ `${name} must scope a production-ready claim to qualified browser workflows`
+ )
+ assert.match(
+ text,
+ /Production-readiness evidence:\s+https:\/\/github\.com\/OpenAdaptAI\/(?:openadapt-flow|openadapt-cloud)\/blob\/[0-9a-f]{40}\/\S+/i,
+ `${name} must bind the production-ready claim to an immutable acceptance record`
+ )
+ }
for (const substrate of status.substrates) {
assert.ok(
text.includes(substrate.name),
@@ -448,8 +457,8 @@ test('llms files make production qualification workflow-specific', () => {
['llms-full.txt', llmsFull],
]) {
const normalized = text.replace(/\s+/g, ' ')
- assert.match(normalized, /does not use one platform-wide readiness label/i)
- assert.match(normalized, /product lifecycle is Beta/i)
+ assert.match(normalized, /not with one platform-wide readiness label/i)
+ assert.match(normalized, /Browser is the available end-to-end reference path/i)
assert.match(normalized, /Each production deployment qualifies the exact workflow/i)
assert.match(normalized, /not an SLA or a workflow certificate/i)
assert.match(normalized, /Desktop is a Beta supporting surface/i)