This is the support entry point for chengfeng-videocut , not a third editing workflow. By default it only generates a public Issue draft; external writes must go through a redacted preview and user confirmation.
问题描述
|
v
最小只读诊断 -> 脱敏 -> 展示仓库 / 标题 / 正文
|
用户明确确认
|
v
认证 + 标签检查 + 查重
|
v
创建 GitHub Issue
1. Confirm this is a reproducible bug
First distinguish:
- Bug: actual behavior deviates from an existing contract, interface, version capability, or deterministic result.
- Feature suggestion: the product never promised this capability; do not disguise it as a bug.
- Usage question: answer or diagnose first, do not report automatically.
Collect only the minimum facts needed for reproduction. Do not install the Runtime, start Studio, modify the project, re-edit the video, or upload media to "add evidence." When the Runtime exists, you may run node scripts/ensure-runtime.cjs --json from the plugin root directory as a read-only probe, keeping only state / kind / version / healthy / error.code; do not attach the full doctor output. If it does not exist, write "not detected."
2. Choose a fixed repository
The workspace root is not necessarily a Git repository; it is forbidden to guess the remote from the current directory:
| Affected component | target | GitHub repository |
|---|---|---|
| Runtime, Studio, UI, CLI, API, timeline, rendering | product |
Agentchengfeng/chengfeng-videocut |
| Skill, Marketplace, installation orchestration, MCP App, workflow documentation | skills |
Agentchengfeng/chengfeng-videocut-skills |
For cross-component issues, report first to the repository that first violated the contract, and explain the other component in the body; if you cannot determine this, ask the user first.
3. Generate structured input
Use umask 077 to write the candidate as JSON in the current task's temporary directory, not in product specification files; delete the temporary JSON and Markdown after submission ends:
{
"schemaVersion": 1,
"target": "product",
"component": "Studio",
"title": "Runtime 0.1.1 无法打开 HyperFrames 顶层剪口播视图",
"summary": "一句话说明影响",
"steps": ["第一步", "第二步"],
"expected": "预期行为",
"actual": "实际行为",
"environment": {
"Runtime": "0.1.1",
"OS": "macOS"
},
"evidence": ["只放最小、可公开的诊断"],
"acceptance": ["可验证的修复条件"]
}
Forbidden to include:
- API Key、Token、Cookie、
.env; - video, audio, screenshots, full logs, or transcript text;
- customer names, original video names, real
projectId, user absolute paths; - private repository content without user permission.
4. First generate and show the redacted draft
Locate the script from the current SKILL.md :
PLUGIN_ROOT="$(codex plugin list --json | node -e 'let s=""; process.stdin.on("data", c => s += c); process.stdin.on("end", () => { const rows = JSON.parse(s).installed || []; const hit = rows.filter(x => x.enabled && x.name === "chengfeng-videocut" && x.source && x.source.path); if (hit.length !== 1) process.exit(1); process.stdout.write(hit[0].source.path); });')"
test -n "$PLUGIN_ROOT" && test -f "$PLUGIN_ROOT/.codex-plugin/plugin.json" || { echo "chengfeng-videocut enabled plugin root unavailable" >&2; exit 1; }
REPORT="$PLUGIN_ROOT/skills/report-videocut-bug/scripts/report-bug.cjs"
node "$REPORT" draft --input "$reportJson" --output "$draftMarkdown" --json
PLUGIN_ROOT only comes from the source.pathof the enabled Plugin line above. Do not rely on the SKILL_DIR, which is not guaranteed to exist, hardcode development machine paths, or guess the installation location by directory search.
target must be explicitly product or skills; if it is missing or misspelled, stop and do not silently report to another repository. The script cleans common secrets, local usernames, volume names, path remnants, and localhost query parameters; automatic redaction cannot identify arbitrary customer names, so a human must still read through it. Show the user:
repo
label=bug
title
完整脱敏正文
At the same time save the returned confirmationReceipt, and show the user confirmationToken and the expiration time. Stop if the user has not explicitly confirmed this public content; merely detecting an error does not equal consent to report. The token is bound only to the draft content and does not by itself prove user consent; the Agent must still wait for an explicit reply. Confirmation is valid only for the one submission immediately following it in the current task, expires in 30 minutes, and cannot be used across tasks or reused.
5. Submit after confirmation
Submit only for the draft that was just shown and whose content has not changed:
node "$REPORT" submit \
--input "$reportJson" \
--target "$target" \
--confirmed \
--confirm-token "$confirmationToken" \
--receipt "$confirmationReceipt" \
--json
Fixed rules:
- Before submission, the script checks
gh auth status, the target repository Issues, and thebuglabel; on failure, keep the draft. - When a fingerprint of the same component, reproduction steps, and actual result already exists, return the original Issue URL; do not pass off a broad title as a duplicate.
- When the body changes after confirmation, return
confirmation_mismatch; a new preview is required. - When the confirmation credential is expired or already used, return
confirmation_expired / confirmation_replayed; a new preview is required. - When the creation result has no explicit Issue URL, do not automatically retry; it may already have been created.
- Only when you have obtained the GitHub Issue URL can you say it has been "reported."
Failure handling
github_auth_required: State that the draft is complete but not submitted; do not claim success.github_issue_create_failed: Keep the draft and manual entry point; do not retry in a loop.confirmation_required/confirmation_mismatch: Re-display the exact public content.- Target repository has no permission or is not visible: do not report to an arbitrary repository; let the user decide whether to report to the public Skills repository instead.