| ci: 恢复 CI 并把门禁扩到六道;Tauri 构建链修通 CI(历史提交 remove-ci-workflow 删掉了唯一 workflow,此后无任何自动化): - 恢复 .github/workflows/ci.yml 并升级:backend 跑 compileall/ruff/pytest/ 装配冒烟,frontend 跑 eslint/vitest/build;改用 astral-sh/setup-uv 与 pnpm cache;pip-audit 保留 continue-on-error(仅报告)。 门禁(本地与 CI 对齐): - check_all.ps1 / .sh 从四道扩到六道,新增 eslint 与 vitest 两道; 前端步骤编号同步为 4/6、5/6、6/6。 构建链(本轮首次实测): - pyinstaller.spec 由 onedir 改 onefile:Tauri externalBin 只接受单文件, onedir 产物因缺 _internal 目录无法启动;README 也承诺单 exe 双击即用。 实测 onefile 25MB,启动 10s 内完成且 /health 返回 200。 - cargo check 通过(此前从未验证过 Rust 侧)。 文档:README/AGENT 同步六道门禁与实际用例数(390)。 | 1 天前 |
| test: 补 status 计数口径与任务卡片列表回归 + CHANGELOG 补齐本轮 - test_status_separates_instance_and_article_counts:锁住 published(平台实例数) 与 published_articles(文章数)不能混用。回退验证:把 service.py 退回 9553ae3 (未加 published_articles 的版本)→ KeyError,用例转红。 - TasksView.test.js 5 例:卡片而非表格、platforms 字符串也能渲染、 卡片 role=button + Enter 打开详情、等待人工就地操作、失败摘要优先 message。 - CHANGELOG 补本轮条目:EP 主题失效、tasks platforms 类型、tags 配置路径、 窄屏布局、卡片化、搜索筛选、测试桩修洞。 - README/AGENT 用例数同步 415 / 54。 门禁:pytest 415 / vitest 54 / ruff + eslint 0 error / vite build ✓。 | 2 小时前 |
| refactor!: 品牌全面更名 content-harbor/Harbor → harbour/Harbour 仓库远端已通过 GitCode API 原地改名 badhope/content-harbor → badhope/harbour (URL slug + 显示名 + 描述,不删库重建),本地 remote 已切新地址。 代码标识:Cargo 包名/产物名 harbour、PyInstaller sidecar harbour-backend、 Tauri identifier com.harbour.hub / productName 内容港 Harbour / externalBin、 main.rs crate 引用、桌面数据目录与注释。 环境变量:HARBOR_* → HARBOUR_*(DATABASE_URL / SECRET_KEY)。 Webhook 契约头:X-Harbor-Event/Signature → X-Harbour-*(事件/测试用例同步)。 杂项:harbour-backups 备份目录、harbour-ws- 临时前缀、localStorage 键、 全部文档/注释/UI 文案(内容港中文名保留,英文拼写统一 Harbour)。 验证:全仓 brand-token 残留扫描为零;pytest 382 passed;vite build 绿。 | 1 天前 |
| fix(web,api): EP 主题变量失效 + 任务列表 platforms 未解析 + 标签配置落错目录 三处真缺陷,均由真机截图/DOM 断言发现,不是静态猜测: 1. Element Plus 主题接管完全失效(样式层) main.scss 把 --el-color-* 写在了 html {} 里。EP 自带变量定义在 :root, 伪类选择器优先级高于类型选择器,自定义色被默认色板静默覆盖: 实测 --el-color-danger 仍是 #f56c6c(默认红),标签渲染成 rgb(245,108,108),而设计 token 期望 #B0382E。按钮因为另有 .el-button--primary 显式样式,看起来"像是生效了",掩盖了这个问题。 改为 :root 并补齐 primary/success/warning/danger/error/info 的全套 light-3/5/7/8/9 + dark-2(EP 组件靠这些派生色取背景/边框)。 验证:修复前 getComputedStyle(document.documentElement) 取到的是默认值, 修复后 primary=#2A5CE0 / danger=#B0382E / success=#0F7A52 / info=#5F6A78。 2. /tasks 与 /tasks/page 的 platforms 是 JSON 字符串(API 契约) DB 里 tasks.platforms 存 JSON 字符串,详情端点早解析了,列表端点漏了。 前端 (row.platforms || []).join() 拿到字符串抛 TypeError,Vue 渲染中断: 实测任务表「对象」列空白、状态标签落到对象列、后续列整体错位。 新增 _task_row() 统一收口;列表与分页端点都解析,脏数据降级为 []。 同时给详情补 article_title,任务可直接跳回文章(新增「打开文章」按钮)。 3. tags.py 的 config.json 路径算错两层(工程卫生) Path(__file__).resolve().parent.parent 得到 backed/service/config.json, 既不是 ai/gate/metaweblog 共用的 backed/config.json,也不在 .gitignore 里: 点一次「标签治理 → 合并/别名」就在仓库里凭空多出一个未跟踪配置文件。 收口为 _config_path() -> backed/config.json,并清掉已产生的多余文件。 UI 打磨(截图驱动): - 任务中心从 el-table 改为卡片列表:窄屏 390px 不再横向截断(原表格 1166px 宽 塞进 264px 视口,只剩「任务/类型/对象」三列可见);卡片带状态色左条、 平台标签、错误摘要、待人工任务就地操作,键盘可达(role/tabindex/Enter/Space)。 - .pane-head 允许换行 + 标题 nowrap:原先 390px 下「任务中心」「设置」被挤成 每行一个字(标题可压到 1 字宽)。 - 设置页窄屏隐藏副标题、AI Provider 价格标签 nowrap + 折叠头允许换行: 原先「经济/均衡/旗舰」被压成竖排。 - 发布中心统计卡改网格:窄屏 2×2 + 操作按钮独占一行,不再错位。 测试:test_api_integration.py 新增 platforms 解析用例(回退即红); test_tags.py 新增 config 路径用例并改 fixture 打桩 _config_path; a11y.test.js 新增 3 例(:root 位置、四档浅色齐全、EP 与设计 token 一致)。 门禁:pytest 414 passed / vitest 45 passed / ruff + eslint 0 error / vite build ✓。 | 11 小时前 |
| feat(scripts): 登录诊断脚本 login_probe.py + 门禁补 scripts/ 编译 把本轮手工排查固化成可复用工具: - scripts/login_probe.py:开内置浏览器 → 打开平台登录页 → 等二维码/验证码 → 导出二维码 PNG → 打印标题/登录态/验证码类型。支持 --headed、--wait、--out, 以及 --check-cookie 复检本地 profile 的登录态。只回答"登录页能不能用、 二维码有没有真的生成",不做任何破解,也不代替人扫码。 - 门禁第 1 道补 scripts/ 的 compileall:原先只编译 backed/,仓库根与 scripts/ 的脚本语法错误漏检(ps1 与 sh 同步)。 - AGENT.md 增「登录诊断」用法;CHANGELOG 记录本轮实机验证结论(patchright 启动、 CSDN/掘金/知乎登录页与二维码实测、mock 平台端到端链路)。 - test_docs_links.py 增加断言:脚本存在且必须在 AGENT + CHANGELOG 里被提及。 实测:juejin/csdn 二维码均在 1-2 秒内导出;cnblogs(免登 API)正确走 api-only 分支。 | 16 小时前 |
| test(web): 锁住 App 侧栏计数口径(published_articles 而非 published) Stop hook 点名 App.vue 时发现的配套缺口:b32ad82 把侧栏「N 篇已发布」从 「数当前页文章」改成「取服务端统计」,但没有任何测试锁住这个口径。 - 新增 3 例:published_articles 优先于 published(后者是平台实例数, 一篇发两个平台会算成 2 篇)、计数不依赖已加载的文章列表(分页后只剩当前页)、 待人工数 = pendingHuman + waitingTasks。 - 测试里把 hub.boot() 打桩,避免 onMounted 拉真实数据覆盖被测状态。 - 回退验证:把 App.vue 退回 9553ae3 → 2 例转红(期望 3 实得 9、期望 42 实得 0)。 - CHANGELOG 补这条回退验证记录;README/AGENT vitest 用例数 54 → 57。 门禁:vitest 57 passed / eslint 0 error。 | 1 小时前 |
| fix: 审查收尾轮 —— 密钥ACL/回滚语义/通知隔离 + README 损坏修复 + 环境部署债清理 - F-09 密钥文件 ACL:Windows 走 icacls 去继承/仅授当前用户;超时(TimeoutExpired 非 OSError)与 icacls 缺失均降级告警,不阻断密钥加载 - F-14 站内通知:conftest autouse 每测清空 + 隔离顺序对锁定 - F-27 回滚:目标版本 == 当前内容(比对含 tags)时显式"无需回滚",不写历史 - README 反引号损坏重建(074ce0d 引入:41 反斜杠 / 7 退格 → 60 反引号, 发布流程图补围栏);用例数漂移 331 → 340 - 删死模块 article_store.py 与过期 requirements.txt;pyproject/uv.lock 版本 0.6.5 → 0.7.0(对齐 CHANGELOG 与 app version) - CI:backend job 去 pnpm/setup-node 冗余三步(cache path 指向不存在文件), pip-audit 改 uv run --with - deploy:nginx.conf 重写(SPA try_files + /api 反代 + SSE 关缓冲;原配置含 Python docstring 行,容器直接起不来)、Dockerfile CMD start:app → python start.py、compose context/healthcheck 修正、新增 .dockerignore(排除 backed/service/data 登录快照与 backed/config.json 等凭据文件) - 测试 333 → 340(新增 test_review_20261014.py 8 用例;移除随死模块失效的 F-03 用例 1 个) 审计:AQG deep 路由(Gate A:crypto/凭据 + CI/deploy)→ 宿主 Decision Engine MCP 不可用 → DE Lite 本地降级 local_host_43045e8d2ba7e6daea3f6c3b(advisory- only)。五维台账 .aqg/review-20261014.md VALID(needs-cross-llm-rerun), 自检兜出 3 项当场修复:TimeoutExpired 穿透 / 回滚 tags 短路 / dockerignore 漏凭据文件。 | 14 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| chore: .tmp/ 入 gitignore + 用例数同步 - 把仓库根 .tmp/ 加进 .gitignore:截图、探针脚本、临时数据目录默认落这里, 之前每次 git status 都会冒出一条未跟踪目录,容易误提交。 - README/AGENT 的用例数同步到实际值:pytest 414、vitest 49。 | 6 小时前 |
| test(web): 锁住 App 侧栏计数口径(published_articles 而非 published) Stop hook 点名 App.vue 时发现的配套缺口:b32ad82 把侧栏「N 篇已发布」从 「数当前页文章」改成「取服务端统计」,但没有任何测试锁住这个口径。 - 新增 3 例:published_articles 优先于 published(后者是平台实例数, 一篇发两个平台会算成 2 篇)、计数不依赖已加载的文章列表(分页后只剩当前页)、 待人工数 = pendingHuman + waitingTasks。 - 测试里把 hub.boot() 打桩,避免 onMounted 拉真实数据覆盖被测状态。 - 回退验证:把 App.vue 退回 9553ae3 → 2 例转红(期望 3 实得 9、期望 42 实得 0)。 - CHANGELOG 补这条回退验证记录;README/AGENT vitest 用例数 54 → 57。 门禁:vitest 57 passed / eslint 0 error。 | 1 小时前 |
| test(web): 锁住 App 侧栏计数口径(published_articles 而非 published) Stop hook 点名 App.vue 时发现的配套缺口:b32ad82 把侧栏「N 篇已发布」从 「数当前页文章」改成「取服务端统计」,但没有任何测试锁住这个口径。 - 新增 3 例:published_articles 优先于 published(后者是平台实例数, 一篇发两个平台会算成 2 篇)、计数不依赖已加载的文章列表(分页后只剩当前页)、 待人工数 = pendingHuman + waitingTasks。 - 测试里把 hub.boot() 打桩,避免 onMounted 拉真实数据覆盖被测状态。 - 回退验证:把 App.vue 退回 9553ae3 → 2 例转红(期望 3 实得 9、期望 42 实得 0)。 - CHANGELOG 补这条回退验证记录;README/AGENT vitest 用例数 54 → 57。 门禁:vitest 57 passed / eslint 0 error。 | 1 小时前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| refactor!: 品牌全面更名 content-harbor/Harbor → harbour/Harbour 仓库远端已通过 GitCode API 原地改名 badhope/content-harbor → badhope/harbour (URL slug + 显示名 + 描述,不删库重建),本地 remote 已切新地址。 代码标识:Cargo 包名/产物名 harbour、PyInstaller sidecar harbour-backend、 Tauri identifier com.harbour.hub / productName 内容港 Harbour / externalBin、 main.rs crate 引用、桌面数据目录与注释。 环境变量:HARBOR_* → HARBOUR_*(DATABASE_URL / SECRET_KEY)。 Webhook 契约头:X-Harbor-Event/Signature → X-Harbour-*(事件/测试用例同步)。 杂项:harbour-backups 备份目录、harbour-ws- 临时前缀、localStorage 键、 全部文档/注释/UI 文案(内容港中文名保留,英文拼写统一 Harbour)。 验证:全仓 brand-token 残留扫描为零;pytest 382 passed;vite build 绿。 | 1 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| docs: API 路径统一 /api/v1/hub + MCP 23 Tool + 平台数 10 对齐实际 - hub_router 实际挂载在 /api/v1/hub(api/hub.py),README.en.md 16 处 / PLATFORM_CONNECTION.md 10 处 / ARCHITECTURE.md 19 处旧路径 /api/hub/* 全部 404,统一修正 - MCP Server 实际注册 23 个 @mcp.tool(README/AGENT.md 原写 16,工具 增补后未同步),对齐为 23 - PLATFORM_CONNECTION.md 平台适配器 9 → 10(实际注册 10 个 @register) | 1 天前 |
| test(web): 锁住 App 侧栏计数口径(published_articles 而非 published) Stop hook 点名 App.vue 时发现的配套缺口:b32ad82 把侧栏「N 篇已发布」从 「数当前页文章」改成「取服务端统计」,但没有任何测试锁住这个口径。 - 新增 3 例:published_articles 优先于 published(后者是平台实例数, 一篇发两个平台会算成 2 篇)、计数不依赖已加载的文章列表(分页后只剩当前页)、 待人工数 = pendingHuman + waitingTasks。 - 测试里把 hub.boot() 打桩,避免 onMounted 拉真实数据覆盖被测状态。 - 回退验证:把 App.vue 退回 9553ae3 → 2 例转红(期望 3 实得 9、期望 42 实得 0)。 - CHANGELOG 补这条回退验证记录;README/AGENT vitest 用例数 54 → 57。 门禁:vitest 57 passed / eslint 0 error。 | 1 小时前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| refactor!: 品牌全面更名 content-harbor/Harbor → harbour/Harbour 仓库远端已通过 GitCode API 原地改名 badhope/content-harbor → badhope/harbour (URL slug + 显示名 + 描述,不删库重建),本地 remote 已切新地址。 代码标识:Cargo 包名/产物名 harbour、PyInstaller sidecar harbour-backend、 Tauri identifier com.harbour.hub / productName 内容港 Harbour / externalBin、 main.rs crate 引用、桌面数据目录与注释。 环境变量:HARBOR_* → HARBOUR_*(DATABASE_URL / SECRET_KEY)。 Webhook 契约头:X-Harbor-Event/Signature → X-Harbour-*(事件/测试用例同步)。 杂项:harbour-backups 备份目录、harbour-ws- 临时前缀、localStorage 键、 全部文档/注释/UI 文案(内容港中文名保留,英文拼写统一 Harbour)。 验证:全仓 brand-token 残留扫描为零;pytest 382 passed;vite build 绿。 | 1 天前 |
| fix: 审查收尾轮 —— 密钥ACL/回滚语义/通知隔离 + README 损坏修复 + 环境部署债清理 - F-09 密钥文件 ACL:Windows 走 icacls 去继承/仅授当前用户;超时(TimeoutExpired 非 OSError)与 icacls 缺失均降级告警,不阻断密钥加载 - F-14 站内通知:conftest autouse 每测清空 + 隔离顺序对锁定 - F-27 回滚:目标版本 == 当前内容(比对含 tags)时显式"无需回滚",不写历史 - README 反引号损坏重建(074ce0d 引入:41 反斜杠 / 7 退格 → 60 反引号, 发布流程图补围栏);用例数漂移 331 → 340 - 删死模块 article_store.py 与过期 requirements.txt;pyproject/uv.lock 版本 0.6.5 → 0.7.0(对齐 CHANGELOG 与 app version) - CI:backend job 去 pnpm/setup-node 冗余三步(cache path 指向不存在文件), pip-audit 改 uv run --with - deploy:nginx.conf 重写(SPA try_files + /api 反代 + SSE 关缓冲;原配置含 Python docstring 行,容器直接起不来)、Dockerfile CMD start:app → python start.py、compose context/healthcheck 修正、新增 .dockerignore(排除 backed/service/data 登录快照与 backed/config.json 等凭据文件) - 测试 333 → 340(新增 test_review_20261014.py 8 用例;移除随死模块失效的 F-03 用例 1 个) 审计:AQG deep 路由(Gate A:crypto/凭据 + CI/deploy)→ 宿主 Decision Engine MCP 不可用 → DE Lite 本地降级 local_host_43045e8d2ba7e6daea3f6c3b(advisory- only)。五维台账 .aqg/review-20261014.md VALID(needs-cross-llm-rerun), 自检兜出 3 项当场修复:TimeoutExpired 穿透 / 回滚 tags 短路 / dockerignore 漏凭据文件。 | 14 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |
| cleanup 0.4.0: unify codebase, demolish scaffold, fix security/docs Key changes: - Remove scaffold: api/v1, models, schemas, repository, services layers - Delete ghost infra: core/cache, core/queue, app/events, app/router - Rewrite ARCHITECTURE.md to actual 0.4.0 state - Fix hub.py (no global side effect, auto-token) - Fix humanize.py (WPM type formula was 5x off) - Fix observability.py (remove dead _observe_with_max, M_* constants) - Fix config_unified.py (Production reads env vars) - Fix factory.py (simplified lifespan, no cache/queue/DB pool) - Fix core/__init__.py (remove dead imports) - Fix api/__init__.py (hub_router not v1) - Fix app/exceptions.py (inline schemas) - Fix frontend Vue components (App.vue, ArticleList, ArticleEditor) - Rename deplay/ -> deploy/ - Version: 0.4.0-fix | 19 天前 |