Skip to content

Commit 436c523

Browse files
authored
docs/ci: land signed wave2 packet, host-process gate, and Next security floor (#63)
* docs: close wave2 cortexpilot decision-control packet * ci: add host-process safety gate to quick feedback * fix: bump dashboard next security floor
1 parent bc5990e commit 436c523

24 files changed

Lines changed: 363 additions & 160 deletions

File tree

.github/workflows/ci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,11 @@ jobs:
267267
set -euo pipefail
268268
bash scripts/check_workflow_static_security.sh
269269
270+
- name: Host-process safety gate
271+
run: |
272+
set -euo pipefail
273+
npm run scan:host-process-risks
274+
270275
- name: Quick policy / doc / hygiene gates
271276
env:
272277
CORTEXPILOT_DOC_GATE_MODE: ci-diff

DISTRIBUTION.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@ change set.
1515
Today CortexPilot officially ships a public repo front door, a GitHub Pages
1616
product front door, one proof-first public workflow baseline, a repo-local
1717
read-only MCP server, a published PyPI package, a live Official MCP Registry
18-
entry, local coding-agent starter/bundle materials, and a live ClawHub skill.
18+
entry, and a live ClawHub skill.
1919

2020
It does not yet officially ship a hosted operator service, a public write-capable
2121
MCP, a Docker distribution path, or standalone npm releases. OpenHands/extensions
2222
and MCP.so submissions are filed, but they still depend on external review or
2323
intake handling rather than repo-only publication.
2424

25+
Lane order today is:
26+
27+
1. `pure_mcp`
28+
2. `pure_skills`
29+
3. local starter/example bundle materials
30+
2531
## Status labels
2632

2733
- `shipped`: part of the official public distribution today
@@ -54,9 +60,9 @@ intake handling rather than repo-only publication.
5460
| Claude Code starter | `starter-only` | Project-local `.claude` and `.mcp.json` starter | `examples/coding-agents/claude-code/` | local project wiring only | keep truthful; do not relabel as marketplace package |
5561
| OpenClaw starter | `starter-only` | Local config seed for the same read-only MCP and compatible bundle | `examples/coding-agents/openclaw/` | local config + local plugin path | keep truthful; do not relabel as ClawHub publication |
5662
| Cross-tool coding-agent bundle | `bundle-compatible` | Local bundle compatible with Codex local marketplace installs, Claude plugin-dir development, and OpenClaw local plugin loading | `examples/coding-agents/plugin-bundles/cortexpilot-coding-agent-bundle/` | local bundle metadata + repo-aware MCP wrapper | keep local-install contract; no published listing claim |
57-
| Repo-owned adoption-router skill | `shipped` | Cross-tool routing skill with `SKILL.md` + `manifest.yaml`, shared between the repo bundle and external skill distribution | `examples/coding-agents/plugin-bundles/cortexpilot-coding-agent-bundle/skills/cortexpilot-adoption-router/` | repo-owned skill contract, local bundle plus external skill publication | keep the repo bundle and published skill receipts aligned |
63+
| Repo-owned adoption-router skill | `shipped` | Cross-tool routing skill with `SKILL.md` + `manifest.yaml`, shared between the public skill packet, the repo bundle, and external skill distribution | `public-skills/cortexpilot-adoption-router/` | repo-owned skill contract, public skill packet plus local bundle example | keep the public packet, repo bundle, and published skill receipts aligned |
5864
| ClawHub skill (`cortexpilot-adoption-router`) | `shipped` | Published OpenClaw skill for honest CortexPilot adoption routing | `https://www.clawhub.ai/skills/cortexpilot-adoption-router` | skill registry, no hosted CortexPilot account, no write-capable MCP | keep the skill copy aligned with the repo bundle and public boundary |
59-
| OpenHands/extensions submission | `submitted-externally` | Public skill submission for the same adoption-router artifact | `https://github.com/OpenHands/extensions/pull/152` | host review flow, not live until merged | track review without overclaiming a merged listing |
65+
| OpenHands/extensions submission | `submitted-externally` | Public skill submission receipt for the same adoption-router artifact | `https://github.com/OpenHands/extensions/pull/151` | host review flow, not live until merged | track review without overclaiming a merged listing |
6066
| MCP.so submission | `submitted-externally` | Directory submission for the public read-only MCP server | `https://github.com/chatmcp/mcpso/issues/1559` | directory intake flow, not live until accepted | keep the issue body aligned with current package + registry truth |
6167
| `@cortexpilot/frontend-api-client` | `publish-ready but deferred` | Thin JS/TS client for control-plane reads and guarded operator add-ons | package metadata + README are publish-ready, but the official install story is still clone / vendor reuse until the first npm release exists | HTTP API with token / mutation-role expectations | publish later only after the first public package release is intentionally cut |
6268
| `@cortexpilot/frontend-api-contract` | `publish-ready but deferred` | Generated route / query / type boundary for frontend consumers | package metadata + README are publish-ready, but the official install story is still clone / vendor reuse until the first npm release exists | typed contract layer only | publish later only after the first public package release is intentionally cut |
@@ -95,7 +101,7 @@ intake handling rather than repo-only publication.
95101
These are intentionally outside repo-side completion:
96102

97103
- publish npm packages
98-
- wait for OpenHands/extensions review on PR `#152`
104+
- wait for OpenHands/extensions review on PR `#151`
99105
- wait for MCP.so intake handling on issue `#1559`
100106
- publish a Docker image
101107
- deploy a live hosted operator service

README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ The public story is intentionally narrower than the full monorepo:
1818
Current public boundary: CortexPilot is a repo-backed operator control plane,
1919
not a hosted product, and the shipped MCP surface remains **read-only**.
2020

21+
Current lane order is deliberate:
22+
23+
- **Primary lane** = the read-only MCP package plus the Official MCP Registry entry
24+
- **Secondary lane** = the adoption-router public skill packet
25+
- **Companion/example lane** = local starter kits and coding-agent bundle examples, which are not the canonical public root
26+
2127
[Quickstart](#quickstart) · [First Proven Workflow](https://xiaojiou176-open.github.io/CortexPilot-public/use-cases/) · [Compatibility Matrix](https://xiaojiou176-open.github.io/CortexPilot-public/compatibility/) · [Distribution Contract](DISTRIBUTION.md) · [Distribution Status](https://xiaojiou176-open.github.io/CortexPilot-public/distribution/) · [Docs](docs/README.md) · [Architecture](docs/architecture/runtime-topology.md) · [AI + MCP + API Surfaces](https://xiaojiou176-open.github.io/CortexPilot-public/ai-surfaces/) · [Builder Quickstart](https://xiaojiou176-open.github.io/CortexPilot-public/builders/) · [Releases](https://github.com/xiaojiou176-open/CortexPilot-public/releases)
2228

2329
![CortexPilot command tower showcase card](docs/assets/storefront/command-tower-showcase-card.svg)
@@ -26,13 +32,13 @@ not a hosted product, and the shipped MCP surface remains **read-only**.
2632

2733
The shortest truthful answer today is:
2834

29-
> CortexPilot officially ships a public repo, a public Pages front door, a repo-local read-only MCP surface, a published PyPI package, a live Official MCP Registry entry, and a live ClawHub skill. OpenHands/extensions and MCP.so submissions are filed with public receipts, while hosted service, write-capable MCP, Docker distribution, and standalone npm releases remain deferred.
35+
> CortexPilot officially ships a public repo, a public Pages front door, a repo-local read-only MCP surface, a published PyPI package, a live Official MCP Registry entry, and a live ClawHub skill. The adoption-router skill is the secondary public lane. Local coding-agent starters and bundle examples remain companion/example materials, not the canonical public root. OpenHands/extensions and MCP.so external receipts exist, while hosted service, write-capable MCP, Docker distribution, and standalone npm releases remain deferred.
3036
3137
Use these buckets:
3238

3339
- **Shipped now**: repo, Pages, proof-first docs, read-only MCP, PyPI package, Official MCP Registry entry, ClawHub skill
34-
- **Starter-only**: Codex / Claude Code / OpenClaw local starter kits and bundle examples
35-
- **Submitted externally**: `OpenHands/extensions#152` and `chatmcp/mcpso#1559` are filed and await host review
40+
- **Starter-only / example lane**: Codex / Claude Code / OpenClaw local starter kits and local coding-agent bundle examples
41+
- **Submitted externally**: `OpenHands/extensions#151` and `chatmcp/mcpso#1559` are public receipts and still await host acceptance
3642
- **Publish-ready but deferred**:
3743
`@cortexpilot/frontend-api-client`,
3844
`@cortexpilot/frontend-api-contract`

apps/dashboard/next-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/// <reference types="next" />
22
/// <reference types="next/image-types/global" />
3-
import "./.next-storefront-final-capture-english-prod/types/routes.d.ts";
3+
import "./.next/types/routes.d.ts";
44

55
// NOTE: This file should not be edited
66
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.

apps/dashboard/next.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const distDirFromEnv = process.env.NEXT_DIST_DIR?.trim();
55
module.exports = {
66
reactStrictMode: true,
77
distDir: distDirFromEnv || undefined,
8+
allowedDevOrigins: ["127.0.0.1"],
89
experimental: {
910
externalDir: true,
1011
},

apps/dashboard/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"diff2html": "3.4.56",
2424
"dompurify": "3.3.3",
2525
"is-wsl": "2.2.0",
26-
"next": "16.2.1",
26+
"next": "16.2.3",
2727
"playwright": "1.58.2",
2828
"react": "19.2.4",
2929
"react-dom": "19.2.4",

apps/dashboard/pnpm-lock.yaml

Lines changed: 41 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/orchestrator/tests/e2e/test_dashboard_e2e.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,25 +108,33 @@ def test_dashboard_e2e_happy_path(tmp_path: Path) -> None:
108108
page.get_by_test_id("task-id").wait_for(timeout=20_000)
109109
assert "e2e_happy" in page.get_by_test_id("task-id").inner_text()
110110
page.get_by_test_id("allowed-paths-label").wait_for(timeout=20_000)
111-
page.get_by_text("1 条路径").wait_for(timeout=20_000)
112-
page.get_by_text("展开路径详情").click()
111+
page.get_by_text("1 path").wait_for(timeout=20_000)
112+
page.get_by_text("Expand path details").click()
113113
page.get_by_test_id("allowed-paths-content").wait_for(timeout=20_000)
114114
assert "mock_output.txt" in page.get_by_test_id("allowed-paths-content").inner_text()
115115
page.get_by_test_id("event-timeline-title").wait_for(timeout=20_000)
116116
page.get_by_test_id("detail-panel-title").wait_for(timeout=20_000)
117+
page.get_by_test_id("detail-panel-title").scroll_into_view_if_needed()
118+
page.get_by_test_id("tab-reports").scroll_into_view_if_needed()
117119

118-
# allow hydration before tab switch
120+
# Wait until the detail-panel state actually flips to Reports
121+
# instead of assuming the first click lands after hydration.
119122
page.wait_for_timeout(500)
120-
for _ in range(3):
121-
page.get_by_test_id("tab-reports").click()
123+
for _ in range(10):
124+
page.get_by_role("tab", name="Reports").click()
122125
try:
123-
page.get_by_test_id("replay-controls-title").wait_for(timeout=2_000)
124-
page.get_by_test_id("replay-compare-button").wait_for(timeout=2_000)
126+
page.wait_for_function(
127+
"""() => document.querySelector('[data-testid="run-detail-active-tab-state"]')?.textContent?.includes('Reports')""",
128+
timeout=1_000,
129+
)
125130
break
126131
except PlaywrightTimeoutError:
127-
page.wait_for_timeout(300)
132+
page.wait_for_timeout(500)
128133
else:
129-
page.get_by_test_id("replay-controls-title").wait_for(timeout=10_000)
134+
raise AssertionError("Reports tab never became active during the run-detail e2e flow.")
135+
136+
page.get_by_test_id("replay-controls-title").wait_for(timeout=10_000)
137+
page.get_by_test_id("replay-compare-button").wait_for(timeout=10_000)
130138
except Exception: # noqa: BLE001
131139
artifacts_dir.mkdir(parents=True, exist_ok=True)
132140
try:

docs/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ docs inventory. This file is the human-readable summary of that registry.
1818
Daily local verification lives in the root [README](../README.md). Treat this
1919
file as the docs inventory map, not as a second CI manual.
2020

21+
## Public Lane Order
22+
23+
- `pure_mcp` is the primary public machine-readable lane.
24+
- `public-skills/cortexpilot-adoption-router/` is the secondary public adoption lane.
25+
- `examples/coding-agents/` and `examples/coding-agents/plugin-bundles/` are
26+
starter/example lanes only; do not treat them as the canonical public root.
27+
2128
For CI/security/documentation truth, prefer the machine-owned surfaces and
2229
repo-owned gates instead of restating the same rules here:
2330

0 commit comments

Comments
 (0)