Skip to content

Releases: B1ueMu3ic4m/OPCCompany

v0.7.0 — the delivery shelf

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 19 Sep 11:27
c7d9df9

The delivery shelf

v0.6.0 made the company remember every decision. v0.7.0 answers the boss's
last question: an employee says it shipped X — is X actually there?

One existence door, computed — never stored

ArtifactRecord.existsOnDisk is the single answer, asked fresh every
read: a test encodes a record and proves the verdict NEVER reaches the
snapshot, because a serialized verdict is a stale verdict. Delete a file
after delivery and the row flips on the next look — same door, no state
change.

Every surface speaks it

  • Command center: the artifact-card pill and the delivery dot went
    from decoration to live verdict — green means the file exists RIGHT NOW.

  • opc deliverables [n]: the shelf in your terminal — [OK] /
    [MISSING] row marks and a ghost tally ("2 of 5 recorded deliveries
    have NO file on disk right now"). Pure read: the subprocess regression
    deletes files under a running ledger and asserts the snapshot bytes
    never move.

  • Bridge v1.5 deliverables_list: the same delivery view the command
    center draws (shell and GUI can never disagree about what counts),
    existsNow computed inside the bridge, capped at 50; the six-symbol
    C ABI stays frozen and the unknown-verb hole stays shut next to the new
    case.

  • Flutter shell: a "Delivery shelf" panel with per-row verdict icons,
    pulled on boot / refresh / after-verb — never per frame.

  • macOS: unzip, drag to Applications, brew upgrade --cask opc-company

  • Windows CLI: opc.exe deliverables works out of the box

  • Windows shell: rebuilds against bridge v1.5 (dispatch after tag)

Previous: v0.6.0 (every hand leaves a receipt — decision ledgers
everywhere).

v0.6.0 — every hand leaves a receipt

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 18 Sep 17:36
32680ff

Every hand leaves a receipt

v0.5.0 made the office talk back. v0.6.0 makes it REMEMBER — on every
surface, the company can now tell you who asked, what you decided, and
when.

One attribution door

requesterDisplayName is the single lookup every surface reads from: the
command center's pending rows AND its decided rows now print
"From ". No owner is ever fabricated — a request with no
requester says unassigned, a stale id says unknown employee, and a
test makes sure English users get that from the l10n table, not a literal.

The terminal gets a ledger

opc history [n] — resolved approvals, newest first, each row timestamped
and attributed. Pure read by construction: the subprocess regression
asserts the snapshot bytes literally do not move across a call. opc DateTimeText (the GUI's clock) went public so both surfaces tell time the
same way.

Bridge contract v1.4 — history_list

The decision ledger over the frozen six-symbol ABI, through the same
smuggle channel as v1.3's approval list. Capped at 50 rows by contract so
one reply can never outrun the transport; the unknown-verb refusal stays
shut right next to the new case (tested both ways).

The shell shows "Recent decisions"

A real panel on the v1.4 door: pulled at boot, at refresh, after every
verb — never per frame. Roster names in, ids out, local wall-clock
(the UTC drift was caught in review and pinned). An empty ledger says
"No decisions logged yet" — a young company is not asked to lie.

  • macOS: unzip, drag to Applications, brew upgrade --cask opc-company
  • Windows CLI: opc.exeopc history works out of the box
  • Windows shell: rebuilds against bridge v1.4 (dispatch after merge)

Previous: v0.5.0 (the office talks back — ×N badges, approvals_list).

v0.5.0 — the office talks back

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 18 Sep 15:11
b50b3f9

The office talks back

v0.4.0 taught the pixel office to take orders — click a raised hand, decide
right there. v0.5.0 makes the whole company ANSWER you, on every surface you
happen to be standing.

Raised hands now count

An employee holding more than one decision for you wears a ×N badge on the
bubble itself. Across the room, at a glance: who wants what, and how much.
Approving or rejecting inside the popover prints an honest ✅/❌ seal bound
to the decision event — and self-expires, because a confirmation that never
fades is just decoration.

The bridge learned to answer (contract v1.3)

New query verb approvals_list: the current product's pending approvals as
JSON — id, title, reason, and the requesterID that links a request to its
pixel person — smuggled through the documented last_error channel, rc=0 on
success. The six-symbol ABI stays frozen. Read-only by construction: no
mutation, no writer-guard, contract-tested to leave the support dir
byte-identical.

The Flutter shell wears the same badge

Same rules, same numbers, zero extra bridge calls on the paint path. And
opc products / opc use <id> landed for the terminal boss: list
workspaces, switch through the exact store path the GUI sidebar uses —
unknown ids get a refusal with guidance, never a polite lie.

Honest by construction

Every claim above is pinned by a test that fails if the shape drifts —
including a Swift 6.4 compiler crash found live and walled in with a
contract (ViewBuilder .task closures must not shadow if let bindings;
TypeCheckDecl.cpp:2766). The GIF on this release page is rendered by the
app's own shipping code, badge included.

  • macOS: unzip, drag to Applications, brew upgrade --cask opc-company
  • Windows CLI: opc.exe in the zip below — opc use <id> works out of the box
  • Windows shell: opc_flutter_shell.exe in the shell zip (bridge v1.3 included)

Previous: v0.4.0 (raise hand → approve, offscreen GIF studio).

v0.4.0 — the boss raises a hand and it means something

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 18 Sep 11:08
623a0b2

The boss surface, made physical

Two releases ago the office was a window you watched through. Now it is a floor you run the company from:

  • Raise hand → approve: an employee waiting on you now raises a clickable hand in the pixel office. One click pops their pending approvals (title + reason) and you approve or reject right there — same guarded decision path as opc decide and the desktop shell, so surfaces can never drift or double-decide silently.
  • Real terminal employees, live in the office: Claude Code / Codex / Gemini CLI sessions with per-desk status — thinking, typing, blocked, waiting for you.
  • pendingApprovals(forAgent:) — the office finally asks "what waits on this person", pure read, product-scoped.
  • The hero GIF is honest: every pixel in the README gallery is rendered by the app's own code (swift run OPCDemoGif), offscreen, no mockups.
  • Marketing-UI parity: the gallery mirrors the affordance ring — no animated promises the shipping app can't keep.

Install

  • macOS (14+): brew install --cask B1ueMu3ic4m/tap/opc-company
  • Windows: download OPCCompanyShell-windows-x64-v0.4.0.zip below (self-contained, no runtime install)
  • CLI-only: brew install B1ueMu3ic4m/tap/opcopc approvals / opc decide <id> approve

Verification

Release assets re-download + hash-checked by scripts/verify-release.sh; 622-test suite + 17-bridge e2e + secret-scan green on the tag build before merge. Built on macOS 26 / Windows 2022 CI runners.

v0.3.3 — the boss surface, hardened

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 18 Sep 00:38
64b079f

v0.3.3 — the boss surface, hardened 🔒

中文见下方

For terminal bosses

  • opc approvals — list what waits for your decision, with ids
  • opc decide <id> approve|reject — resolve an approval from your terminal, through the same checked store path the Flutter shell's decide button uses

Trust fixes

  • The decide verb now refuses silent no-ops: double-tapping an approval row or acting on a stale approval list returns an explicit refusal with a reason — never a fake success (same discipline product_select got in v0.3.2).

Proof, not promises

  • New thread-storm regression: 8 worker threads × 960 interleaved C-ABI calls — the main-queue hop path is finally exercised, and the threading contract (v1.2) is now stated honestly in the header
  • New boundary stress: a ~2 MB terminal log and a 100-product company survive digest, snapshot round-trip, and selection sweeps

Assets 资产

  • OPCCompany-v0.3.3.zip — macOS app (Universal, signed) · brew install --cask B1ueMu3ic4m/tap/opc-company
  • OPCCompanyShell-windows-x64-v0.3.3.zip — Flutter shell for Windows 10/11 x64, self-contained (Swift + MSVC runtimes bundled)

v0.3.3 — 老板操作面,加固完毕

终端老板新能力

  • opc approvals — 列出所有等你拍板的审批,带 id
  • opc decide <id> approve|reject — 在终端直接批复,与 Flutter 壳审批按钮走同一条受校验的 store 路径

信任修复

  • decide 动词现在拒绝静默无操作:双击审批行、拿着过期审批列表操作,都会收到明确拒绝和原因——不再假装成功(与 v0.3.2 的 product_select 同一纪律)。

实证而非承诺

  • 新增线程风暴回归测试:8 工作线程 × 960 次交错 C-ABI 调用——主队列跳转路径首次被真正执行,线程契约(v1.2)已在头文件中如实写明前提
  • 新增边界压测:~2 MB 终端日志与 100 产品公司,digest、快照往返、选择扫描全部存活

100% local. MIT. macOS + Windows + headless CLI.

v0.3.2 — the shell grows up

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 17 Sep 13:14
d2e155a

The shell grows up. The Flutter desktop shell stops being a viewer and starts being a control surface.

EN

  • Product switcher over the bridge — the AppBar menu moves between product workspaces through product_select, the same store path the macOS sidebar drives (agent-team restart + save). Unknown ids are refused with a verbatim reason: the bare store call would have been a silent no-op, and a shell that mistakes a no-op for a switch is how shell/core drift starts. Red-green pinned on both sides of the ABI; the refusal is behavior-verified across the real C boundary (shell smoke, now 16 checks).
  • Dark identity — the shell now wears the macOS app's own palette (deep slate + warm gold, same hex constants): one product, not two.
  • Hardening since v0.3.1: Windows shell package export table gets a structural PE gate (pe_check.py, synthesized-PE tests in CI — no Windows box needed); the legacy terminal-log double-write is pruned (snapshots carry ~14% less log duplication, old snapshots still decode); shell transcript caching now invalidates across product switches and cleared log entries.
  • Tests: 601 → 612 Swift; shell suite 24 Dart widget tests green in CI.

中文

  • 桥上的产品切换器——壳顶栏菜单经 product_select 动词在产品工作区之间切换,走的正是 macOS 侧边栏同一条 store 路径(重启团队 + 保存)。未知 ID 一律显式拒绝并原样给出原因:裸调用本是静默无操作,而把无操作当成切换,正是壳与核心漂移的开始。ABI 两侧红→绿钉死;拒绝路径经真实 C 边界行为验证(壳冒烟现 16 项)。
  • 暗色视觉身份——壳启用 macOS 应用同款色板(深板岩 + 暖金,同一组十六进制):一个产品,不再两张脸。
  • v0.3.1 以来的加固:Windows 壳包导出表获得结构化 PE 门(pe_check.py,CI 用合成 PE 做测试,无需 Windows 机器);legacy 终端日志双写已剪除(快照少背约 14% 重复,旧快照照常解码);壳的 transcript 缓存随产品切换与日志清空正确失效。
  • 测试:Swift 601 → 612;壳侧 24 个 Dart widget 测试 CI 全绿。

Assets: OPCCompany-v0.3.2.zip (macOS GUI — brew upgrade --cask opc-company works too) · OPCCompanyShell-windows-x64-v0.3.2.zip (Windows shell package built & live-smoke-tested in CI on this exact commit, and now self-contained: the Swift runtime DLLs travel inside the zip thanks to #79 — unpack, run opc_flutter_shell.exe, no toolchain needed).

v0.3.1 — the polish release: launch seam (#9), tested shell buttons, 5-workflow CI

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 16 Sep 02:14
8fba520

The polish release. Everything new since v0.3.0 is hardening that the cross-platform story needed:

EN

  • Process-launch seam (OPCProcessRunner, closes #9): the portable core now constructs Process() in exactly ONE file. Windows translation lands there: npm's claude.cmd/codex.cmd shims (which CreateProcess refuses) are wrapped as cmd /d /s /c with CommandLineToArgvW-compatible quoting; PATHEXT-aware resolution; NUL//dev/null. macOS behavior byte-compatible (127/124 conventions, drain order, error texts unchanged).
  • Shell UI is now behavior-tested: 9 widget tests drive the real buttons through a scripted fake of the C ABI whose malloc/free contract is checked pointer-by-pointer. Found and pinned a Dart trap along the way: record == compares Map fields by identity.
  • New CI: shell-tests.yml runs dart analyze --fatal-infos + flutter test on every push (official pinned SDK). The repo now ships 5 workflows, all green per push. Tests: 593 → 596.
  • Fixed a live packaging bug: flutter_shell/macos/Runner.xcodeproj had never been committed (root *.xcodeproj ignore swallowed it) — flutter build macos from a bare clone was impossible. Now tracked (deployment target raised 10.15→14.0; modern Xcode rejects 10.15).

中文

  • 进程启动缝 (#9 关账):可移植核心的 Process() 构造收进唯一文件。Windows 转译在此落地:npm 的 claude.cmd/codex.cmd(CreateProcess 拒执)按 CommandLineToArgvW 兼容引号规则包进 cmd /d /s /c;PATHEXT 感知解析;NUL//dev/null。macOS 行为逐字节兼容。
  • 壳 UI 获得行为测试:9 个 widget 测试用 C ABI 脚本化替身驱动真实按钮,malloc/free 契约按指针逐个核验。
  • 新 CI:shell-tests.yml 每次 push 跑 analyze+测试;仓库共 5 条工作流全绿护航。测试 593 → 596
  • 修复真实打包缺陷:壳的 macOS 工程文件从未入库(被根 .gitignore*.xcodeproj 吞掉)——裸 clone 无法构建 macOS 壳。现已入册(部署目标 10.15→14.0)。

Assets: OPCCompany-v0.3.1.zip (macOS GUI — brew upgrade --cask opc-company works too) · OPCCompanyShell-windows-x64-v0.3.1-preview.zip (Windows shell package assembled & live-smoke-tested in CI; unpack, run opc_flutter_shell.exe).

v0.3.0 — Cross-platform era: Flutter shell proven on Windows + macOS

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 14 Sep 03:45
c81728f

The cross-platform era. From this release the same portable core ships as THREE user-facing artifacts, each proven by CI on every push: the macOS GUI app, the opc terminal company, and a Flutter desktop shell whose Windows package is built AND launched in CI — M3 is closed.

⚠️ The Flutter shell is a technical preview: its UI is a minimal mirror (goal input, approvals queue, task board), not yet the polished SwiftUI experience. It runs; it is proven; judge it accordingly.

EN

  • Flutter shell (M3) done cross-platform: dart:ffi bindings, goal/approvals/task-board UI, 10-check behavioral self-smoke. macOS: scripts/build-shell-macos.sh produces a standalone .app with the bridge bundled, and the packaged app proves itself (self-check ALL PASS). Windows: windows-shell.yml builds the bridge DLL (release, 6 exports dumpbin-verified every push), fetches the pinned official Flutter SDK, assembles the package — then LAUNCHES opc_flutter_shell.exe in CI and fails the build unless the verdict says all-pass.
  • Audit round: 6 stress suites against the real @_cdecl entries (NULL/1MB/garbage refuse-clean never trap; 250-buffer free soak; 1000-call latency budget; env-matrix semantics), bridge least-privilege (liveChatEnabled:false), CI permissions: contents: read, gitleaks zero-noise policy. 587 → 593 tests.
  • Repo now has 4 CI workflows, all green per push: macOS tests, Windows CLI+DLL, Windows shell end-to-end, spike.

中文

  • Flutter 壳(M3)跨平台收口🎯ffi 绑定 + 目标输入/审批队列/任务板 + 10 项行为自检。macOS 一键产出内嵌桥的独立 .app(打包后的 app 自己跑通全绿才算构建成功);Windows 由 CI 每次组装完整包(桥 DLL + 官方钉版 Flutter 构建)并真实启动 exe,判决不是全绿就红。
  • 审计轮:6 组压力测试直击 C-ABI 入口(空指针/1MB/畸形 JSON 全部干净拒绝不崩溃、250 次缓冲释放浸泡、1000 次延迟预算、并发写开关语义矩阵);桥最小权限;CI 令牌最小化;gitleaks 零噪声。测试 587 → 593
  • 现在每个 push 有 4 条 CI 全绿护航。

Download & try:

  • OPCCompany-v0.3.0.zip — the macOS GUI (brew upgrade --cask opc-company works too)
  • OPCCompanyShell-windows-x64-v0.3.0-preview.zip — the CI-assembled Windows shell package: unpack, run opc_flutter_shell.exe (unsigned preview; SmartScreen may warn once). Its contents are the exact bytes that passed the live 10-check smoke in Actions.
  • macOS shell: scripts/build-shell-macos.sh

v0.2.1 — Windows CI is live: opc.exe builds on every push

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 13 Sep 05:18
a62e75f

🪟 Windows, continuously built

  • Windows Build CI: every push to main + core PRs compile opc.exe (release) on a real Windows runner with the exact toolchain sequence validated by nine spike rounds — and run it (version+help smoke). Artifact: opc-windows-x86_64 on each run.
  • DPAPI secret store: API keys on Windows are per-user encrypted (CryptProtectData), live-probed in CI: save → load-match → ciphertext-on-disk → delete. The macOS Keychain equivalent for Windows.
  • Whole-file SwiftUI gates on the 8 pure-view files — the product target (not just a spike manifest) compiles clean on Windows.

🔧 Housekeeping

  • VERSION single source of truth (+ consistency test)
  • sqlite3 linking platform-gated (Apple OS copy / Windows vendored CSQLite)
  • macOS app bundle unchanged in behavior; 584 tests green

GUI is macOS-only until the M3 Flutter shell lands — the headless CLI is already Windows-ready.

v0.2.0 — Headless CLI (opc) + Windows M0 milestone

Choose a tag to compare

@B1ueMu3ic4m B1ueMu3ic4m released this 09 Sep 16:08
83f6256

OPC Company v0.2.0 — Your company now runs headless 你的公司现在可以无头运行

⌨️ Headless CLI: opc 无头命令行

Run the whole company from the terminal — same data, same engine as the GUI.
终端里运营整家公司——与 GUI 同一份数据、同一套引擎。

opc status            # team, tasks, approvals  团队/任务/待批
opc goal "..."        # boss goal → CTO chain   老板目标 → CTO 全链
opc advance           # push every open loop    推进所有在途目标
opc report            # boss-readable report    老板视角进度报告

Also inside the app bundle: OPCCompany.app/Contents/MacOS/opc
App 包内同样可用。

🪟 Windows port: milestone M0 achieved 移植里程碑达成

The entire business-logic layer now compiles on real Windows with zero
errors
(verified in CI, 496/496 jobs). opc is the first binary on the
portable path; the Flutter UI (M3) is next.

核心逻辑层在真实 Windows 上零错误编译通过(云端 CI 实证,496/496 任务)。
opc 是移植路径上的第一个产物,Flutter 界面(M3)在路上。

🔧 Under the hood 内部工作

  • 6 rounds of cross-platform shims, each verified by a real Windows build:
    CryptoKit→swift-crypto · SwiftUI-observation→compat · SQLite→vendored amalgamation · Keychain→fail-closed (DPAPI tracked) · Bundle-swizzle→gated
    六轮跨平台垫片,每轮都由真实 Windows 构建验证
  • Report-generation & string helpers moved out of UI files into the logic core (84 call sites)
    报告生成与字符串助手从 UI 文件迁入逻辑核心(84 处调用)
  • 580 tests, +2 guarding the CLI's portability contract
    580 项测试,新增 2 项守护 CLI 可移植契约

Install 安装: brew install --cask B1ueMu3ic4m/tap/opc-company or the zip below.
Unsigned build 未签名构建: first launch may need xattr -cr /Applications/OPCCompany.app