diff --git a/components/InstallSection.js b/components/InstallSection.js
index b5f6194..55c7d8e 100644
--- a/components/InstallSection.js
+++ b/components/InstallSection.js
@@ -47,7 +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. No account or hosted service is required.
+ 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.
diff --git a/components/MastHead.js b/components/MastHead.js
index 550b5d5..82b1899 100644
--- a/components/MastHead.js
+++ b/components/MastHead.js
@@ -50,10 +50,13 @@ export default function Home({ githubStats }) {
Automate the UI-only work your APIs can’t reach.
- OpenAdapt compiles demonstrations into governed
- workflows across browser, desktop, RDP, and
- Citrix. It verifies consequential results and
- halts when it cannot prove the intended outcome.
+ OpenAdapt compiles demonstrations into one
+ governed loop across browser, desktop, RDP, and
+ Citrix. Browser runs in production today;
+ desktop, RDP, and Citrix run through
+ customer-controlled qualification. It verifies
+ consequential results and halts when it cannot
+ prove the intended outcome.
Verified business effects · fail-closed execution ·
diff --git a/components/Pricing.js b/components/Pricing.js
index 69fcbd5..aa0fb9c 100644
--- a/components/Pricing.js
+++ b/components/Pricing.js
@@ -269,7 +269,7 @@ export default function Pricing({ hostedOffer = null }) {
priceDetail={
hostedOffer?.cadence || LAUNCH_PRICE_CADENCE
}
- description="Run approved workflows with history, evidence, usage, and governed updates in one managed control plane."
+ description="For developers and teams evaluating browser workflows on non-regulated data: run approved workflows with history, evidence, usage, and governed updates in one managed control plane. Regulated data and production SLAs are scoped separately through qualification."
features={[
'Managed execution, evidence, usage, and workflow updates',
'Separate from enterprise qualification',
diff --git a/components/ProductStatus.js b/components/ProductStatus.js
index 2d8b114..3ad5835 100644
--- a/components/ProductStatus.js
+++ b/components/ProductStatus.js
@@ -47,6 +47,21 @@ export default function ProductStatus() {
accessibility elements, and remote visual anchors are never
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{' '}
+
+ qualification evidence
+
+ .
+
diff --git a/cypress/e2e/public-surface-coherence.cy.js b/cypress/e2e/public-surface-coherence.cy.js
index 5179d50..721ba12 100644
--- a/cypress/e2e/public-surface-coherence.cy.js
+++ b/cypress/e2e/public-surface-coherence.cy.js
@@ -153,10 +153,12 @@ describe('public surface coherence', () => {
)
})
// The refresh failed, so the committed snapshot survives and is
- // labelled honestly as a snapshot rather than a fresh fetch.
+ // labelled honestly as last-known counts rather than a fresh fetch. The
+ // committed fallback carries no real observation time, so it shows a
+ // stable label instead of a drifting "snapshot from Nd ago".
cy.get('[data-testid="footer-repository-source"]').should(
'contain.text',
- 'GitHub · snapshot'
+ 'GitHub · last-known counts'
)
})
})
diff --git a/tests/repositoryStatsView.test.js b/tests/repositoryStatsView.test.js
index 765930c..b2b8b60 100644
--- a/tests/repositoryStatsView.test.js
+++ b/tests/repositoryStatsView.test.js
@@ -55,8 +55,13 @@ test('sourceLabel reports an unreachable-GitHub value as "last updated "',
assert.equal(label, 'GitHub · last updated 5m ago')
})
-test('sourceLabel reports the committed snapshot as "snapshot from "', () => {
- const label = sourceLabel(
+test('sourceLabel reports the committed snapshot as a stable "last-known counts"', () => {
+ // The committed fallback's timestamp is its authoring time, not a real
+ // GitHub observation, so its label must NOT drift with age. A growing
+ // "snapshot from Nd ago" is what made the footer read inconsistently stale
+ // across pages (fresh "updated 5m ago" on the home page versus an
+ // ever-growing snapshot age everywhere else).
+ const threeDaysAgo = sourceLabel(
{
stars: 1648,
forks: 258,
@@ -66,7 +71,18 @@ test('sourceLabel reports the committed snapshot as "snapshot from "', () =
},
NOW
)
- assert.equal(label, 'GitHub · snapshot from 3d ago')
+ const eightDaysAgo = sourceLabel(
+ {
+ stars: 1648,
+ forks: 258,
+ observedAt: new Date(ago(8 * 24 * 60 * 60 * 1000)).toISOString(),
+ source: 'snapshot',
+ stale: true,
+ },
+ NOW
+ )
+ assert.equal(threeDaysAgo, 'GitHub · last-known counts')
+ assert.equal(eightDaysAgo, 'GitHub · last-known counts')
})
test('sourceLabel never prints NaN when the timestamp is missing', () => {
@@ -78,7 +94,10 @@ test('sourceLabel never prints NaN when the timestamp is missing', () => {
sourceLabel({ source: 'stale', stale: true }, NOW),
'GitHub · last-known counts'
)
- assert.equal(sourceLabel({ source: 'snapshot' }, NOW), 'GitHub · snapshot')
+ assert.equal(
+ sourceLabel({ source: 'snapshot' }, NOW),
+ 'GitHub · last-known counts'
+ )
})
test('sourceLabel always begins with the honest "GitHub" attribution', () => {
diff --git a/utils/repositoryStatsView.js b/utils/repositoryStatsView.js
index 3b14936..cfea678 100644
--- a/utils/repositoryStatsView.js
+++ b/utils/repositoryStatsView.js
@@ -29,7 +29,16 @@ function formatRelativeTime(observedAtMs, now = Date.now()) {
// - github : a live count observed this session (updated ago)
// - stale : GitHub was unreachable on the last refresh; show when the last
// real count was observed (last updated ago)
-// - snapshot: no live count yet; show the committed snapshot's age
+// - snapshot: no live count yet; the committed fallback's timestamp is its
+// authoring time, not a real GitHub observation, so it gets a
+// STABLE "last-known counts" label rather than a relative age.
+// Rendering a drifting "snapshot from Nd ago" here is what made the
+// footer read inconsistently stale across pages: the home page
+// seeds a fresh build-time observation ("updated 5m ago") while
+// every other page seeds this committed fallback, so a growing
+// "8d ago" looked like a contradiction. A stable fallback label
+// keeps the two honest and consistent until the client poll
+// resolves both to the same live "updated ago".
function sourceLabel(stats, now = Date.now()) {
const rel = formatRelativeTime(Date.parse(stats && stats.observedAt), now)
if (stats && stats.source === 'github' && !stats.stale) {
@@ -38,7 +47,7 @@ function sourceLabel(stats, now = Date.now()) {
if (stats && stats.source === 'stale') {
return rel ? `GitHub · last updated ${rel}` : 'GitHub · last-known counts'
}
- return rel ? `GitHub · snapshot from ${rel}` : 'GitHub · snapshot'
+ return 'GitHub · last-known counts'
}
module.exports = { formatRelativeTime, sourceLabel }