Skip to content

Commit 3fe7e93

Browse files
wip v26
1 parent e649746 commit 3fe7e93

22 files changed

Lines changed: 630 additions & 237 deletions

protocol-demonstration/data/state.json

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
"assets": [
131131
{
132132
"assetId": "asset_enterprise-auth-migration-rollback-playbook_10f7ba132a",
133-
"depositedAt": "2026-04-20T14:53:19.122Z",
133+
"depositedAt": "2026-04-30T18:48:46.176Z",
134134
"title": "Enterprise auth migration rollback playbook",
135135
"artifactKind": "runbook",
136136
"artifactType": "runbook/operator-playbook",
@@ -2720,7 +2720,7 @@
27202720
},
27212721
{
27222722
"assetId": "asset_proof-carrying-session-validator-patch-kit_535567adae",
2723-
"depositedAt": "2026-04-20T14:53:19.124Z",
2723+
"depositedAt": "2026-04-30T18:48:46.177Z",
27242724
"title": "Proof-carrying session validator patch kit",
27252725
"artifactKind": "patch",
27262726
"artifactType": "code/patch",
@@ -5252,7 +5252,7 @@
52525252
},
52535253
{
52545254
"assetId": "asset_formal-replay-window-validator-proof-bundle_ebe682fd49",
5255-
"depositedAt": "2026-04-20T14:53:19.125Z",
5255+
"depositedAt": "2026-04-30T18:48:46.178Z",
52565256
"title": "Formal replay-window validator proof bundle",
52575257
"artifactKind": "proof",
52585258
"artifactType": "proof/verification-log",
@@ -7380,7 +7380,7 @@
73807380
},
73817381
{
73827382
"assetId": "asset_token-issuer-incident-escalation-notes_cdd908aa03",
7383-
"depositedAt": "2026-04-20T14:53:19.125Z",
7383+
"depositedAt": "2026-04-30T18:48:46.178Z",
73847384
"title": "Token issuer incident escalation notes",
73857385
"artifactKind": "incident-note",
73867386
"artifactType": "notes/incident-retrospective",
@@ -9217,7 +9217,7 @@
92179217
},
92189218
{
92199219
"assetId": "asset_policy-precedence-incident-governor-fixpack_24fd6bb39b",
9220-
"depositedAt": "2026-04-20T14:53:19.127Z",
9220+
"depositedAt": "2026-04-30T18:48:46.179Z",
92219221
"title": "Policy precedence incident governor fixpack",
92229222
"artifactKind": "config",
92239223
"artifactType": "config/policy-change",
@@ -11291,7 +11291,7 @@
1129111291
},
1129211292
{
1129311293
"assetId": "asset_unsafe-patch-review-containment-checklist_d755cefe57",
11294-
"depositedAt": "2026-04-20T14:53:19.127Z",
11294+
"depositedAt": "2026-04-30T18:48:46.180Z",
1129511295
"title": "Unsafe patch review containment checklist",
1129611296
"artifactKind": "runbook",
1129711297
"artifactType": "runbook/operator-playbook",
@@ -13413,7 +13413,7 @@
1341313413
},
1341413414
{
1341513415
"assetId": "asset_deployment-drift-rollback-release-playbook_06609384ae",
13416-
"depositedAt": "2026-04-20T14:53:19.128Z",
13416+
"depositedAt": "2026-04-30T18:48:46.181Z",
1341713417
"title": "Deployment drift rollback release playbook",
1341813418
"artifactKind": "runbook",
1341913419
"artifactType": "runbook/operator-playbook",
@@ -15532,7 +15532,7 @@
1553215532
},
1553315533
{
1553415534
"assetId": "asset_projection-safe-bounded-proof-export-notes_a74e682378",
15535-
"depositedAt": "2026-04-20T14:53:19.128Z",
15535+
"depositedAt": "2026-04-30T18:48:46.182Z",
1553615536
"title": "Projection-safe bounded proof export notes",
1553715537
"artifactKind": "proof",
1553815538
"artifactType": "proof/verification-log",
@@ -17203,7 +17203,7 @@
1720317203
},
1720417204
{
1720517205
"assetId": "asset_session-validator-compatibility-witness-dossier_ced0ee25a5",
17206-
"depositedAt": "2026-04-20T14:53:19.129Z",
17206+
"depositedAt": "2026-04-30T18:48:46.183Z",
1720717207
"title": "Session validator compatibility witness dossier",
1720817208
"artifactKind": "proof",
1720917209
"artifactType": "proof/verification-log",
@@ -19497,7 +19497,7 @@
1949719497
},
1949819498
{
1949919499
"assetId": "asset_auth-audit-receipt-reconciliation-patchset_7a12545802",
19500-
"depositedAt": "2026-04-20T14:53:19.130Z",
19500+
"depositedAt": "2026-04-30T18:48:46.183Z",
1950119501
"title": "Auth audit receipt reconciliation patchset",
1950219502
"artifactKind": "patch",
1950319503
"artifactType": "code/patch",
@@ -21605,7 +21605,7 @@
2160521605
},
2160621606
{
2160721607
"assetId": "asset_polyglot-gateway-rollback-coordination-playbook_16aae88df7",
21608-
"depositedAt": "2026-04-20T14:53:19.131Z",
21608+
"depositedAt": "2026-04-30T18:48:46.184Z",
2160921609
"title": "Polyglot gateway rollback coordination playbook",
2161021610
"artifactKind": "runbook",
2161121611
"artifactType": "runbook/operator-playbook",
@@ -28493,6 +28493,13 @@
2849328493
"Bitcode settlement engine executes deterministic journal settlement."
2849428494
]
2849528495
},
28496+
"review:measured-need": {
28497+
"allow": true,
28498+
"policyRef": "policy://bitcode/spec-v26-active-v27-system-draft/current",
28499+
"reasons": [
28500+
"Bitcode need-review gate may accept, reject, or request remeasurement before fit search."
28501+
]
28502+
},
2849628503
"write:private-branch": {
2849728504
"allow": true,
2849828505
"policyRef": "policy://bitcode/spec-v26-active-v27-system-draft/current",
@@ -28619,4 +28626,4 @@
2861928626
},
2862028627
"latestRun": null,
2862128628
"runHistory": []
28622-
}
28629+
}
Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,40 @@
11
'use client';
22

3-
import React, { memo } from 'react';
3+
import React, { memo, useMemo, useState } from 'react';
44
import { motion } from 'framer-motion';
55

66
import { BITCODE_PUBLIC_COPY } from '@/components/base/bitcode/layout/bitcode-public-copy';
77

88
import { animatedMotionStyle, entranceEase } from './marketing-landing-shared';
99

10+
function renderMicroBlogBody(body: string, highlights: readonly string[]) {
11+
if (!highlights.length) return body;
12+
13+
const escapedHighlights = highlights.map((term) => term.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
14+
const pattern = new RegExp(`(${escapedHighlights.join('|')})`, 'g');
15+
16+
return body.split(pattern).map((part, index) => {
17+
if (!part) return null;
18+
const isHighlighted = highlights.includes(part);
19+
20+
return isHighlighted ? (
21+
<span key={`${part}-${index}`} className="text-emerald-300 [text-shadow:0_0_16px_rgba(101,254,183,0.45)]">
22+
{part}
23+
</span>
24+
) : (
25+
<React.Fragment key={`${part}-${index}`}>{part}</React.Fragment>
26+
);
27+
});
28+
}
29+
1030
export const MarketingLandingGuideCard = memo(function MarketingLandingGuideCard() {
31+
const posts = BITCODE_PUBLIC_COPY.guide.posts;
32+
const [activePostId, setActivePostId] = useState<string>(posts[0].id);
33+
const activePost = useMemo(
34+
() => posts.find((post) => post.id === activePostId) ?? posts[0],
35+
[activePostId, posts],
36+
);
37+
1138
return (
1239
<motion.article
1340
initial={{ opacity: 0, y: 18 }}
@@ -16,24 +43,42 @@ export const MarketingLandingGuideCard = memo(function MarketingLandingGuideCard
1643
className="relative mt-6 max-w-xl overflow-visible rounded-[24px] border border-emerald-300/12 bg-black/25 p-4 pt-5 shadow-[0_20px_60px_rgba(0,0,0,0.32)] backdrop-blur-xl phone:mt-7 phone:pt-6"
1744
style={animatedMotionStyle}
1845
>
19-
<div className="pointer-events-none absolute left-0 top-0 -translate-x-3 -translate-y-1/2 phone:-translate-x-4">
20-
<div className="inline-flex items-center rounded-full border border-emerald-300/10 bg-emerald-400/[0.05] px-3 py-1 text-[10px] uppercase tracking-[0.18em] text-emerald-100/58 shadow-[0_10px_24px_rgba(0,0,0,0.18)] backdrop-blur-xl">
21-
<span>{BITCODE_PUBLIC_COPY.guide.badge}</span>
22-
</div>
46+
<div className="absolute left-0 top-0 flex -translate-x-3 -translate-y-1/2 flex-wrap items-center gap-2 phone:-translate-x-4">
47+
{posts.map((post) => {
48+
const isActive = post.id === activePost.id;
49+
50+
return (
51+
<button
52+
key={post.id}
53+
type="button"
54+
aria-pressed={isActive}
55+
onClick={() => setActivePostId(post.id)}
56+
className={`inline-flex items-center rounded-full border px-3 py-1 text-[10px] uppercase tracking-[0.18em] shadow-[0_10px_24px_rgba(0,0,0,0.18)] backdrop-blur-xl transition ${
57+
isActive
58+
? 'border-emerald-300/18 bg-emerald-400/[0.09] text-emerald-50'
59+
: 'border-emerald-300/10 bg-emerald-400/[0.05] text-emerald-100/58 hover:border-emerald-300/16 hover:bg-emerald-400/[0.08] hover:text-emerald-100/78'
60+
}`}
61+
>
62+
{post.tab}
63+
</button>
64+
);
65+
})}
2366
</div>
2467

2568
<div className="border-b border-emerald-300/10 pb-3 laptop:grid laptop:grid-cols-[minmax(0,1fr)_auto] laptop:items-center laptop:gap-4">
2669
<div className="min-w-0 laptop:pr-2">
2770
<p className="bg-gradient-to-r from-emerald-200 via-emerald-100 to-white bg-clip-text text-[11px] font-semibold uppercase leading-[1.35] tracking-[0.18em] text-transparent phone:text-[12px] phone:tracking-[0.22em]">
28-
{BITCODE_PUBLIC_COPY.guide.title}
71+
{activePost.title}
2972
</p>
3073
</div>
3174
<div className="mt-3 inline-flex max-w-full flex-wrap items-center gap-2 rounded-full border border-emerald-300/10 bg-emerald-400/[0.05] px-2.5 py-1 text-[9px] uppercase leading-4 tracking-[0.18em] text-emerald-100/58 phone:text-[10px] laptop:mt-0 laptop:justify-self-start">
32-
<span>{BITCODE_PUBLIC_COPY.guide.meta}</span>
75+
<span>{activePost.meta}</span>
3376
</div>
3477
</div>
3578

36-
<p className="mt-3 text-[13px] leading-6 text-emerald-100/72">{BITCODE_PUBLIC_COPY.guide.body}</p>
79+
<p className="mt-3 text-[13px] leading-6 text-emerald-100/72">
80+
{renderMicroBlogBody(activePost.body, activePost.highlights)}
81+
</p>
3782
</motion.article>
3883
);
3984
});

uapi/app/application/ApplicationActionWorkbenchCard.tsx

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import React from 'react';
55
import BitcodeChipCloud from '@/components/base/bitcode/execution/BitcodeChipCloud';
66
import BitcodeDetailRowList from '@/components/base/bitcode/execution/BitcodeDetailRowList';
77
import BitcodeMetricGrid from '@/components/base/bitcode/execution/BitcodeMetricGrid';
8+
import { DisabledTooltipWrapper } from '@/components/base/bitcode/overlays/disabled-tooltip-wrapper';
89

910
import { jumpToShellSection } from './application-shell-reading';
1011

@@ -37,6 +38,17 @@ export default function ApplicationActionWorkbenchCard({
3738
secondaryActionDisabled = false,
3839
onSecondaryAction,
3940
}: ApplicationActionWorkbenchCardProps) {
41+
const secondaryAction = secondaryActionLabel && onSecondaryAction ? (
42+
<button
43+
type="button"
44+
disabled={secondaryActionDisabled}
45+
onClick={onSecondaryAction}
46+
className="rounded-full border border-white/10 bg-white/5 px-3 py-2 text-[0.66rem] uppercase tracking-[0.18em] text-neutral-100 transition hover:border-white/18 hover:bg-white/10 disabled:cursor-not-allowed disabled:opacity-60"
47+
>
48+
{secondaryActionLabel}
49+
</button>
50+
) : null;
51+
4052
return (
4153
<article id={id} className="rounded-[1.6rem] border border-white/8 bg-black/20 px-5 py-5">
4254
<div className="flex items-start justify-between gap-3">
@@ -45,16 +57,14 @@ export default function ApplicationActionWorkbenchCard({
4557
<h3 className="mt-2 text-xl font-semibold text-white">{title}</h3>
4658
</div>
4759
<div className="flex flex-wrap items-center justify-end gap-2">
48-
{secondaryActionLabel && onSecondaryAction ? (
49-
<button
50-
type="button"
51-
disabled={secondaryActionDisabled}
52-
onClick={onSecondaryAction}
53-
className="rounded-full border border-white/10 bg-white/5 px-3 py-2 text-[0.66rem] uppercase tracking-[0.18em] text-neutral-100 transition hover:border-white/18 hover:bg-white/10 disabled:cursor-not-allowed disabled:opacity-60"
60+
{secondaryAction && secondaryActionDisabled ? (
61+
<DisabledTooltipWrapper
62+
tooltip="Disabled while another Terminal write is in progress. When enabled, this records the current posture into the Bitcode activity ledger."
63+
placement="top"
5464
>
55-
{secondaryActionLabel}
56-
</button>
57-
) : null}
65+
{secondaryAction}
66+
</DisabledTooltipWrapper>
67+
) : secondaryAction}
5868
<button
5969
type="button"
6070
onClick={() => jumpToShellSection(actionTarget)}

0 commit comments

Comments
 (0)