chore: rebrand icons + LICENSE cleanup + HANDOFF.md - #1
Merged
Conversation
Swap in the new molecular-graph icon across canvas favicon, in-app logo, and README branding paths. Add HANDOFF.md as the cross-session context doc carried over from the Starfire→Molecule AI migration. Fix stale "Starfire" reference in the pre-commit hook header. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two copyright/use-grant lines still referenced the pre-rebrand legal entity name. Aligns LICENSE with the brand mapping in HANDOFF.md §2. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Apr 14, 2026
Covers today's quality + infra pass: brand/structural cleanup, MCP per-domain refactor (1697 -> 89 lines, 87 tools), canvas ConfirmDialog unification, 4 platform handler decompositions (+47 Go tests), E2E hardening for Phase 30.1/30.6 auth, and two new CI jobs (e2e-api + shellcheck). - CLAUDE.md: updated test counts (Go 536, canvas 357, SDK 121, MCP 97, workspace 1084); documented MCP per-domain split + new api.ts; added handler-decomposition section; Phase 30.1/30.6 auth callout; new CI jobs; env vars cross-ref. - PLAN.md: Phase 31 "Quality + Infra Pass" marked shipped; test totals refreshed to 2,295. - README.zh-CN.md: license badge MIT -> BSL 1.1; added BSL license block. - docs/api-protocol/platform-api.md: registry table gains Auth column documenting Phase 30.1 bearer-token and Phase 30.6 X-Workspace-ID requirements on heartbeat/update-card/discover/peers. - docs/development/local-development.md: updated stale test counts; added e2e-api + shellcheck CI jobs; pointer to new testing-e2e.md. - docs/development/testing-e2e.md: new — per-script reference, auth prerequisites, local run, CI coverage, adding-a-new-check checklist. - docs/edit-history/2026-04-13.md: top-of-file summary section added spanning PRs #1-#8; preserves existing per-feature entries below. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5 tasks
This was referenced Apr 14, 2026
HongmingWang-Rabbit
added a commit
that referenced
this pull request
Apr 14, 2026
…ware feat(platform): TenantGuard middleware — public repo's only SaaS hook (Phase 32 PR #1)
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Apr 14, 2026
- CLAUDE.md: Go test count 740 → 746; MOLECULE_ORG_ID env var documented. - PLAN.md: new "Recently launched (2026-04-14 tick-8)" block covering Phase 32 PR #1 + paired private molecule-controlplane repo scaffolding. - docs/edit-history/2026-04-14.md: tick-8 breakdown. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Apr 14, 2026
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Apr 16, 2026
Code review fixes: - 🟡 #1: Replace python3 with jq in Dockerfile template stages (~50MB → ~2MB) - 🟡 #2: Add clone count verification to scripts/clone-manifest.sh (set -e + expected vs actual count check — fails build if any clone fails) - 🟡 #3: Drop 'unsafe-eval' from CSP (not needed for Next.js production standalone builds, only dev mode). Updated test assertion. - 🟡 #4: Remove broken pyproject.toml from workspace-template/ (it claimed to package as molecule-ai-workspace-runtime but the directory structure didn't match — the real package ships from the standalone repo) - 🔵 #1: Add version-pinning TODO comment to manifest.json - 🔵 #3: Add full repo URLs + test counts for SDK/MCP/CLI/runtime in CLAUDE.md Security (GitGuardian alert): - Removed Telegram bot token (8633739353:AA...) from template-molecule-dev pm/.env — replaced with ${TELEGRAM_BOT_TOKEN} placeholder - Removed Claude OAuth token (sk-ant-oat01-...) from template-molecule-dev root .env — replaced with ${CLAUDE_CODE_OAUTH_TOKEN} placeholder - Both tokens need immediate rotation by the operator Tests: Platform middleware tests updated + all pass.
4 tasks
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 17, 2026
….6, EvoMap Evolver Three new entries from today's survey (MA + TR + CI parallel scan): - OpenAI Codex Agent [HIGH] — relaunched Apr 17 as full autonomous agent product: parallel subagents, cross-session memory, self-wake scheduling, macOS computer control. Distinct threat from openai-agents-sdk. Direct overlap with workspace lifecycle + agent_memories + workspace_schedules. - Qwen3.6-35B-A3B [MEDIUM] — open-weight MoE model (35B/3B active) for agentic coding; HN #1 story today (984 pts); commoditizes model layer for self-hosted orchestrators; erodes cost moat for cloud-locked competitors. - EvoMap Evolver [LOW] — A2A-native GEP self-evolution engine; worker nodes use A2A_HUB_URL protocol compatible with our A2A stack; SKILL.md + Skill Store align with agentskills.io; EvolutionEvent JSONL audit ledger is reference design for governance canvas (#582). Integration opportunity. GH issues filed: - #594: molecule-audit-ledger (HMAC-SHA256, ~7 dev-days, SOC2/EU AI Act) - #595: Cloudflare Artifacts demo before May public beta (2-week window) - #596: add Molecule AI as compound-engineering-plugin target (2-4h upstream PR) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 17, 2026
…4-17 Two new ecosystem entries from daily trending survey: - anthropics/skills (119k★, GitHub trending #1): cross-platform Agent Skills open standard (SKILL.md format); Molecule already natively compliant per GH #677 spike; 26+ adopters (Cursor, Codex, Copilot, Gemini CLI); feeds #676 - microsoft/apm (1.8k★, v0.8.11): Agent Package Manager for apm.yml manifests managing plugins/skills/MCP servers; overlaps with Molecule plugin system; content-security (apm audit) worth borrowing for #675; tracked in GH #694 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This was referenced Apr 17, 2026
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 18, 2026
Two new entries from daily eco-watch survey: - microsoft/markitdown (111k★, MIT): document ingestion MCP tool that fills the #1 content gap across all Molecule AI agent roles. `markitdown-mcp` exposes a single convert_to_markdown(uri) MCP tool supporting PDF/DOCX/PPTX/ XLSX/images/audio/HTML/CSV/JSON/XML/ZIP/YouTube/EPubs. Plugin proposal queued (molecule-markitdown — pending GH_TOKEN rotation). - czlonkowski/n8n-mcp (18.3k★, MIT, v2.47.12): "platform-as-MCP-server" bridge exposing n8n's 400+ integration nodes as 20+ MCP tools. Complements existing n8n entry (line 903). Plugin proposal queued (molecule-n8n — pending token). Both entries added to competitor-snapshot YAML (LOW threat) and ## Entries narrative section. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
HongmingWang-Rabbit
added a commit
that referenced
this pull request
Apr 20, 2026
- org.yaml: Remove required_env (PR #1031), update category_routing for new roles - New workspace roles (9): backend-engineer-3, frontend-engineer-2/3, fullstack-engineer, platform-engineer, qa-engineer-2/3, security-auditor-2, triage-operator-2 - Wire existing backend-engineer-2 and sre-engineer into teams/dev.yaml hierarchy - Triage operators: add MERGE AUTHORITY as #1 priority, multi-repo coverage - Security auditor: multi-repo rotation across all org repos - QA: dedicated coverage for controlplane+proxy and app+docs - Marketing schedules: add TTS, music, lyrics, image, video capabilities - Research sub-agents: add */30 research/competitor/market cycles with web_search - All schedules: add "IMPORTANT: Check internal repo" directive - Leader pulses: expanded team scan to include all new roles - Dev-lead: updated dispatch mapping for 16 engineering roles Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Apr 29, 2026
Open
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
May 3, 2026
Independent code review of #2555 caught two contrast regressions left by the bulk perl pass: 1. text-white → text-ink mass-substitution silently broke destructive and primary buttons. text-ink resolves to #15181c (warm-paper near-black) in light mode — dark text on bg-red-600 / bg-amber-600 / bg-emerald-600 / bg-blue-600 / bg-accent / bg-accent-strong / bg-good / bg-bad fails WCAG contrast and looks broken. Per-line pass flips text-ink → text-white only when a saturated bg utility is present; tinted-state pills (bg-red-950/50 etc.) keep their intentionally-retained text-* literals. 2. Original mapping table was missing bg-zinc-600 (most-used hover-state literal for cancel buttons — caused them to JUMP from warm cream resting state to dark zinc on hover in light mode) and text-zinc-700/800/900 (separator dots and decorative dim text invisible on warm-paper light bg). Extended mapping fills these gaps with bg-surface-card / text-ink-soft. Also: drop stale tailwind.config.ts reference from components.json (file deleted by the v3→v4 migration); switch baseColor zinc → neutral and enable cssVariables since v4 uses CSS-driven tokens. Future shadcn-cli invocations would have failed or written malformed components without this. 27 sites in 27 files affected by #1, ~20 sites in 20 files by #2. 1214/1214 unit tests still pass; build still clean. Findings courtesy of multi-model review per code-review-and-quality skill — different blind spots catch different bugs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 5, 2026
4 tasks
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
Addresses both review subagents' REQUEST_CHANGES verdicts on PR #1929: Code review (correctness) - #1: Move schedule seeding to AFTER provisionWorkspaceAuto succeeds so the scheduler never fires cron rows against a workspace whose backend never wired. Failed-backend workspaces no longer end up with orphan template_schedules rows. - #2: seedTemplateSchedules now returns (seeded, skipped int) so the caller can observe partial-seed states; workspace.go Create logs the (seeded, skipped) pair when skipped > 0, surfacing silent partial-loss that the prior (int) return masked. Security review (hostile-template defenses) - #3 / #4: parseTemplateSchedules reads config.yaml through an io.LimitReader bounded by maxTemplateConfigYAMLBytes (1 MiB) and rejects files over the cap before yaml.Unmarshal runs. Defends against billion-laughs / anchor-explosion DoS. - #3: schedules slice length capped at maxTemplateSchedules (100, 10x the largest current production grid). Hostile template with 50k schedules now rejected at parse time, not after 50k inserts. - #3: cron_expr length capped at maxScheduleCronExprLen (128) per schedule; resolved prompt body capped at maxSchedulePromptBytes (16 KiB) per schedule. Oversized entries are skipped (counted as `skipped`) so one bad row doesn't break the rest. - #3: Seed loop honours ctx.Err() so an aborted Create request stops further inserts rather than running to completion on a dead goroutine. - #8: Schedule names quoted via %q in all log lines so CRLF in a hostile name can't injection-pollute stdout/Loki. Tests - TestParseTemplateSchedules_RejectsOversizeFile — gate against the LimitReader cap (1 MiB + 1 byte of '#'). - TestParseTemplateSchedules_RejectsTooManySchedules — gate against the schedule-count cap (maxTemplateSchedules + 1 minimal entries). - Full handlers test suite still green (17.4s). Non-fix surface - Code-review #3 (runtime-default fallback also seeds): runtime- default templates do not currently ship a schedules: block so this is benign in practice; documented behavior in the comment. - Code-review #4 (files_dir in workspace-template config.yaml): not part of the current template_registry schema; flagged for follow-up if templates start declaring files_dir. - Security-review #7 (cron prompt as agent self-message escalation vector): out of scope per security reviewer's own note; tracked separately. Will file an issue. Verified locally: go vet ./... → clean go build ./... → clean gofmt -d <changed files> → clean go test ./internal/handlers/ → PASS (7 unit tests for parser, full suite 17.4s) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
HongmingWang-Rabbit
added a commit
that referenced
this pull request
Jun 12, 2026
…able provider/model list from the registry P3 item 1 (retire-list #1 surface). GET /templates (templates.go List) now ANNOTATES each registry-known runtime's template with an authoritative registry-served selectable list, sourced from the provider registry (workspace-server/internal/providers, the P2-A synced SSOT) instead of the template's hand-authored config.yaml providers:/runtime_config.models block: - registry_backed: true when the runtime is in the registry runtimes: block. - registry_providers: the runtime's NATIVE provider set (ProvidersForRuntime), each with display_name + auth_env + billing_mode (platform_managed if the registry IsPlatform predicate holds, else byok) — the SSOT the canvas Provider dropdown consumes instead of its hardcoded VENDOR_LABELS map. - registry_models: the runtime's NATIVE model ids (ModelsForRuntime), each annotated with its DERIVED provider (DeriveProvider) + the billing_mode that provider implies — so the canvas shows the billing source of the DERIVED provider (folds in #1931 intent) and can render no model the registry did not list for the runtime ("only registered selectable"). Additive + federation-ready + fail-OPEN: the existing template-served Models/Providers/ProviderRegistry fields are UNCHANGED, so non-registry runtimes (external/mock/kimi/future third-party) and older canvases keep working — a runtime absent from the registry yields registry_backed=false and no synthesized block. NO hard-reject: templates whose model isn't registry-derivable are still served (WARN-level only; legacy-vocab reconcile is P4). Reuses the package-level providerRegistry() accessor + LLMBillingModePlatformManaged/ LLMBillingModeBYOK constants from llm_billing_mode.go (P2-B / #1972, now on main) — one accessor + one constant set for the package; both the billing derivation and this templates projection wrap the same providers.LoadManifest() SSOT and the same wire strings. Proxy ResolveUpstream / billing DeriveProvider untouched (P1/P2). Templates' own config.yaml providers: codegen untouched (P4). TDD: TestTemplatesList_RegistryServesSelectableModels (a template's bogus model id never leaks into the registry-served list; native ids present), TestTemplatesList_RegistryAnnotatesDerivedProviderAndBilling (derived provider + platform_managed/byok per model; provider display_name/auth_env/ billing from the registry), TestTemplatesList_NonRegistryRuntimeFallsOpenToTemplate (mock runtime: registry_backed=false, template fields untouched). All existing TestTemplatesList_* stay green (template-served fields unchanged). Rebased onto main after P2-B (#1972) landed; full handlers+providers suites green alongside it. internal#718 P3 — not merged; CTO merge-go after Five-Axis (UI/API-affecting). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
Both tutorials cited misattributed PRs and claimed shipped runtimes that didn't exist (RFC internal#730 finding): - google-adk-runtime.md: cited 'PR #550' (actually a MemoryTab test suite) + 'already first-class'. Rewritten to the REAL implementation — ADK engine-only (google-adk[mcp]==2.1.0, no [a2a]), Vertex AI via ADC (keyless), a2a-1.x bridge — with correct PR refs (template PR #1, core #2003, ci #26) + a landing-status banner. - gemini-cli-runtime.md: cited 'PR #379' (actually CI cleanup); no gemini-cli runtime exists in manifest/knownRuntimes. Added a correction banner pointing to the real google-adk runtime. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
org_import.go tried to use to skip provisioning after a config-generation failure, but is a recursive function, not a loop — is a compile error. Replace it with a label placed after the provisioning block. This keeps the fail-closed behavior (mark workspace failed + surface the error in the canvas) while still running schedules, channels, and child recursion for the workspace. Researcher review 9329 blocker #1.
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
… EC2 orphan (#1) When cpProv.Start succeeds but the DB UPDATE for instance_id fails, workspace row lacks the instance_id. Without it, later Stop/IsRunning lookups return empty, leaving the EC2 instance orphaned (untouchable and unbilled). Make the persist failure fatal: 1. Mark the workspace failed via markProvisionFailed so the operator sees the problem and can retry. The instance_id is logged prominently so an operator can manually reconcile. 2. DO NOT auto-terminate the live EC2 — the instance may contain valuable state the operator wants to recover. The CP orphan sweeper will handle cleanup if the workspace is later removed. Fixes ticket #1 from Researcher cleanup audit.
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
…ith-visibility (#1) Reviewer RC 9344 requested changes: 1. REMOVED auto-terminate (was not present, reaffirmed no-destroy policy). 2. ADDED bounded retry (3 attempts, 100ms→200ms→400ms backoff) for the instance_id persist UPDATE. Transient DB blips no longer orphan EC2s. 3. If all retries fail → mark workspace FAILED and record orphaned instance_id in broadcast event + last_sample_error for operator/reaper reconciliation. The live EC2 is left running. 4. Scope kept to workspace_provision.go + workspace_provision_test.go only. 5. Fixed test expectations for retry path. Regression tests: - TestProvisionWorkspaceCP_InstanceIDPersistFail_MarksFailed: all-attempts-fail → marked failed + instance_id recorded + Stop NOT called - TestProvisionWorkspaceCP_InstanceIDPersistFail_RetrySucceeds: first-fail-second-success → no failure mark + proceeds normally
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
…2 10782 follow-up) Augments the prior fail-CLOSED fix on reserved-path-review.sh (76a8a057). Researcher adjudication (job 467485/run 346968, on molecule-runner-robot-1-4 image CACHED — confirmed NOT infra) found a SECOND defect: the workflow checks out the BASE ref (f44d688) and runs `bash .gitea/scripts/ reserved-path-review.sh`, but #2570 is the PR that INTRODUCES that script — so on this PR the script is ABSENT on base → 'No such file or directory', the check hard-fails. This is a bootstrap / self-reference problem: the guard gates the very PR that adds the guard. Unfixable without a workflow change. Fix: refine the checkout strategy in the workflow to break the self-reference while preserving the security model: 1. The SCRIPT is now checked out from the PR HEAD (not base), so the gate is always present — including on the bootstrap PR that adds the gate. `actions/checkout` uses `ref: ${{ github.event.pull_request.head.sha }}` for this. (`pull_request_target` ensures the run runs with the BASE commit's permissions, not the PR's — so the PR author cannot inject code that runs in the workflow's auth context. The head checkout is for FILE READING only.) 2. The reserved-paths MANIFEST (.gitea/reserved-paths.txt) is read from the BASE branch via `git show <base.sha>:.gitea/reserved-paths.txt` and staged to .gitea/reserved-paths.txt in the workspace. This preserves the original security intent: a PR author cannot widen the gate by adding new reserved patterns in their own PR (the manifest is base-sourced for every steady-state PR). 3. Bootstrap PR fallback: if `git show` on the base manifest fails (the single PR that INTRODUCES the manifest — base has no file yet), the workflow falls back to the head's manifest and emits a loud `::notice::` log line so reviewers see the bootstrap path ran. The script still executes — this is NOT an unconditional pass; it is a graceful one-time bootstrap. 4. The script is invoked with `RESERVED_PATHS_FILE: .gitea/reserved-paths.txt` so it uses the (base-overridden or head-fallback) manifest we just staged — not whatever the script's own RESERVED_PATHS_FILE default resolves to. 5. The DETECTIVE backstop (audit-force-merge.sh emitting incident.reserved_self_merge) is unchanged — intentionally fail-OPEN-by-design per its own header. New regression tests (5 added on top of the prior 9, now 14 total): T6d: workflow checks out PR HEAD (so the gate script is present, including on the bootstrap PR) T6e: workflow fetches .gitea/reserved-paths.txt from BASE via git show (security model preserved) T6f: workflow logs the bootstrap fallback explicitly T6g: workflow does NOT have an unconditional pass shortcut (re-introduce-fail-open guard) T6h: workflow passes RESERVED_PATHS_FILE explicitly to the script ALL 14 TESTS PASS locally. Combined with the prior fix at 76a8a057: Defect #1 (CR2 10782, fail-OPEN return-code): CLOSED at 76a8a057 (script now branches on MATCH_RC explicitly; 0/1/2 with 2+ failing closed; 9 regression tests lock the contract). Defect #2 (Researcher adjudication, bootstrap / self-reference): CLOSED here (workflow now checks out PR HEAD + reads base manifest via git show + bootstrap fallback for the introducing PR; 5 new regression tests lock the contract). Head moves from 76a8a057 to (new) on the same chore/core-self-merge-guard-reserved-paths branch. The CR-A approval chain (agent-researcher 04:43Z) and CR2 REQUEST_CHANGES (10782, also from agent-researcher) are against the prior head 57557d8c — they will need to re-review this new head. Spec-only execution — no review/decisions, no self-merge. CR2 10782 fix (this is the augmented 03744380).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/app/icon.png), in-app logo (public/molecule-icon.png), and README branding paths (docs/assets/branding/).githooks/pre-commitHANDOFF.mdcapturing cross-session migration contextTest plan
canvas/public/molecule-icon.pngandcanvas/src/app/icon.pngupdated<picture>block resolves (icon used as placeholder for text lockups until real text logos land)go test -race ./...,pytest(workspace-template + sdk),vitest, canvas + mcp-server builds all greenStarfire/agent-molecule/ZhanlinCuirefs outsideHANDOFF.mdand the dated edit-history entry (which references the real externalstarfire-test-pluginrepo, intentionally preserved)🤖 Generated with Claude Code