Skip to content

A:建立本地上传分享与清理安全基线 - #201

Merged
zj1123581321 merged 3 commits into
mainfrom
card/vta-upload-A-261008
Oct 8, 2026
Merged

zj1123581321 merged 3 commits into
mainfrom
card/vta-upload-A-261008

Conversation

@zj1123581321

@zj1123581321 zj1123581321 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

范围

  • 在 cache.db 新增本地上传 owner/key、metadata fingerprint、独立 upload_ token、retention、固定终态期限与 write-once 撤销记录。
  • Resolver 对独立上传 token 执行启用/有效资格检查;blank 和上传来源不走旧 task_status token/归属 fallback。
  • 现有 cache/task cleanup 仅在有效分享期间保护成果与根记录;开关关闭不改变保护。
  • 落盘跨卡 HTTP 合同及 M1-M6 验收门;默认关闭,未做生产启用。

非目标

不含 HTTP 接收、ASR worker、网页、生产额度/容量验证、备份恢复演练;不改 URL dedup/寿命/权限规则。

验证

  • uv sync --frozen
  • Narrow verify 连续五次通过
  • 指定 API/history/Resolver/cache/task/media-lock cleanup 整文件回归通过
  • make test exit 0
  • blank/source/cleanup predicate 三个变异均由 AssertionError 命中,恢复后测试通过

保持 draft,等待 lead 独立审查;不得据此启用生产上传。

正式主审第一轮:实测分诊与反证回执

固定应用提交仍为 3a25dccc2cb92e22b4031715c37a584c041e582d;没有为假设前提添加防御分支,也没有修改门禁。

工具意见 本仓事实判定 真实触发/后果两问 处置
major correctness-preterminal-upload-cleanup-data-loss 所述完整清理删除路径已证伪;SQL helper自身未覆盖NULL expiry,不等于真实入口删除 queued/processing/calibrating经真实完整入口,三个正文行/文件均保留;inactive/URL对照确实删2行,非空候选。所述数据丢失不触发 正式false-positive签票成功,run37780403540;不改行为。私有清理predicate与公开进度资格的命名差异留作非阻断消歧义事项,不扩大SQL机制
major reliability-local-upload-foreign-key-cleanup-crash 默认消费路径已证伪;人为启用FK条件反例成立,不是本项目默认连接/支持配置 实测连接foreign_keys=0,完整task cleanup成功;所有实际连接构造无开启路径。强开ON会IntegrityError但服务并不支持此条件,不能据此加防御分支。inactive root回既有清理,旧receipt保留但不会恢复读取/重新受理 正式false-positive签票成功,run37780535155;不新增开启FK的兼容承诺。未来改变连接契约必须先审root/receipt删除语义
minor correctness-accept-after-idempotency-window 跨窗ValueError可复现;当前不判P1,接受不修该store行为 工程冻结R5为有限新受理窗口24h、已存receipt可查,清除后旧key不得新受理;正式接受/202是commit后。当前方法过窗显式拒绝、无root,不是静默成功。design“首次登记”措辞与“acceptance window”存在消歧义事项 minor不签阻断票据。接收卡必须按已定新受理截止和有限receiving寿命,向HTTP/UI明确未受理/过窗/孤儿清理,不自动重提/换key;不是放宽24h、增加重试或新政策

真实producer/consumer脚本、SQL计数、文件结果及已知坏态负对照已提交:
https://github.com/zlxlabs/VideoTranscriptAPI/blob/6ffbd54627816a73ccea477150537550ff52708f/docs/sessions/261008-local-upload/reviews/A-runtime-probes.md

主脑在固定功能代码的该证据树独立逐字复跑三段脚本,stdout全部一致。两次只读咨询没有提供运行证据,未拿它们冒充证伪;最终采纳其建议,在可写临时目录运行真实CacheManager/SQLite/文件,所有造时/强制FK都注明条件边界。

两票签发后仅用正规gate_disposition rerun-gate重跑原run37771963550的gate/gate聚合(attempt2),没有重新运行primary或quality,没有重复push;须等真实聚合结论/正式pr_merge_ready后才可合并。独立review/OCR skipped与正式CI结论分别记录;运行probe不等于容量/生产恢复验证,上传HTTP/worker仍为后续卡,生产默认关闭且未部署。

zj1123581321 added 3 commits October 8, 2026 18:31
Agent-Executor: codex-pi
Agent-Model: gpt-6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20261008-094534-0fd910
Task-Id: VideoTranscriptAPI-20261008-11
Agent-Executor: codex-pi
Agent-Model: gpt-6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20261008-094534-0fd910
Task-Id: VideoTranscriptAPI-20261008-11
Agent-Executor: codex-pi
Agent-Model: gpt-6-luna
Agent-Effort: xhigh
Dispatch-Id: dlg-20261008-094534-0fd910
Task-Id: VideoTranscriptAPI-20261008-11
@zj1123581321
zj1123581321 marked this pull request as ready for review October 8, 2026 11:43
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Required Gate v2 — 状态面板

当前状态:pass · 可合并

当前裁决:code_pass / disposition_resolved

PR 累计主审轮(影子):1/5 · collecting

Disposition receipts consumed:

  • disposition=false-positive finding={"category":["value","reliability"],"file":["value","src/video_transcript_api/cache/cache_manager.py"],"line":["value",361],"severity":["value","major"]} pointer=https://github.com/zlxlabs/VideoTranscriptAPI/blob/6ffbd54627816a73ccea477150537550ff52708f/docs/sessions/261008-local-upload/reviews/A-runtime-probes.md; command=PYTHONPATH=src .venv/bin/python - <<'PY' from datetime import datetime, timedelta, timezone; from pathlib import Path; import tempfile, uuid from loguru import logger; from video_transcript_api.cache.cache_manager import CacheManager from video_transcript_api.utils.logging.audit_logger import AuditLogger logger.remove() def run(force_fk): with tempfile.TemporaryDirectory() as td: base = Path(td); m = CacheManager(str(base/'cache'), str(base/'cache/cache.db')) audit = AuditLogger(str(base/'audit.; output=foreign_keys=0 outcome=ok deleted=1 root=1->0 upload=1->1 orphan=1 foreign_keys=1 outcome=IntegrityError deleted=na root=1->1 upload=1->1 orphan=0 receipt=gate-disposition-receipt-v3-0f7127d3a79398601d7b95b941775896af23fe26f9c174cf92db78dbe62537c2-d018bd34b36a-5c33a438617e reason=固定H0真实默认CacheManager连接PRAGMA foreign_keys=0,完整cleanup_task_status成功删过期root,receipt保留;src全部实际连接构造无foreign_keys开启路径。强行ON的负对照确有IntegrityError,但不是本项目实际消费条件;独立逐字复跑与已提交producer证据一致。不新增假设环境防御分支,不承诺开启FK兼容。
  • disposition=false-positive finding={"category":["value","correctness"],"file":["value","src/video_transcript_api/cache/cache_manager.py"],"line":["value",824],"severity":["value","major"]} pointer=https://github.com/zlxlabs/VideoTranscriptAPI/blob/6ffbd54627816a73ccea477150537550ff52708f/docs/sessions/261008-local-upload/reviews/A-runtime-probes.md; command=PYTHONPATH=src .venv/bin/python - <<'PY' from datetime import datetime, timedelta, timezone; from pathlib import Path; import tempfile, uuid from loguru import logger; from video_transcript_api.cache.cache_manager import CacheManager logger.remove(); now = datetime.now(timezone.utc) old = (now - timedelta(days=31)).strftime('%Y-%m-%d %H:%M:%S') with tempfile.TemporaryDirectory() as td: base = Path(td); m = CacheManager(str(base/'cache'), str(base/'cache/cache.db')); cases = {} def make_upload(la; output=queued: share=True sql_guard=False root=queued expiry=none file_before=True file_after=True processing: share=True sql_guard=False root=processing expiry=none file_before=True file_after=True calibrating: share=True sql_guard=False root=calibrating expiry=none file_before=True file_after=True inactive: share=False sql_guard=False root=failed expiry=set file_before=True file_after=False url: file_before=True file_after=False cleanup_deleted=2 cache_rows=5->3 receipt=gate-disposition-receipt-v3-0f7127d3a79398601d7b95b941775896af23fe26f9c174cf92db78dbe62537c2-d018bd34b36a-a4fd1fb1c46d reason=固定H0真实完整cleanup已证伪该删除路径:queued/processing/calibrating在SQL活动谓词前的非终态guard保护,三cache行/文件保留;真实inactive/URL负对照删2行,非零候选;独立逐字复跑与已提交149行producer证据一致。未改行为/禁用检查/推断生产容量。

Gate 历史(v1;来源为持久化 gate_terminal 制品)

Run Attempt Head 状态 PR 累计主审轮(影子) 收件人动作
37764505752 1 cbad5ac skipped — 无需动作(主审未跑,绿≠过审)
37765345309 1 3a25dcc skipped — 无需动作(主审未跑,绿≠过审)
37771963550 1 3a25dcc fail — 要修代码
37771963550 2 3a25dcc pass 1/5 · collecting 可合并

历史行按 run_id + run_attempt 去重并只增不删;删除本评论后可由 gate_terminal 制品重建。

@zj1123581321
zj1123581321 merged commit 6af391d into main Oct 8, 2026
29 of 32 checks passed
@zj1123581321
zj1123581321 deleted the card/vta-upload-A-261008 branch October 8, 2026 13:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant