Closed-loop architecture
Instructions (AGENTS.md) → Skill (auto-paper) → Writing (drafts/) → Hooks (audit) → update Skill/Instructions in return
Core concept (CONSTITUTION §22): auditable, decomposable, recomposable. See AGENTS.md for details.
Four audit dimensions:
| Dimension | Check | Update target |
|---|---|---|
| Paper | Citations, word count, Anti-AI | patch_draft Revise paper |
| Methodology | Methodological reproducibility | Supplement methodological details |
| Compliance | Whether the Agent follows the process | .memory/ Record deviations |
| Meta | Skill/Hook/Instruction | Update SKILL/Hook/AGENTS |
Execution audit trail (Audit Trail)
Each execution produces in projects/{slug}/.audit/ :
| File | Content |
|---|---|
pipeline-run-{ts}.md |
Phase summary + Hook statistics + Decision Log |
search-strategy.md |
Search strategy and results |
reference-selection.md |
Literature screening decisions |
concept-validation.md |
Novelty validation process |
hook-effectiveness.md |
Hook trigger rate/pass rate/false positive rate |
quality-scorecard.md |
Methodology + writing quality (0-10 score) |
checkpoint.json |
Breakpoint recovery:last_completed_phase, phase_outputs |
Recovery logic: detect checkpoint.json → ask whether to continue from Phase N+1 or restart.
Dual Hook system
Copilot Hooks (A-D, real-time correction during writing) are defined in this file.
Pre-Commit Hooks (P1-P8 + G1-G7) are defined in git-precommit/SKILL.md.
The two are complementary: Copilot handles details, Pre-Commit handles the overall picture.
🚧 Hard Gate Enforcement (Code-Level, cannot be skipped)
SKILL.md is a soft constraint (the Agent may ignore it). The following MCP Tools are code-enforced hard limits。
Required MCP Tool call
| Timing | MCP Tool | Description |
|---|---|---|
| After each Phase is completed | pipeline_action(action="validate_phase", phase=...) |
Returns PASS/FAIL + missing artifacts; on FAIL, entering the next Phase is prohibited |
| At the start of each round of Phase 7 | pipeline_action(action="start_review") |
Starts the AutonomousAuditLoop state machine and returns the round context |
| At the end of each round of Phase 7 | pipeline_action(action="submit_review", scores=...) |
Submits the score and returns a verdict (CONTINUE/QUALITY_MET/MAX_ROUNDS/REWRITE_NEEDED) |
| Phase 7 needs a major rewrite | pipeline_action(action="rewrite_section", sections=..., reason=...) |
Roll back to Phase 5 to rewrite the specified section, with at most 2 rollbacks |
| After each section of Phase 5 is completed | pipeline_action(action="approve_section", section=..., decision=...) |
Autopilot: the Agent automatically approves after self-review. Manual: the user reviews → approve or revise. The Phase 5 gate requires all to be approved |
| When the user requests a pause | pipeline_action(action="pause", reason=...) |
Pause the pipeline and record the draft hash to detect user edits |
| Resume after pause | pipeline_action(action="resume") |
Resume the pipeline, detect user modifications, and suggest re-validation |
| At any point in the middle of the Pipeline | pipeline_action(action="heartbeat") |
Returns the status of all Phases + remaining work items; the Agent cannot claim to be "done" |
| When the Agent needs a full check | pipeline_action(action="doctor") |
Return 11-phase readiness, external MCP declaration/command availability, latest gate cache |
| After each Hook evaluation in Phase 5 | record_hook_event(hook_id, event_type) |
Record trigger/pass/fix/false_positive for A/B/C/E Hooks; the Phase 6 gate will verify that actual records exist |
| Before Phase 6 (audit stage) | run_quality_checks(action="quality_audit", scores=...) |
Set a ≥4-dimension quality score + generate a scorecard/hook-effectiveness report; the Phase 6 gate verifies the score data |
| Before Phase 10 (self-improvement) | run_quality_checks(action="meta_learning") |
Execute D1-D6 analysis + write meta-learning-audit.yaml / meta-learning-feedback.yaml; the Phase 10 gate verifies the analysis data |
Enforce rules
- Phase transition:Agent MUST call
pipeline_action(action="validate_phase", phase=N)and receive PASS before Phase N+1 can begin - Phase 7 Review Loop:Agent MUST call
pipeline_action(action="start_review")start,pipeline_action(action="submit_review", scores=...)end. Rounds cannot be skipped - Pipeline complete:Agent MUST call
pipeline_action(action="heartbeat")confirm completion = 100% before claiming completion - All gate results are automatically recordedto
.audit/gate-validations.jsonl, available for Phase 10 D-Hook analysis - Project structure validation:
validate_project_structure()can be called independently of the pipeline to check the structural integrity of new/existing projects - Automatic prerequisite check for Phase > 1:
pipeline_action(action="validate_phase", phase=...)automatically checks key artifacts of preceding Phases when Phase > 1 (WARNING level) - Audit data enforcement: The Phase 6 gate not only checks that report files exist, but also verifies quality-scorecard.yaml (≥4 dimensions, avg > 0) and hook-effectiveness.yaml (≥1 hook has event records)
- Self-improvement data enforcement: The Phase 10 gate verifies that meta-learning-audit.yaml has complete analysis records (adjustments_count, lessons_count, suggestions_count), and produces meta-learning-feedback.yaml for the next round's Agent to directly continue from
🛡️ Anti-Compaction Recovery Protocol
Context compaction causes the Agent to lose pipeline progress and writing state. The following defenses automatically protect against this:
Layer 1: Automatic pipeline state writing
- All gate tools (
pipeline_action(action="validate_phase"),pipeline_action(action="heartbeat"),pipeline_action(action="start_review"),pipeline_action(action="submit_review")) automatically write toprojects/{slug}/.mdpaper-state.jsonthepipeline_statefield - No additional action by the Agent is required
Layer 2: Automatic writing progress writing (✍️ Writing Session Checkpoint)
write_draft()andpatch_draft()automatically write to thewriting_sessionfield after success- Records: current section, filename, operation type, word count, list of all existing sections
- No additional action by the Agent is required
Layer 3: Agent-initiated detailed checkpoint
- Use
workspace_state_action(action="checkpoint", section=..., plan=..., notes=..., references_in_use=...)to save reasoning state - Recommended timing: before starting each paragraph, before switching sections, when citing a large number of references
- Save: writing outline, style decisions, reference keys currently in use, the Agent's thinking notes
- This tool call is lightweight and does not affect the writing workflow
Layer 4: Automatic recovery
workspace_state_action(action="get")reads per-project state →get_recovery_summary()produces a banner- Pipeline banner:current phase, round, gate result, next action, failures
- Writing session banner(✍️):current section, file, word count, agent context, sections on disk
- After recovery, use
read_draftto read back the draft content and continue
Layer 5: Agent mandatory rules
- Start of conversation(or first response after context compaction) → MUST call
workspace_state_action(action="get") - If pipeline_state.is_active == true → continue directly from the Phase/Round indicated by the recovery summary
- If writing_session.active == true → use
read_draftto read back the draft and continue writing - Do not rerun from scratch any Phase that has already PASSED
11-Phase Pipeline (Phase 0-11, including Phase 6.5)
Phase 0: PRE-PLANNING(Source Materials + Journal Profile + Pipeline Config)🆕
Purpose: Before any writing begins, first register the raw materials provided by the user, then establish structured journal constraints + Pipeline behavior settings.
Output:projects/{slug}/journal-profile.yaml + projects/{slug}/.audit/source-materials.yaml
── Step 0: 掃描用戶原始素材(不可略過)──
1. 呼叫 `project_action(action="source_materials")`
- 預設掃描 workspace root,排除 projects/src/tests/node_modules 等 generated/code trees
- 偵測 `.docx`, `.xlsx`, `.xls`, `.csv`, `.tsv`, `.pdf`, `.rtf`, `.pptx`, `.txt`
- 產出 `.audit/source-materials.yaml` 和 `.audit/source-materials.md`
2. 若 manifest 有 `pending_asset_aware > 0`:
- 對 `agent_next_steps.asset_aware_file_paths` 呼叫 asset-aware `ingest_documents`
- 表格型 DOCX/XLSX 必須先轉成 context,不能只根據摘要腦補
- 後續 Phase 4/5 的 asset plan / results drafting 必須以這些 primary_user_material 為優先證據
3. 即使沒有找到素材,也必須保留 0-candidate manifest,證明 agent 已掃描過 workspace。
── Step 1: 資訊來源 ──
Agent 按優先順序取得期刊要求:
a) 用戶提供 submission guide / for-authors PDF/URL
→ 解析文件 → 自動填入 YAML(需用戶確認)
b) 用戶口頭說明(例:「BJA, original research, 3000字」)
→ Agent 先查 templates/journal-profiles/ 內建期刊庫(麻醉學 Top 20)
→ 有匹配 → 讀取 YAML → 複製到專案 → 用戶確認
→ 無匹配 → 從 template 建立 + 補全欄位
c) 無明確期刊 → 使用 paper_type 預設值
→ 產出 YAML 後提醒用戶日後補充
💡 提醒用戶:可直接請 Copilot 讀取內建期刊設定(templates/journal-profiles/),
例如「幫我套用 BJA 的設定」即可自動產生 journal-profile.yaml。
用 read_file 閱讀 _index.yaml 可查看所有 20 個可用期刊。
── Step 2: 產生 journal-profile.yaml ──
1. 從 templates/journal-profile.template.yaml 複製模板
2. 填入期刊資訊、字數限制、圖表上限
3. 設定 pipeline 行為(loop 上限、review 輪數)
4. 設定 reporting guidelines checklist
5. 🗣️ 呈現 YAML 摘要給用戶確認
→ 特別強調:字數上限、圖表上限、必要文件、loop 設定
── Step 3: 解析 submission guide(如有)──
IF 用戶提供 submission guide 文件:
a) 讀取文件內容(PDF/URL)
b) 提取結構化資訊:
- 字數限制(total + per section)
- 圖表限制(數量 + 格式 + DPI)
- 引用格式 + 上限
- 必要文件清單
- 報告指引要求
c) 填入 YAML 對應欄位
d) 標註 ⚠️ 不確定的欄位 → 請用戶確認
journal-profile.yaml constraints on the entire Pipeline
| YAML field | Affected Phase / Hook |
|---|---|
paper.type |
Phase 1 project setup, Phase 4 writing order |
paper.sections |
Phase 4 outline, Phase 5 writing order |
word_limits.* |
Hook A1 word count, Hook C6 total word count |
assets.figures_max/tables_max |
Phase 4 Asset Plan, Phase 5 Asset generation |
references.max_references |
Phase 2 literature count, Phase 8 citation limit |
references.reference_limits |
Citation limit by paper type (overrides max_references) |
references.style |
Phase 8 citation format |
reporting_guidelines.checklist |
Hook B5 methodology, Hook C2 submission checklist |
required_documents.* |
Phase 9 export, Hook C2 submission checklist |
source-materials.yaml constraints on the entire Pipeline
| YAML field | Affected Phase / Hook |
|---|---|
summary.total_candidates |
Whether Phase 0 has actually scanned the user's materials |
materials[].evidence_priority |
Phase 3 concept、Phase 4 plan、Phase 5 results/methods |
materials[].ingestion.status |
Whether Phase 2.1/Phase 5 need to first parse DOCX/XLSX with asset-aware |
agent_next_steps.asset_aware_file_paths |
The specific file list for which the Agent must call asset-aware |
agent_next_steps.asset_aware_required |
Prevent reading only summaries and missing formal tables/data files |
Data Anchor Provenance Rule:data-artifacts.yaml of data_anchors must not use concept.md, agent summary, or inferred/estimated values as sources. Every numeric/statistical anchor must cite ready/ingested source_material_id、asset_aware_doc_id、data_artifact_id, or a trusted data file; if the source material is still pending_asset_aware, Hook F4 must CRITICAL fail.
| pipeline.hook_*_max_rounds | Hook A/B/C cascading limit |
| pipeline.review_max_rounds | Phase 7 Autonomous Review rounds |
| pipeline.writing.anti_ai_* | Hook A3 Anti-AI strictness |
| pipeline.writing.citation_density | Hook A2 citation density standard |
| pipeline.assets.* | Phase 5 Asset Sub-Pipeline behavior |
| pipeline.autopilot | Fully automatic mode (default true) |
Autopilot mode (enabled by default)
pipeline:
autopilot: true # 預設全自動,用戶可設 false 啟用逐步審閱
autopilot_pause_at: [] # 用戶可指定暫停點,例如 ["phase4", "phase5_section", "phase7_rewrite"]
| autopilot setting | Behavior |
|---|---|
true(default) |
The Agent makes autonomous decisions, self-reviews, and self-corrects throughout, and only asks the user when a safety valve is triggered |
false |
Ask the user at every Phase confirmation point (traditional mode) |
autopilot_pause_at |
Specify particular pause points (fine-grained control), e.g. Phase 4 confirm outline, Phase 5 section by section |
Safety valves (the user is asked even if autopilot=true):
- concept score < 75 and still below standard after 2 automatic corrections
- Phase 6 still has CRITICAL after 3 rounds of cascading fix
- Phase 7 reaches max_rounds and quality is still below standard
- regression_count > 2 (to prevent infinite loops)
Gate: journal-profile.yaml exists + the user has confirmed key fields (word count, figure/table limits)
Phase 1: PROJECT SETUP
Skill: project-management
project_action(action="current")→ switch if a project exists, otherwise create oneproject_action(action="create", name, paper_type)orproject_action(action="switch", slug)project_action(action="setup")- Load
journal-profile.yaml→ verify paper_type consistency project_action(action="update", target_journal=journal.name)workspace_state_action(action="sync", doing="phase 1 setup", next_action="phase 2 literature")
Gate: project exists + paper_type is consistent with journal-profile
Phase 2: LITERATURE SEARCH
Skill: literature-review, parallel-search
External MCP: pubmed-search, zotero-keeper(optional)
generate_search_queries(topic, strategy="comprehensive")- Parallel
unified_search()× 3-5 sets merge_search_results()get_citation_metrics(sort_by="relative_citation_ratio")- Select the first 15-20 papers →
save_reference_mcp(pmid, agent_notes) - [Optional] Zotero:
search_items(query)→ retrieve PMIDs →save_reference_mcp()
Gate: Paper-type-aware minimum literature count (Code-Enforced)
| Paper Type | Minimum literature count |
|---|---|
| original-research | 20 |
| review-article | 30 |
| systematic-review | 40 |
| meta-analysis | 40 |
| case-report | 8 |
| letter | 5 |
| fallback | 15 |
Parsing priority order:journal-profile.yaml references.minimum_reference_limits → DEFAULT_MINIMUM_REFERENCES → DEFAULT_MIN_REFERENCES (15)
Automatic decision: < minimum → expand_search_queries; >500 → add MeSH restriction; if the user has Zotero → proactively ask about importing.
Phase 2.1: FULLTEXT INGESTION & ASSET EXTRACTION
Skill: literature-review
External MCP: asset-aware-mcp, pubmed-search
Input: Literature saved in Phase 2 (must meet the paper-type-specific minimum count)
Output: Full-text parsing result for each paper + analysis.json + references/fulltext-ingestion-status.md
Core principle: Before citing a paper, you must read the full text and complete a structured analysis. Abstract/metadata alone is insufficient to support citations in Methods/Results/Discussion.
Context Isolation: Each paper is read and analyzed by an independent subagent, avoiding 20+ full texts polluting the main agent context.
Process:
list_saved_references()→ retrieve the list of all saved literature- For each paper:
a. Look up the PDF source:
get_fulltext(pmcid)(pubmed-search MCP) oranalyze_fulltext_access(pmids)confirm Open Access status b. IF the full text is available:- Retrieve full text: pubmed-search
get_fulltext(pmcid, sections="all")or download the PDF - Parse full text: asset-aware
ingest_documents(file_paths=[pdf_path], use_marker=true) - Wait for processing:
get_job_status(job_id)until complete - Build index:
inspect_document_manifest(doc_id)retrieve the complete asset list - Extract key passages:
get_section_content(doc_id, section_path)→ Methods, Results, Discussion - Update metadata.json: add
fulltext_ingested: true,asset_aware_doc_id,fulltext_sectionsc. IF the full text is unavailable: - Record the reason: add to metadata.json
fulltext_ingested: false,fulltext_unavailable_reason: "..." - ⚠️ When writing, this paper's abstract may only be cited for conclusive information; specific methods or data must not be cited
- Retrieve full text: pubmed-search
- Subagent reading and analysis (CRITICAL — one subagent per paper):
a. Main Agent calls
get_reference_for_analysis(pmid)→ retrieve the structured full-text package (≤30K characters) b. UserunSubagentto launch an independent subagent, with a prompt containing:- Full-text content (result of step a)
- Analysis instructions: summary, methodological assessment, key findings, limitations, which sections of the article they can be used in
- Require the subagent to call
save_reference_analysis(pmid, summary, methodology, key_findings, limitations, usage_sections, relevance_score)c. After the Subagent completes,analysis.jsonhas been written to the reference directory,metadata.jsonmarkanalysis_completed: trued. For subsequent writing, the Main Agent uses onlyanalysis_summary, and does not re-read the full text → zero context pollution
- Produce
references/fulltext-ingestion-status.md:
| PMID | Title | Full-text status | Asset-Aware | Analysis status | Usable sections | Notes |
|---|---|---|---|---|---|---|
| ... | ... | ✅ | doc_abc | ✅ | I/M/R/D | |
| ... | ... | ❌ | — | ⚠️ | I only | Non-OA |
Gate: fulltext-ingestion-status.md has been created + each paper's full-text status is marked
CRITICAL Gate: All papers must have analysis_completed: true(enforced check by Pipeline Gate Phase 2.1)
WARNING Gate: If >50% of papers lack full text → remind the user to consider supplementing with OA literature
Phase 2.5: CRITICAL APPRAISAL
Input: Literature completed in Phase 2 + 2.1 (including full-text parsing results)
Output: references/appraisal-matrix.md
Purpose: Before entering the conceptual stage, assess the quality of core literature to avoid building research on low-quality evidence. requires: Phase 2.1 complete (quality assessment is more precise when full-text parsing results are available)
-
For each core reference (≥5 papers), assess:
- Study design quality (RCT > cohort > case series > case report > expert opinion)
- Risk of bias (selection, performance, detection, attrition, reporting)
- Adequacy of sample size
- Appropriateness of statistical methods
- Whether conclusions are supported by the data
- [NEW] Full-text verification status: Has the full text been read via asset-aware reading? References whose full text has not been read are marked ⚠️
-
Produce a quality matrix (appraisal-matrix.md):
| PMID | 1st Author | Design | Quality | Bias Risk | Key Limitation |
|---|---|---|---|---|---|
| ... | ... | RCT | High | Low | ... |
- Mark low-quality references (Quality = Low); they should not be relied on excessively in the concept phase
Gate: appraisal-matrix.md has been created, with at least 5 papers assessed
Phase 3: CONCEPT DEVELOPMENT
Skill: concept-development
External MCP: cgu(when novelty needs boost)
- Analyze saved references → identify Gap
- Write concept.md (including 🔒 NOVELTY + 🔒 SELLING POINTS)
write_draft(filename="concept.md", content=..., skip_validation=True)validate_concept(project=...)- IF score < 75:
- Auto-revise once → re-verify
- Still < 75 → CGU:
deep_think/spark_collision/generate_ideas→ revise → re-verify - Still < 75 → STOP, report back to the user (with CGU suggestions)
Gate: concept score ≥ 75 OR the user explicitly says "continue"
CGU tool mapping:
| Problem | CGU tool | Output |
|---|---|---|
| Find weaknesses | deep_think |
Reviewer attack angles |
| Find arguments | spark_collision |
Collide novel angles |
| Broad ideation | generate_ideas |
3-5 novelty candidates |
| Multiple perspectives | multi_agent_brainstorm |
Multi-role debate |
Phase 4: MANUSCRIPT PLANNING
Deliverables:manuscript-plan.yaml(exists under projects/{slug}/ )
- Read concept.md + saved references + journal-profile.yaml
- Produce
manuscript-plan.yaml(paragraph-level Section Brief):writing_order: based onjournal-profile.paper.sections, fallback to paper type defaultsections: each section includesword_budget+paragraphs[]- Each paragraph:
id,function,topic,key_claims,must_cite,word_target - 🔒 Protected paragraph marker
protected: true(Novelty Statement / Selling Points) - Methods paragraphs may include
checklist_items(corresponds to B5 methodology)
- Each paragraph:
asset_plan: figures/tables/flowcharts (includingtool,tool_args,caption,caption_requirements)- ⚠️ total verified count ≤
assets.figures_max+assets.tables_max - ⚠️ verified ≤
assets.total_display_items_max
- ⚠️ total verified count ≤
submission_checklist: list items to prepare based onrequired_documents.*List required items to preparemetadata:generated_at,based_on,changelog[]
- Plan modification rules:
- Agent may add paragraphs / modify claims / adjust word count → must be written to
metadata.changelog - Agent ProhibitedDelete
protected: trueparagraphs - User edits freely; changelog is tracked automatically
- Agent may add paragraphs / modify claims / adjust word count → must be written to
- Autopilot mode(
pipeline.autopilot: true, default):- Agent verifies the plan's completeness on its own (number of figures/tables, word count budget, section coverage)
- Verification passes → save directly to
projects/{slug}/manuscript-plan.yaml→ continue to Phase 5 - Verification fails → Agent revises on its own → re-verifies (max 2 rounds) → only ask the user if it still fails
- Plan summary is recorded in
.audit/pipeline-run-{ts}.md, which the user can review later
- Manual mode(
pipeline.autopilot: falseorautopilot_pause_atincludes"phase4"):- 🗣️ Present manuscript-plan.yaml summary to user for confirmation
- User adjusts → confirms → saves
Gate: manuscript-plan.yaml exists + number of figures/tables does not exceed limit
Writing order (according to journal-profile.paper.sections, fallback to paper type default):
| Paper Type | Suggested order |
|---|---|
| original-research | Methods → Results → Introduction → Discussion → Abstract |
| systematic-review | Methods → Results → Discussion → Introduction → Abstract |
| case-report | Case Presentation → Discussion → Introduction → Abstract |
Phase 4.5: SUPPLEMENTARY PLANNING
Input: manuscript-plan.yaml(Phase 4 output)
Output: manuscript-plan.yaml updated (add supplementary section)
Purpose: Plan Supplementary Materials before writing, to avoid having to go back and supplement after the main manuscript is completed.
-
Determine whether supplementary materials are needed based on the journal profile
-
Plan supplementary content:
- Supplementary Tables (large data tables, subgroup analyses)
- Supplementary Figures (additional result figures)
- Supplementary Methods (detailed methodology, code)
- Sensitivity analysis results
- Full EQUATOR checklist (e.g., CONSORT flow diagram)
-
In
manuscript-plan.yamladdsupplementarysection:
supplementary:
- id: S1
type: table
title: "Baseline characteristics by subgroup"
linked_section: Results
- id: S2
type: figure
title: "Sensitivity analysis forest plot"
linked_section: Results
- Create
supplementary/directory structure
Gate: manuscript-plan.yaml contains a supplementary section (can be empty = no supplementary materials needed)
Phase 4.9: SUB-SECTION WRITING TEMPLATES (paragraph-level writing guidance)
Purpose: Supplement the paragraph-level prior knowledge of Phase 4 manuscript-plan.yaml . When the Agent writes each paragraph in Phase 5, itmust cross-checkthe following templates to ensure complete structure and coherent logic.
Introduction paragraph template (Funnel Structure)
| Paragraph | Function | Content requirements | Citation requirements | Hook check |
|---|---|---|---|---|
| P1 | Broad Context | Importance of the research field, epidemiological data, clinical significance | ≥2 citations (epidemiology/guidelines) | B12(context markers) |
| P2 | Evidence Review | Main findings, methods, conclusions of existing literature | ≥3 citations (core literature) | A2(citation density) |
| P3 | Knowledge Gap | Deficiencies, contradictions, unresolved issues in existing literature | ≥1 citation (identify the source of the gap) | B12(gap markers) |
| P4 | Study Objective | Purpose of this study, hypothesis (if applicable) | 0-1 citation | B12(objective markers) |
Anti-patterns(automatic FLAG):
- P1 jumps directly to the study purpose (missing context/gap)
- P2 only lists names without describing content (name-dropping)
- P3 lacks a specific gap statement (e.g., "however, ... remains unclear")
- P4 exceeds 2 sentences (overly lengthy purpose statement)
Methods paragraph template (Reproducibility Structure)
| Paragraph | Function | Content requirements | Citation requirements | Hook check |
|---|---|---|---|---|
| M1 | Study Design | Study type, period, institution, IRB approval | ≥1 (design basis) | B14(ethical statements) |
| M2 | Participants | Inclusion/exclusion criteria, sample size calculation | ≥1 (criteria basis) | B9(past tense) |
| M3 | Intervention/Exposure | Detailed description of intervention measures, control group definition | ≥1(intervention protocol) | B5 (methodology checklist) |
| M4 | Outcome Measures | Primary/secondary outcome measures, measurement methods, definitions | ≥2(validated instruments) | C11 (Methods citations) |
| M5 | Statistical Analysis | Statistical methods, software version, significance level | ≥1 (statistical method citations) | B8(data-claim alignment) |
Anti-patterns:
- M1 missing IRB/ethics approval → B14 CRITICAL
- M2 no sample size justification → WARNING
- M5 statistical methods inconsistent with Results → B8 CRITICAL
Results paragraph template (Data-First Structure)
| Paragraph | Function | Content requirements | Citation requirements | Hook check |
|---|---|---|---|---|
| R1 | Study Flow / Demographics | Screening process, baseline characteristics (→ Table 1) | 0 (pure data) | C13 (figure/table citations) |
| R2 | Primary Outcome | Main results, statistical tests, effect size + CI | 0 (pure data) | B11 (objectivity), B16 (effect size) |
| R3 | Secondary Outcomes | Secondary results, subgroup analyses | 0-1 (method citations) | B8 (statistical alignment) |
| R4 | Subgroup / Sensitivity | Subgroup analysis, sensitivity analysis (if applicable) | 0 (pure data) | C13 (figure/table citations) |
Anti-patterns:
- R1-R4 contain interpretive language ("suggesting", "indicating") → B11 WARNING
- Results contain no figure/table citations → C13 WARNING
- Effect size missing CI → B16 WARNING
Discussion paragraph template (Interpretation Structure)
| Paragraph | Function | Content requirements | Citation requirements | Hook check |
|---|---|---|---|---|
| D1 | Main Findings | Summarize main findings (do not repeat Results numbers) | 0-1 | B13(main finding markers) |
| D2-D3 | Literature Comparison | Consistency/contradiction with existing literature | ≥3 (comparative literature) | C11 (Discussion citation distribution) |
| D4 | Mechanisms / Implications | Possible mechanistic explanations, clinical/practical implications | ≥1 (mechanistic literature) | B13(implications markers) |
| D5 | Limitations | Study limitations (design, bias, generalizability) | 0-2 | B13(CRITICAL if missing) |
| D6 | Conclusion / Future | Summary + future research directions | 0-1 | B15 (appropriate amount of hedging) |
Anti-patterns:
- D1 repeats statistical numbers from Results → WARNING
- D2-D3 no citations (not compared with literature) → C11 CRITICAL
- D5 absent → B13 CRITICAL
- Excessive hedging throughout the text (> 6/1000 words) → B15 CRITICAL
Abstract paragraph template (Structured Abstract)
| Paragraph | Function | Word count target | Content requirements |
|---|---|---|---|
| A1 | Background | 40-60 words | Background + gap (1-2 sentences) |
| A2 | Methods | 60-80 words | Design, sample, main measurements |
| A3 | Results | 80-120 words | Main results + statistical numbers |
| A4 | Conclusions | 30-50 words | Clinical significance (1-2 sentences, avoid overgeneralization) |
Note: Abstract word count is strictly limited by journal-profile.yaml.
Figure/table insertion specifications (integrated with C13 Hook)
| Rule | Description | Hook |
|---|---|---|
| Sequential citation | Figure 1 must first appear before Figure 2 | C13 |
| Complete caption | ≥10 words, including axes/variables/abbreviations | C13 |
| Results must have | Results with data claims → must cite at least 1 figure/table | C13 |
| Orphan detection | Present in Manifest but not cited in text → WARNING | C7d |
| Phantom detection | Cited in text but not in Manifest → CRITICAL | C7d |
| Quantity limit | Does not exceed the max set in journal-profile | C7a |
Citation Decision Record specification (integrated with C12 Hook)
Each cited reference must be recorded in citation_decisions.json with a decision record:
{
"smith2023_12345678": {
"justification": "Largest RCT comparing X vs Y in same population, supports our primary outcome finding",
"cited_sections": ["Introduction", "Discussion"],
"relevance_score": 9,
"decision_date": "2025-01-15",
"decided_by": "agent"
},
"jones2022_87654321": {
"justification": "Validated the measurement instrument used in our study (M4 outcome measures)",
"cited_sections": ["Methods"],
"relevance_score": 8,
"decision_date": "2025-01-15",
"decided_by": "agent"
}
}
Workflow:
- Phase 2 →
save_reference_analysis()Createusage_sections - Phase 5 → every time
insert_citation(), simultaneously updatecitation_decisions.json - Phase 6 → C12 Hook validation: every citation has justification + cited_sections matching the actual text
Phase 5: SECTION WRITING (core + Cascading Audit Loop)
Skill: draft-writing
External MCP: drawio(diagrams), cgu(Discussion), data-tools(figures/tables)
Input: manuscript-plan.yaml(Phase 4 output)
plan = load("manuscript-plan.yaml")
FOR section IN plan.writing_order:
brief = plan.sections[section]
── Step 1: 準備 ──
1a. 讀取 brief.paragraphs + 已完成 sections + get_available_citations()
1b. 讀取 plan.asset_plan[section] → 確認需要哪些圖表
── Step 2: Asset 生成(先於寫作,見下方 Asset Sub-Pipeline)──
2a. IF plan.asset_plan 有該 section 的 asset:
→ 執行 Asset Generation Sub-Pipeline
→ 產出 asset manifest entries(圖表路徑 + caption)
── Step 3: 撰寫(段落級 Brief 引導) ──
3a. IF Methods + asset_plan 有 diagram:
→ drawio.create_diagram → XML
→ drawio.export_diagram → PNG/SVG
→ save_diagram(project, content, rendered_content, rendered_format)
→ insert_figure(rendered_filename or source filename, caption, draft_filename, after_section)
3b. FOR paragraph IN brief.paragraphs:
→ 依據 paragraph.topic + key_claims + must_cite 撰寫
→ 尊重 paragraph.word_target
→ 若 paragraph.protected = true → 確保 🔒 內容完整
→ 若 paragraph.checklist_items → 逐條涵蓋
→ ✍️ 每段開始前呼叫 `workspace_state_action(action="checkpoint", section=..., plan=..., notes=..., references_in_use=...)`
→ 儲存寫作大綱與推理狀態,防止 compaction 遺失
3c. draft_section() 或 write_draft()
→ 撰寫時整合 Step 2 產出的 asset references
→ ✅ 成功後自動 checkpoint 至 .mdpaper-state.json(無需手動)
3d. IF Discussion + 論點弱:
→ cgu.deep_think → 強化邏輯鏈
── Step 4: Cascading Audit Loop(最多 3 rounds) ──
4a. 🔔 HOOK A: post-write audit
→ Round 1: run A1-A4 → collect issues
A1: 字數 vs brief.word_budget
IF issues → patch_draft 修正 → re-run A1-A4
→ Round 2: IF still issues → patch_draft(不同策略)→ re-run
→ Round 3: IF still issues → LOG to .audit/ + FLAG for Phase 6
4b. 🔔 HOOK B: post-section audit
→ run B1-B7 → collect issues
→ B7: Section Brief 合規(段落級比對 + caption_requirements,見 Hook B7 定義)
→ IF critical (B1 concept 不一致 / B2 🔒 缺失 / B5 <5):
→ targeted patch_draft → re-run Hook A on patched areas (1 round)
→ re-run Hook B → IF still critical → FLAG for Phase 6
→ IF advisory only → LOG + continue
── Step 5: Agent 自主審閱 + 即時修正(Autopilot 預設行為)──
**核心原則**:Agent 在寫完 section 後立即自我評估,發現問題就地修正,
不需等到 Phase 7 Review 才回頭改。這才是真正的 autopilot。
5a. Agent 自行評估 section 品質:
- Hook A/B 結果 → 有無未解 CRITICAL/WARNING
- 與 concept.md 的一致性
- 與已完成 sections 的邏輯連貫性
- 段落是否完整涵蓋 manuscript-plan.yaml 的 key_claims
5b. IF 發現問題 → Agent 立即修正:
- 針對性 patch_draft() → re-run 相關 Hook
- 修正直到 0 CRITICAL,或達 cascading 上限後 FLAG for Phase 6
- 決策和修正記入 `.audit/pipeline-run-{ts}.md`
5c. 自我評估通過 → Agent 呼叫 `pipeline_action(action="approve_section", section=section, decision="approve")`
→ 自動標記 approved → 繼續下一個 section
5d. **用戶可隨時介入**:
- 用戶說「我要看一下」→ Agent 暫停,呈現 section 摘要
- 用戶說「每個 section 都讓我看」→ Agent 對後續 section 切換為手動審閱模式
**手動審閱模式**(`pipeline.autopilot: false` 或 `autopilot_pause_at` 含 `"phase5_section"`):
5e. 呈現 section 內容摘要(字數、主要論點、Hook A/B 結果)
5f. 🗣️ 詢問用戶:「approve / 請修改(附具體意見)」
5g. Agent 呼叫 `pipeline_action(action="approve_section", section=section, decision=action, feedback=feedback)`
5h. IF action == "revise":
→ 根據 feedback 執行 patch_draft / write_draft 修正
→ re-run Hook A/B on modified content
→ 回到 5e 再次呈現(最多 3 輪修改)
5i. IF action == "approve":
→ 繼續到下一個 section
⏸️ 暫停點:用戶可隨時說「暫停」→ Agent 呼叫 `pipeline_action(action="pause")`
→ 用戶自由編輯草稿
→ 用戶說「繼續」→ Agent 呼叫 `pipeline_action(action="resume")`
→ 根據修改偵測結果重新跑相關 Hook
── Step 6: 記錄 ──
6a. Log section audit results 到 .audit/pipeline-run-{ts}.md
6b. Log 到 .memory/progress.md
6c. 更新 checkpoint.json: { last_section: section, audit_status }
6d. IF plan 需修改 → 寫入 plan.metadata.changelog + 存檔
Asset Generation Sub-Pipeline(Phase 5 Step 2)
Before writing each section, generate the required assets according to asset_plan:
FOR asset IN asset_plan[section]:
SWITCH asset.type:
CASE "table_one":
1. list_data_files() → 確認資料存在
2. detect_variable_types(file) → 自動分類
3. generate_table_one(file, groups, variables) → 產出表格
4. insert_table(filename, table_data, caption) → 插入草稿
→ ❌ 無資料檔 → 提示用戶提供,SKIP asset
CASE "statistical_test":
1. analyze_dataset(file) → 了解資料分佈
2. run_statistical_test(file, test_type, ...) → 執行檢定
3. 結果整合到 section 文字中
→ ❌ 不確定檢定方法 → 詢問用戶
CASE "plot":
1. create_plot(file, plot_type, ...) → 產生圖片
2. insert_figure(filename, image_path, caption) → 插入草稿
→ ❌ 圖表不合理 → 提供替代建議
CASE "flow_diagram": (CONSORT, PRISMA, study flow)
1. IF drawio MCP 可用:
→ drawio.create_diagram(type, data) → XML
→ drawio.export_diagram(format="png" or "svg") → rendered asset
→ save_diagram(project, content, name, rendered_content, rendered_format)
→ insert_figure(filename=name or rendered filename, caption, draft_filename, after_section)
2. ELSE:
→ 產生 Mermaid 文字描述 → 存入 results/diagrams/
→ FLAG: 建議用戶手動轉換
3. reference 在草稿中,確保導出的 Word/PDF 可見圖像而不只是 `.drawio` 原始檔
CASE "custom_figure":
1. Agent 依 asset_plan 說明 → create_plot 或手動描述
2. insert_figure() 或 FLAG 需外部工具
| Asset Type | Required MCP Tool | External MCP | Fallback |
|---|---|---|---|
| table_one | generate_table_one |
— | Manually provide table |
| statistical_test | run_statistical_test |
— | Describe expected analysis |
| plot | create_plot |
— | Describe figure/table requirements |
| flow_diagram | save_diagram + insert_figure |
drawio 🔸 |
Mermaid text |
| forest_plot | ❌ Missing | meta-analysis 🔸 |
R/Python script |
| funnel_plot | ❌ Missing | meta-analysis 🔸 |
R/Python script |
| PRISMA_diagram | save_diagram + insert_figure |
drawio 🔸 |
Mermaid text |
Agent-Initiated Asset Generation (autonomously add figures/tables during writing)
The asset_plan in Phase 4 cannot foresee all needs. During writing, the Agent may discover the need for literature comparison table、method comparison table , etc.
觸發條件(Phase 5 Step 3 寫作中):
- 引用 ≥3 篇文獻做比較 → 考慮 literature_summary_table
- 描述多種方法/技術差異 → 考慮 comparison_table
- 概念或架構複雜 → 考慮 concept_diagram
流程:
1. 檢查 journal-profile.yaml → pipeline.assets.agent_initiated.enabled
2. 檢查類型是否在 allowed_types 中
3. 檢查目前圖/表數量是否已達 assets.figures_max / tables_max
4. IF 可新增:
a. 用 Markdown 表格撰寫(文獻比較表、方法對照表等)
b. 或 create_plot / save_diagram(如需圖形)
c. 附 caption + 標記來源為 "agent-initiated"
d. insert_table() 或 insert_figure() → 插入草稿
e. 更新 asset_plan(追加到 plan.metadata.changelog)
f. 記錄到 .audit/: 為何新增、依據哪些文獻
5. IF 已達上限:
→ 評估是否替換低優先級 asset
→ 或以文字描述替代,不生成實際圖表
常見 Agent-Initiated Assets:
- 「Table X. Comparison of [topic] across studies」 → 文獻整理表
- 「Table X. Characteristics of included studies」 → SR/Review 常見
- 「Figure X. Conceptual framework of [approach]」 → 架構圖
Phase 6: CROSS-SECTION CASCADING AUDIT
Three-stage audit: first full-manuscript check → then retrospective correction → final validation.
── Stage 1: 全稿掃描 ──
1. 🔔 HOOK C: post-manuscript (C1-C8, C9-C14)
2. 收集所有 issues → 分類為 CRITICAL / WARNING / INFO
3. 收集 Phase 5 FLAG(未解決的 Hook A/B issues)
── Stage 2: 分層回溯修正(Cascading Fix,最多 3 rounds)──
Round 1:
FOR each CRITICAL issue:
a. 定位到具體 section + 段落
b. patch_draft() 修正
c. re-run 該 section 的 Hook A(確認 patch 沒破壞原有品質)
→ re-run Hook C (C1-C8, C14 where strong claims changed)
Round 2 (IF still CRITICAL):
FOR each remaining CRITICAL:
a. 分析 Round 1 修正為什麼失敗
b. 嘗試不同修正策略(重寫段落 vs 微調)
c. patch_draft()
→ re-run Hook C
Round 3 (IF still CRITICAL):
→ LOG all remaining issues to .audit/quality-scorecard.md
→ 呈現給用戶,附具體修改建議
→ 等待用戶決定(修改 / 接受 / 回到 Phase 5 重寫)
── Stage 3: 最終驗證 ──
4. re-run Hook C → 確認 0 CRITICAL
5. 生成 quality-scorecard.md(量化分數)
6. 更新 checkpoint.json
Gate: 0 critical issues (warnings recorded but acceptable)
Cascading retrospective rules
| Hook C Issue | Retrospect to | Triggered Hook |
|---|---|---|
| C1 Manuscript inconsistency | Weaker section | Hook B4 → Hook A |
| C3 N value inconsistent across sections | All sections containing N | Hook A → patch |
| C4 Abbreviation undefined | Section where it first appears | Hook A4 → patch |
| C5 Wikilinks unresolvable | Corresponding section | Hook A2 → A4 |
| C6 Total word count over limit | Longest section | Hook A1 → patch |
| C7a Figures/tables over limit | — | Merge or move to supplementary |
| C7b Citations over limit | — | Mark low-citation refs → user decides |
| C7c Exact word count comparison | Longest section | Hook A1 → patch |
| C7d Phantom citations | Corresponding section | Insert missing figure/table or remove citation |
| C7e Wikilink inconsistency | Corresponding section | Hook A4 → patch |
| C11 Uneven citation distribution | Sections lacking citations | Hook A2 → add citations |
| C12 Citations missing decision records | — | Generate citation_decisions.json |
| C13 Figure/table order/caption issues | Corresponding section | Hook C7d → patch |
Phase 6.5: EVOLUTION GATE (mandatory entry into Review) 🆕
Purpose: establish a revision baseline, ensuring Phase 7 Review always executes(not skipped just because Hooks A-C all pass). Trigger: After Phase 6 completes MANDATORY(no skip conditions).
── Step 1: Snapshot Baseline ──
1. DraftSnapshotManager.snapshot_all(reason="pre-review-baseline")
→ 快照所有 section 的當前版本
2. 記錄 quality-scorecard Round 0 分數
3. 記錄到 .audit/evolution-log.jsonl:
{"event": "baseline", "round": 0, "timestamp": "...",
"scorecard": {6 維度分數}, "word_count": N,
"instruction_version": git_short_hash()}
── Step 2: Force Review Entry ──
4. 無論 Hook C 結果如何 → 設定 review_required = true
5. 載入 journal-profile.yaml → reviewer_perspectives + quality_threshold
6. IF journal-profile.yaml 不存在:
→ 從 templates/ 生成預設值 → 存入專案
→ LOG: "Auto-generated journal-profile.yaml with defaults"
Gate: baseline snapshot completed → pipeline_action(action="validate_phase", phase=65) must PASS → enter Phase 7
Phase 7: AUTONOMOUS REVIEW (Structured Review Loop — MANDATORY) 🆕
Purpose: Simulate peer review, produce a structured Review Report + Author Response, and ensure every issue is responded to.
Trigger:ALWAYS(Phase 6.5 mandatory entry, cannot be skipped). Even if Hook A-C all pass and quality has met the standard, at least 2 rounds must still be executed (code-enforced min_rounds=2)。
upper limit:pipeline.review_max_rounds(default 3).
minimum rounds:min_rounds=2(Code-Enforced:AutonomousAuditLoop._determine_verdict() When round < min_rounds, forcibly return CONTINUE; early termination is not allowed).
Hard Gate: Each round MUST call pipeline_action(action="start_review", min_rounds=2) to start + pipeline_action(action="submit_review", scores=...) to end. After the loop ends, pipeline_action(action="validate_phase", phase=7) must PASS (verify rounds_completed >= min_rounds).
Multi-Reviewer design (simulating 2-3 independent reviewers) 🆕
Human peer review is usually conducted by 2-3 independent reviewers, each with different knowledge backgrounds and thinking patterns. To simulate this process:
Each Review round launches 2-3 subagents, each subagent usinga different top-tier model(to avoid identical thinking patterns):
| Reviewer | Model | Role |
|---|---|---|
| R1 | Claude Opus 4.6 | Methodology Expert + Statistician |
| R2 | OpenAI Codex 5.3 | Domain Specialist + Editor |
| R3 | Gemini Pro 3.1 | Independent Critical Reviewer |
Each Reviewer must:
- Search literature for verification: use
unified_search/find_related_articlesto search relevant literature, compare whether the manuscript's citations are sufficient and whether the conclusions are consistent with existing evidence - Independently read the full manuscript: do not refer to other Reviewers' opinions
- Raise 5-10 structured questions: each question must include section, paragraph, category, issue, suggestion
- Literature comparison: cite at least 2-3 searched references to support or challenge the manuscript's viewpoints
- Give an independent score: score each of the 6 quality dimensions
Merge process:
- After all Reviewers independently complete, merge into a unified
review-report-{round}.md - Deduplicate repeated issues, keeping the strictest severity
- Author Response must respond to all issues from all Reviewers
載入 journal-profile.yaml → 取得 reviewer_perspectives + quality_threshold
── Review Loop(最少 min_rounds 輪,最多 max_rounds 輪)──
FOR round = 1 TO N:
── Stage A: Multi-Reviewer Review(獨立 subagent) ──
LAUNCH 2-3 subagents in parallel (each using different model):
FOR each reviewer subagent:
1. 搜尋文獻:unified_search() 搜尋與稿件主題相關的最新文獻(至少 5 篇)
2. 比對文獻:find_related_articles() / find_citing_articles() 驗證稿件引用
3. 獨立審查全稿,提出 5-10 個結構化問題
4. 以搜尋到的文獻為依據,標記稿件中的不足或錯誤
5. 獨立評分(6 維度)
Reviewer 角色覆蓋:
"methodology_expert":
- 研究設計是否嚴謹?統計方法是否恰當?
- 方法是否可再現?偏差控制是否充分?
- 搜尋同類方法學文獻 → 比對是否有遺漏的 best practice
"domain_specialist":
- 文獻引用是否全面且最新?
- 對領域 gap 的理解是否準確?臨床意義是否明確?
- 搜尋最新系統性回顧 → 驗證稿件是否與當前共識一致
"statistician":
- 統計假設是否合理?結果呈現是否清晰?
- 圖表是否有效傳達數據?
- 搜尋統計方法指引 → 驗證分析方法的恰當性
"editor":
- 寫作品質(清晰度、邏輯流、語法)
- 是否符合期刊風格?圖表品質與必要性
MERGE all reviewer outputs → 統一 review-report-{round}.md
產出 .audit/review-report-{round}.md:
┌─────────────────────────────────────────────────┐
│ --- │
│ round: 1 │
│ date: "YYYY-MM-DD" │
│ reviewers: │
│ - role: "Methodology Expert" │
│ issues_major: 2 │
│ issues_minor: 1 │
│ - role: "Domain Specialist" │
│ issues_major: 1 │
│ issues_minor: 3 │
│ total: │
│ major: 3 │
│ minor: 5 │
│ optional: 2 │
│ --- │
│ │
│ # Review Report — Round {round} │
│ │
│ ## Reviewer 1: Methodology Expert │
│ ### MAJOR │
│ - id: R1-M1 │
│ section: Methods │
│ paragraph: methods-p3 │
│ category: methodology │
│ issue: 缺少 sample size justification │
│ suggestion: 加入 power analysis │
│ ### MINOR │
│ - id: R1-m1 │
│ section: Results │
│ ... │
└─────────────────────────────────────────────────┘
── Stage B: Author Response(全 issue 須回應) ──
產出 .audit/author-response-{round}.md:
┌─────────────────────────────────────────────────┐
│ --- │
│ round: 1 │
│ response_to: "review-report-1.md" │
│ actions: │
│ accepted: 6 │
│ accepted_modified: 2 │
│ declined: 2 │
│ --- │
│ │
│ # Author Response — Round {round} │
│ │
│ ### R1-M1: Sample size justification │
│ - **Action**: ACCEPT │
│ - **Response**: Added power analysis... │
│ - **Change**: methods-p3 (+45 words) │
│ - **Verified**: Hook A re-run ✅ │
│ │
│ ## Completeness Check │
│ | Issue ID | Addressed | Action | │
│ | R1-M1 | ✅ | ACCEPT | │
│ | R2-o1 | ✅ | DECLINE | │
│ ALL issues addressed: ✅ │
└─────────────────────────────────────────────────┘
── Completeness Check(每輪必過)──
FOR issue IN review_report.all_issues:
IF issue.id NOT IN author_response → FAIL(禁止忽略 issue)
→ 未回應的 issue 必須標記 DECLINE + 理由
── Stage C: 執行修正(MANDATORY — 稿件必須被修改) ──
⚠️ HARD ENFORCEMENT: `pipeline_action(action="submit_review", ...)` 會比對稿件 hash。
若稿件未修改 → 提交會被 REJECT。
FOR each ACCEPTED issue:
1. 定位 paragraph ID(from manuscript-plan.yaml)
2. patch_draft() 修正
3. re-run Hook A on patched section
4. 記錄到 author-response
FOR each MINOR ACCEPTED issue:
1. batch patch_draft 修正
2. 快速 Hook A 驗證
OPTIONAL + DECLINED issues → LOG only(不自動修正)
── Stage C2: 敘事強化(MANDATORY — 即使無結構問題) ──
人類 reviewer 即使不要求結構修改,也會提升敘事品質。
AI reviewer 必須做到至少同等標準:
1. 選擇至少 3 段落進行「敘事強化」(tighten prose, improve transitions,
strengthen claims, eliminate redundancy, improve word economy)
2. 每段 patch_draft() 修正,附帶改善理由
3. 記錄到 author-response 的 "Narrative Enhancements" section
IF 沒有結構性 issue(全部 DECLINE 或 OPTIONAL only):
→ Stage C2 仍然 MANDATORY(最低改 3 段落)
→ 目標:人類讀者應能看到「review 前」vs「review 後」有明顯差異
── Stage C3: Anti-AI 自然度審查(MANDATORY — Code-Enforced Gate) ──
AI 生成文字常被偵測器(Gemini 3.1 等)秒辨。Stage C3 強制 Agent 自我檢測並修正。
更關鍵的是:有經驗的人類審稿人會注意到段落間的「語體斷裂」——前段 ESL 風格突然切換到
流暢的 corporate-academic prose,即使通過自動偵測也會引起懷疑。
Step 1: Code-Enforced Hook Gate(三層掃描)
→ run_quality_checks(action="writing_hooks", hooks="A3,A3B,A3C")
→ A3: 禁止詞掃描(~150 個 AI 特徵用語)
→ A3b: 結構信號偵測(句長均勻度、轉折詞密度、句首多樣性、三連列舉、段落均勻度)
→ A3c: 語體一致性偵測(段落級可讀性指標 z-score 異常偵測 + 詞彙精緻度落差)
→ 任何 CRITICAL → 必須 patch_draft 修正後重跑,直到 PASS
Step 2: Agent 自我審閱(Anti-AI Naturalness Check)
Agent 以下列視角重新閱讀全文:
a) 是否有「四平八穩」的語調?(每段都同一節奏 → 改)
b) 是否過度使用被動語態或名詞化?(nominalization → 改為動詞)
c) 是否有 AI 特有的「禮貌性冗餘」?("It is important to note that" → 刪)
d) 段落是否缺乏個人學術觀點?(全是 hedging → 加 assertive claim)
e) 是否有「假平衡」?(on the one hand... on the other hand → 取立場)
f) **語體斷裂**:A3c 標記的 outlier 段落是否「太流暢」而脫離作者自然語體?
→ 降級過度精煉的句子、加回作者的「笨拙但真實」語法特徵
→ 每項至少修正 2 處 → patch_draft()
Step 3: 雙 Subagent 交叉審計(RECOMMENDED — 至少最終輪必做)
使用兩個不同模型的 subagent 分別審計,交叉比對結果:
Subagent 1 — Surface Scanner(concept-challenger 或主 Agent):
→ 審計目標:黑名單詞、結構信號、自動偵測器可偵測的 pattern
→ 問題:「能否通過 GPTZero?哪些具體詞/句需要替換?」
Subagent 2 — Voice Analyst(domain-reviewer):
→ 審計目標:語體一致性、ESL baseline vs polished prose 對比
→ 問題:「人類審稿人會不會因為語體突變而起疑?逐段評分 1-5」
→ 重點:段落級 AI 機率評分,標出 TOP 5 最可疑句子
交叉比對規則:
→ 兩者都標 🔴 → 必須重寫該段落
→ 僅一方標 ⚠️ → Agent 判斷是否需要調整
→ 兩者都 ✅ → 安全
Step 4: 修正後驗證
→ 重跑 run_quality_checks(action="writing_hooks", hooks="A3,A3B,A3C")
→ 必須全部 PASS 或僅 WARNING(無 CRITICAL)才能進入 Stage D
→ IF 仍有 CRITICAL → 回到 Step 2 再修,最多 3 輪
── Stage D: 品質重評 ──
更新 quality-scorecard.md:
| 維度 | Round N-1 分數 | Round N 分數 | 變化 |
計算總分 → 比對 quality_threshold
IF 總分 ≥ quality_threshold:
→ ✅ PASS: 結束 review loop
→ LOG: "Review completed at round {round}, score={score}"
IF 總分 < quality_threshold AND round < N:
→ 繼續下一輪(重新審稿)
→ 分析哪些維度分數最低 → 下一輪重點關注
IF round = N AND 總分 < quality_threshold:
→ ⚠️ PARTIAL: 呈現剩餘問題 + 分數趨勢
→ 詢問用戶:
a) 接受當前品質(記錄風險)
b) 繼續 N 輪(用戶延長 loop)
c) 手動修改後重新 review
d) 🔁 回退到 Phase 5 重寫特定 section → call `pipeline_action(action="rewrite_section", ...)`
── Stage D2: 回退決策(Agent 自主判斷 + 自主執行) ──
IF Agent 判斷某些 section 的問題無法透過 patch_draft 修正,需要整個 section 重寫:
1. 識別需要重寫的 section(通常是 persistent critical issues 集中的 section)
2. **Autopilot 模式**(預設):
→ Agent 直接呼叫 `pipeline_action(action="rewrite_section", sections="Methods,Results", reason="...")`
→ 決策和理由記入 `.audit/pipeline-run-{ts}.md`
→ Pipeline 回退到 Phase 5 → 僅重寫指定 sections
3. **手動模式**(`autopilot: false` 或 `autopilot_pause_at` 含 `"phase7_rewrite"`):
→ 🗣️ 詢問用戶確認:「建議重寫 [section],是否同意?」
→ 用戶確認後執行 `pipeline_action(action="rewrite_section", ...)`
4. 重寫後走 Phase 5 → 6 → 7 完整流程
5. ⚠️ regression_count > 2 → **安全閥:強制停下詢問用戶**(防止無限循環)
── Stage E: Evolution Tracing(每輪結束後) ──
追加到 .audit/evolution-log.jsonl:
{"event": "review_round", "round": N,
"timestamp": "...",
"scorecard": {6 維度分數},
"scorecard_delta": {與 Round N-1 的差異},
"review_issues": {"major": M, "minor": m, "accepted": A, "declined": D},
"draft_snapshots": ["snapshot_path_1", ...],
"patches_applied": [{"section": "...", "issue_id": "R1-M1", "words_changed": N}],
"instruction_version": git_short_hash()}
Hook E: EQUATOR Reporting Guidelines Compliance (Phase 7 Stage A addition) 🆕
In each Review round of Phase 7, additionally execute EQUATOR reporting guideline compliance check. This is one of the system's core selling points: AI canitem by item, without omissionexecute checklist items that human reviewers often overlook.
Trigger: Stage A of each Review round in Phase 7 (in parallel with the 4-role review)
E1: Automatically detect applicable guidelines
1. 讀取 journal-profile.yaml → reporting_guidelines.checklist
2. IF checklist 已指定 → 使用指定指引
3. IF checklist 為空 → 依據 paper.type + Methods 內容自動偵測:
paper.type × 內容特徵 → 適用指引:
┌─────────────────────────┬───────────────────────────────────┐
│ Paper Type / 特徵 │ 主要指引 │ AI 擴展指引 │
├─────────────────────────┼───────────────────────────────────┤
│ RCT │ CONSORT 2010 │ CONSORT-AI │
│ RCT + AI intervention │ CONSORT-AI │ SPIRIT-AI │
│ Observational cohort │ STROBE │ RECORD │
│ Observational + routine │ RECORD │ STROBE │
│ Systematic review │ PRISMA 2020 │ PRISMA-S │
│ Meta-analysis │ PRISMA 2020 │ MOOSE │
│ MA of observational │ MOOSE │ PRISMA 2020 │
│ Diagnostic accuracy │ STARD 2015 │ STARD-AI │
│ Diagnostic + AI │ STARD-AI │ CLAIM │
│ Prediction model │ TRIPOD 2015 │ PROBAST │
│ Prediction + AI/ML │ TRIPOD+AI │ MI-CLAIM │
│ AI clinical decision │ DECIDE-AI │ TRIPOD+AI │
│ AI clinical trial │ SPIRIT-AI │ CONSORT-AI │
│ Medical imaging AI │ CLAIM │ STARD-AI │
│ Case report │ CARE 2013 │ — │
│ Qualitative research │ SRQR / COREQ │ — │
│ Quality improvement │ SQUIRE 2.0 │ — │
│ Economic evaluation │ CHEERS 2022 │ — │
│ Animal research │ ARRIVE 2.0 │ — │
│ Protocol (trial) │ SPIRIT 2013 │ SPIRIT-AI │
│ Protocol (SR) │ PRISMA-P 2015 │ — │
│ Software/Methods paper │ — │ see Note │
└─────────────────────────┴───────────────────────────────────┘
Note: Software/Methods papers 無專屬 EQUATOR 指引,
但若涉及 AI/ML → 適用 TRIPOD+AI 相關項目(選擇性)
E2: Checklist item-by-item verification
FOR guideline IN detected_guidelines:
checklist = load_checklist(guideline) # 內建 checklist 資料庫
FOR item IN checklist.items:
# 定位:該項目應出現在哪個 section
target_section = item.expected_section # e.g. "Methods", "Results"
content = read_draft(target_section)
# 三級判定
IF item clearly addressed in content:
→ ✅ REPORTED (記錄: section + paragraph + 摘要)
ELIF item partially addressed:
→ ⚠️ PARTIAL (記錄: 缺什麼、建議補充)
ELSE:
→ ❌ NOT REPORTED (記錄: 建議加入的位置和內容)
# 合規率計算
compliance_rate = REPORTED / total_applicable_items
partial_rate = PARTIAL / total_applicable_items
# 閾值判定(依 item 重要性分級)
IF any ESSENTIAL item is NOT REPORTED → MAJOR issue
IF compliance_rate < 80% → WARNING
IF compliance_rate ≥ 80% AND all ESSENTIAL reported → PASS
E3: EQUATOR guideline built-in database
| Guideline | Full name | Scope | Number of items | Source |
|---|---|---|---|---|
| CONSORT 2010 | Consolidated Standards of Reporting Trials | RCT | 25 items | equator-network.org |
| CONSORT-AI | CONSORT Extension for AI | RCTs with AI intervention | 14 extension items | Lancet Digital Health 2020 |
| STROBE | Strengthening Reporting of Observational Studies | Observational studies | 22 items | equator-network.org |
| PRISMA 2020 | Preferred Reporting Items for SR and MA | Systematic reviews | 27 items | BMJ 2021 |
| PRISMA-S | PRISMA Search Extension | Search Strategy Report | 16 items | Systematic Reviews 2021 |
| PRISMA-P | PRISMA for Protocols | SR protocol | 17 items | BMJ 2015 |
| MOOSE | Meta-analysis of Observational Studies | Observational study MA | 35 items | JAMA 2000 |
| STARD 2015 | Standards for Reporting Diagnostic Accuracy | Diagnostic accuracy | 30 items | BMJ 2015 |
| STARD-AI | STARD for AI Diagnostic | AI diagnostic studies | extension items | Nature Medicine 2021 |
| TRIPOD 2015 | Transparent Reporting of Prediction Models | Prediction models | 22 items | BMJ 2015 |
| TRIPOD+AI | TRIPOD for AI/ML Prediction | AI/ML prediction models | 27+extensions | BMJ 2024 |
| PROBAST | Prediction Model Risk of Bias Assessment | Prediction model bias | 20 items | Annals Int Med 2019 |
| DECIDE-AI | AI Decision Support Early Evaluation | AI decision support | 17 items | Nature Medicine 2022 |
| SPIRIT 2013 | Standard Protocol Items for Trials | Trial protocol | 33 items | equator-network.org |
| SPIRIT-AI | SPIRIT Extension for AI | AI trial protocol | 15 extension items | Nature Medicine 2020 |
| CLAIM | Checklist for AI in Medical Imaging | Medical imaging AI | 42 items | Radiology 2020 |
| MI-CLAIM | Minimum Information about Clinical AI Modeling | Minimum information for AI modeling | 15 items | Nature Medicine 2020 |
| CARE 2013 | Case Report Guidelines | Case reports | 13 items | equator-network.org |
| ARRIVE 2.0 | Animal Research Reporting | Animal studies | 21 items | PLOS Biology 2020 |
| SQUIRE 2.0 | Standards for Quality Improvement | Quality improvement | 18 items | BMJ Quality Safety 2015 |
| SRQR | Standards for Reporting Qualitative Research | Qualitative research | 21 items | Academic Medicine 2014 |
| COREQ | Consolidated Criteria for Qualitative Research | Qualitative (interviews/focus groups) | 32 items | Int J Qual Health Care 2007 |
| CHEERS 2022 | Consolidated Health Economic Evaluation | Health economic evaluation | 28 items | BMJ 2022 |
| RECORD | Reporting of Studies Using Routine Data | Routine data studies | 13+extensions | PLOS Medicine 2015 |
| AGREE II | Appraisal of Guidelines Research and Evaluation | Clinical guidelines | 23 items | CMAJ 2010 |
E4: Compliance Report output
Output per Review round .audit/equator-compliance-{round}.md:
# EQUATOR Compliance Report — Round {round}
## Detected Guidelines: TRIPOD+AI (primary), MI-CLAIM (secondary)
## Detection Basis: paper.type=prediction-model, Methods mentions "deep learning"
### TRIPOD+AI Compliance: 85% (23/27 items)
| # | Item | Section | Status | Notes |
| --- | ------------------------------------ | ------------ | --------------- | ---------------- |
| 1 | Title identifies as prediction model | Title | ✅ REPORTED | |
| 2 | Abstract: structured summary | Abstract | ✅ REPORTED | |
| 3a | Background and objectives | Introduction | ✅ REPORTED | |
| 4a | Source of data | Methods | ✅ REPORTED | |
| 4b | Data collection dates | Methods | ⚠️ PARTIAL | Missing end date |
| ... | | | | |
| 10d | Handling of missing data | Methods | ❌ NOT REPORTED | → Add to Methods |
| 15a | Model performance metrics | Results | ✅ REPORTED | |
### MI-CLAIM Compliance: 73% (11/15 items)
...
### Summary
| Guideline | Compliance | ESSENTIAL items | Status |
| --------- | ---------- | --------------- | ---------------------- |
| TRIPOD+AI | 85% | 20/22 ✅ | ⚠️ 2 ESSENTIAL missing |
| MI-CLAIM | 73% | 9/10 ✅ | ⚠️ 1 ESSENTIAL missing |
### Action Items (for Author Response)
- [E-M1] TRIPOD+AI Item 10d: Add missing data handling to Methods
- [E-M2] TRIPOD+AI Item 4b: Add data collection end date
- [E-m1] MI-CLAIM Item 12: Add model interpretability discussion
E5: Integration with Phase 7 Review Loop
Phase 7, Stage A(每輪):
1. 執行 4 角色 Reviewer 審查 → review-report-{round}.md
2. 執行 Hook E → equator-compliance-{round}.md
3. 合併 issues: Review issues + EQUATOR issues → 統一編號
- Review issues: R1-M1, R2-m1, ...
- EQUATOR issues: E-M1, E-m1, ... (E = EQUATOR)
4. Author Response 必須回應兩種 issue
Phase 7, Stage D(品質重評):
quality-scorecard 新增維度:
| 維度 | 評分標準 | 權重 |
| EQUATOR 合規 | checklist compliance rate + ESSENTIAL 完整度 | 15% |
→ 原有 6 維度權重等比調降,總和仍 = 100%
Review quality dimensions (quality-scorecard)
| Dimension | Scoring criteria (0-10) | Weight |
|---|---|---|
| Citation quality | Citations sufficient, up-to-date, high-impact, correctly formatted | 10% |
| Methodological reproducibility | Study design, statistics, reproducible | 18% |
| Text quality | Clarity, logical flow, no AI traces, grammar | 16% |
| Conceptual consistency | NOVELTY embodied, SELLING POINTS, full-manuscript consistency | 16% |
| Format compliance | Word count, figures and tables, number of citations, journal requirements | 7% |
| Figure and table quality | Necessity of figures and tables, clarity, captions, data presentation | 8% |
| EQUATOR compliance | checklist compliance + ESSENTIAL items complete | 13% |
| Reproducibility/data availability | Data sharing statement, code availability, protocol registration | 12% |
Total score = Σ(dimension score × weight)
Division of labor between Review and Hook
| Aspect | Hook A-C(Phase 5-6) | Autonomous Review(Phase 7) |
|---|---|---|
| Purpose | Technical compliance | Academic quality + reporting guideline compliance |
| Trigger timing | During writing / after full manuscript completion | Phase 6.5 mandatory entry (MANDATORY) |
| Focus | Format, citations, word count, consistency | Content quality, logic, academic persuasiveness + EQUATOR |
| Correction method | patch_draft (local correction) | May rewrite paragraphs or restructure arguments |
| Role | Automated linter | Simulated Reviewer + EQUATOR compliance |
| Stop condition | 0 CRITICAL | quality_threshold met + ESSENTIAL complete |
| Output | audit log | review-report + equator-compliance |
| Granularity | pass/fail | MAJOR/MINOR/OPTIONAL + checklist item by item |
Phase 8: REFERENCE SYNC
sync_references(filename=manuscript)→ generate References section- Confirm all
[[wikilinks]]resolved format_references(style=journal-profile.references.style)- Validate citation count ≤
references.reference_limits[paper.type](fallbackmax_references) - IF over the limit → flag the least-cited refs → suggest deletion
Gate: 0 broken links + citation count compliant
Phase 9: EXPORT(Code-Enforced — CRITICAL Gate)
Skill: word-export
⚠️ Code-Enforced: pipeline_action(action="validate_phase", phase=9) The checks for docx and pdf are CRITICAL severity. Both docx and pdf must be produced, otherwise the Gate will not pass.
export_document(action="docx")→ produce DOCXexport_document(action="pdf")→ produce PDFinspect_export(action="list_templates")→ select template (prefer matching journal-profile.journal.name)export_document(action="session_start")→export_document(action="session_insert")× N- Validate required document checklist (from
required_documents.*):- cover_letter → if not yet generated, prompt the user or auto-draft
- author_contributions → prompt the user to fill in
- ethics_statement → prompt the user to provide
inspect_export(action="verify_document")→export_document(action="session_save")inspect_export(action="docx_smoke")orinspect_export(action="xml_smoke")→ validate DOCX zip/XML structure,word/document.xml, paragraphs and visible text
Gate: pipeline_action(action="validate_phase", phase=9) — docx + pdf must exist (CRITICAL) + required document checklist complete; DOCX XML smoke should PASS before entering final delivery
Phase 9.5: SUBMISSION READINESS
Input: documents exported by Phase 9 External MCP: —
Purpose: final systematic check before submission, ensuring all submission requirements are complete.
-
File checklist verification(according to journal profile):
- Title page (including author info, ORCID, corresponding author)
- Manuscript(blinded if required)
- Abstract(structured / unstructured)
- Cover letter
- Conflict of interest declarations
- Funding statement
- Ethics approval statement
- Data availability statement
- Supplementary files(if any)
- Figure files(high-res, correct format)
- Table files(if separate)
- EQUATOR checklist(if required)
- Author contributions (CRediT if applicable)
-
Final format confirmation:
- Word count limit (abstract + main text)
- Figure/table count limit
- Reference format (journal CSL style)
- File naming conventions
-
Content consistency:
- Title page authors == manuscript authors
- Abstract numbers == main text numbers
- Cover letter mentions the correct journal name
-
Produce
exports/submission-checklist.md(✅/❌ checklist)
Gate: submission-checklist.md all ✅ or user confirms acceptance of exceptions
Phase 10: RETROSPECTIVE (closing-loop core)
🔔 HOOK D: meta-learning (see definition below, including D7 Review Retrospective, D8 EQUATOR Retrospective)
- Review execution records + Hook trigger statistics + Review round statistics
- Update SKILL.md Lessons Learned
- Update AGENTS.md (if applicable)
- Update complete .memory/ records
- Analyze whether journal-profile settings are reasonable → suggest fine-tuning
- 🆕 D7: analyze review-report + author-response → evolve Reviewer instructions
- 🆕 D8: analyze equator-compliance → evolve EQUATOR detection and classification logic
Phase 11: FINAL DELIVERY(Code-Enforced — CRITICAL Gate)🆕
Purpose: confirm paper deliverables are complete and auditable. Git serves only as optional provenance and must not block the paper-only workflow. Trigger: automatically entered after Phase 10 completes.
⚠️ Code-Enforced: pipeline_action(action="validate_phase", phase=11) Validate the following CRITICAL items:
- Phase 9 exported
.docx+.pdfexists - Phase 10 retrospective / meta-learning artifacts complete
- Phase 7 review loop completed
The following items are optional provenance / WARNING or INFO, and must not block final delivery:
- Whether the Git repository exists
- Whether the working directory is clean
- Whether the latest commit includes the project files
- Whether there is a remote/upstream / whether to push
Flow:
- Confirm that Phase 9
.docx+.pdfhas been produced - Confirm that Phase 10
.audit/pipeline-run-*.md、.audit/meta-learning-audit.yaml、.audit/meta-learning-feedback.yamlis complete pipeline_action(action="validate_phase", phase=11, response_format="json", compact=true)→ Verification PASS- If the project uses Git, commit/push may optionally be used as provenance; if the user is only writing a paper, no remote is needed
Gate: pipeline_action(action="validate_phase", phase=11) — final paper delivery artifacts complete; Git remote/push is not a hard requirement
Audit Trail generation (automatically executed when each Phase completes)
The Agent must maintain the following files in projects/{slug}/.audit/ :
Incremental updates (at the end of each Phase)
Phase 完成 → 更新以下檔案:
1. pipeline-run-{YYYYMMDD-HHmm}.md(增量 append)
格式:
## Phase {N}: {名稱}
- 開始時間 / 結束時間
- 輸入:{files read}
- 輸出:{files written}
- Hook 結果:
| Hook | 觸發 | 通過 | 修正次數 | 最終結果 |
- 決策紀錄:{任何自動決策 + 理由}
- Issues flagged for later: {list}
2. checkpoint.json(覆寫更新)
{
"last_completed_phase": N,
"current_section": "Methods",
"phase_outputs": { "P1": "project_created", "P2": "15_refs_saved", ... },
"flagged_issues": [...],
"audit_stats": { "hook_a_triggers": 5, "hook_a_passes": 3, ... },
"timestamp": "ISO-8601"
}
Generated after Phase 6 completes
3. quality-scorecard.md
| 維度 | 分數 (0-10) | 說明 |
| 引用品質 | | |
| 方法學再現性 | | |
| 文字品質 | | |
| 概念一致性 | | |
| 格式合規 | | |
| 圖表品質 | | |
| 總分 | | |
4. hook-effectiveness.md
| Hook | 觸發次數 | 通過次數 | 修正次數 | 誤報次數 | 有效率 |
→ 供 Hook D 分析用
Generated for each round of Phase 7
5. review-round-{N}.md
## Round {N} Summary
| 角色 | MAJOR issues | MINOR issues | OPTIONAL |
| Issue | 角色 | 嚴重度 | 修正策略 | 修正後狀態 |
## Quality Score Trend
| 維度 | Round 0 | Round 1 | Round 2 | ... | 變化趨勢 |
| 總分 | 6.2 | 7.1 | 7.8 | ... | ↑ |
6. equator-compliance-{N}.md 🆕
## EQUATOR Compliance Report — Round {N}
## Detected Guidelines: {auto-detected or specified}
| # | Item | Section | Status | Notes |
→ 見 Hook E4 格式定義
Evolution Tracing(Phase 6.5 → 7 → 10)🆕
7. evolution-log.jsonl(append-only,每事件一行 JSON)
## 事件類型:
- baseline: Phase 6.5 建立的基線快照
- review_round: Phase 7 每輪 review 結果
- equator_check: Hook E 每輪 compliance 結果
- hook_correction: Hook A-C 修正事件
- meta_learning: Phase 10 自我改進事件
## Schema:
{"event": "baseline", "round": 0, "timestamp": "ISO-8601",
"scorecard": {"citation": 7, "methodology": 8, "text": 6, ...},
"word_count": 3200,
"instruction_version": "abc1234"}
{"event": "review_round", "round": 1, "timestamp": "...",
"scorecard": {"citation": 7.5, "methodology": 8, "text": 7, ...},
"scorecard_delta": {"text": +1, "total": +0.8},
"review_issues": {"major": 3, "minor": 5, "accepted": 7, "declined": 1},
"patches_applied": [{"section": "Methods", "issue_id": "R1-M1", "words_changed": 45}],
"instruction_version": "abc1234"}
{"event": "equator_check", "round": 1, "timestamp": "...",
"guideline": "TRIPOD+AI", "compliance_rate": 0.85,
"essential_complete": false, "missing_essential": ["Item 10d", "Item 4b"],
"action_items": 3}
{"event": "meta_learning", "phase": 10, "timestamp": "...",
"skill_updates": ["Lessons Learned +1"],
"hook_adjustments": [{"hook": "B5", "param": "threshold", "old": 5, "new": 6}],
"total_rounds": 2, "final_score": 7.8}
## 用途:
- Phase 10 D1-D7 分析 → 產出 evolution summary
- 跨 run 比較(如有多次執行)
- 論文自身的 Fig 1 / Table 2(框架效果量化證據)
Generated after Phase 2 completes
5. search-strategy.md
- 搜尋策略 + MeSH terms
- 每組搜尋的結果數量
- 篩選標準 + 排除原因
6. reference-selection.md
- 最終選擇的文獻列表 + 選擇理由
- 排除的重要文獻 + 排除原因
Generated after Phase 3 completes
7. concept-validation.md
- 驗證分數 (每輪)
- 修正歷史
- CGU 使用紀錄(如有)
Checkpoint Recovery Mechanism
Implementation:CheckpointManager(infrastructure/persistence/checkpoint_manager.py)
Pipeline 啟動時:
1. 檢查 projects/{slug}/.audit/checkpoint.json
2. IF exists:
→ ckpt = CheckpointManager(audit_dir)
→ summary = ckpt.get_recovery_summary() # 顯示上次進度
→ 詢問:
a) 從 Phase {N+1} 繼續
b) 從當前 section 繼續
c) 重新開始(保留文獻和 concept)
d) 完全重來 → ckpt.clear()
3. IF 選擇繼續:
→ state = ckpt.load()
→ 載入 phase_outputs
→ 載入 flagged_issues(帶入 Phase 6)
→ 跳到對應 Phase/Section
Phase 轉換時:
ckpt.save_phase_start(phase, name)
... 執行 ...
ckpt.save_phase_completion(phase, name, outputs, flagged_issues)
Copilot Hooks definition (triggered during writing)
Hook A: post-write (immediately after each write, at most N rounds, N = pipeline.hook_a_max_rounds)
| # | Check item | MCP Tool | Failure behavior | Threshold source |
|---|---|---|---|---|
| A1 | Word count within target ±20% | count_words |
patch_draft condense/expand |
paper.sections[].word_limit |
| A2 | Citation density meets standard | get_available_citations |
suggest_citations + patch_draft |
pipeline.writing.citation_density.* |
| A3 | No Anti-AI patterns | run_quality_checks(action="writing_hooks", hooks="A3") |
patch_draft rewrite |
pipeline.writing.anti_ai_strictness |
| A3b | AI structural signal detection 🆕 | run_quality_checks(action="writing_hooks", hooks="A3B") |
patch_draft rewrite |
Code-Enforced (5 structural analyses) |
| A3c | Voice consistency detection 🆕 | run_quality_checks(action="writing_hooks", hooks="A3C") |
patch_draft rewrite |
Code-Enforced (z-score outliers) |
| A4 | Wikilink format correct | validate_wikilinks |
Auto-fix | — |
| A5 | Language consistency (BrE/AmE) | run_quality_checks(action="writing_hooks", hooks="A5") |
patch_draft unify spelling |
pipeline.writing.prefer_language |
| A6 | Paragraph duplication detection | run_quality_checks(action="writing_hooks", hooks="A6") |
patch_draft rewrite duplicated paragraphs |
pipeline.writing.overlap_threshold |
| A7 | Sufficiency of literature quantity 🆕 | run_quality_checks(action="writing_hooks", hooks="A7") |
BLOCK writing, prompt to expand search | DEFAULT_MINIMUM_REFERENCES per type |
Hook A Cascading Protocol
Round 1: 執行 A1-A4 → 收集所有 issues
→ IF issues:
→ batch patch_draft(一次修正多個問題)
→ 記錄:哪些問題、修正策略
Round 2: re-run A1-A4
→ IF same issues persist:
→ 改變策略(例:A1 字數超標 → Round 1 精簡句子 → Round 2 刪除次要段落)
→ patch_draft
→ 記錄:策略變更原因
Round 3: re-run A1-A4
→ IF still issues:
→ LOG to audit trail(不阻擋)
→ FLAG issue type + section → 帶入 Phase 6 Cascading Audit
→ 繼續下一步(Hook B)
每 round 的修正策略升級:
A1 字數: trim sentences → remove paragraphs → restructure section
A2 引用: suggest_citations → search more refs → flag for user
A3 Anti-AI: rephrase → rewrite paragraph → flag specific phrases
A3b AI結構信號: 句長CV/轉折詞密度/句首多樣性/三連列舉/段落CV → patch_draft
A3c 語音一致性: 段落風格離群值 → patch_draft 改寫風格斷裂段落
A4 Wikilink: auto-fix → manual check → flag broken refs
A2 Citation density standard: Introduction ≥1/100w, Methods ≥0, Results ≥0, Discussion ≥1/150w
A3 Anti-AI prohibited words (~75): covering six major categories: Classic AI filler, Grandiose/buzzword, Metaphorical cliché, Vague academic padding, Formulaic conclusion/transition, and AI-specific phrasing. Common ones such as In recent years, plays a crucial role, has garnered significant attention, a comprehensive understanding, This groundbreaking → replace with specific content.
A3b AI structural signal detection (Code-Enforced):
- Sentence length uniformity: CV < 0.25 = WARNING (AI tends to produce sentences of equal length)
- Transition word density: sentence-initial transition words >20% WARNING, >35% CRITICAL
- Sentence-initial diversity: unique ratio < 0.50 = WARNING
- Tricolon:
X, Y, and Zappears >3 times = WARNING - Paragraph length uniformity: CV < 0.20 = WARNING
A3c Voice consistency detection (Code-Enforced):
- Paragraph-level features: avg_sent_len, avg_word_len, type_token_ratio, punct_complexity
- Document baseline: calculate the mean + std of each metric across the full text
- Outlier detection: any metric z-score > 1.8 → WARNING (style break)
- Vocabulary refinement discrepancy: max − min avg_word_len > 1.2 → WARNING (ESL vs polished paragraphs)
- Typical scenario: an ESL grammar paragraph suddenly shifts to a polished corporate academic style → a human reviewer can notice
Hook B: post-section (after the section is completed, including retrospective revision)
| # | Check item | MCP Tool | Failure behavior |
|---|---|---|---|
| B1 | Consistent with concept.md | read_draft("concept.md") + Agent comparison |
Rewrite inconsistent paragraphs |
| B2 | 🔒 NOVELTY reflected in Intro | read_draft check |
patch_draft add |
| B3 | 🔒 SELLING POINTS in Discussion | Item-by-item comparison | patch_draft supplement |
| B4 | Not contradictory with written sections | read_draft cross-check |
Fix contradictions |
| B5 | Methodological reproducibility | Agent evaluates according to paper_type | patch_draft add details |
| B6 | Writing order verification | check_writing_order |
⚠️ Advisory (does not block) |
| B7 | Section Brief compliance 🆕 | Agent compares manuscript-plan.yaml |
patch_draft fill in omissions |
Hook B Cascading Protocol
執行 B1-B7 → 分類 issues:
CRITICAL: B1 concept 不一致, B2 🔒 NOVELTY 缺失, B5 方法學 <5 分
WARNING: B3 selling points 不完整, B4 sections 矛盾, B7a/b/d/e Brief 遺漏
ADVISORY: B6 寫作順序, B7c 段落順序偏離
IF CRITICAL issues:
→ 針對性 patch_draft 修正
→ re-run Hook A on patched areas(1 round,確認 patch 沒破壞品質)
→ re-run 失敗的 Hook B checks
→ IF still CRITICAL after 2 attempts:
→ FLAG for Phase 6 Cascading Audit
→ 記錄到 .audit/pipeline-run-{ts}.md
IF WARNING issues:
→ patch_draft 修正(1 round)
→ IF still WARNING → LOG + continue(Phase 6 會再檢查)
IF ADVISORY only:
→ LOG to audit trail → continue
B5 Methodology Checklist
Basic methodology check(all paper types):
| Check item | Original | Case | Systematic | AI/ML Prediction | AI Clinical |
|---|---|---|---|---|---|
| Study design description | ✅ | ✅ | ✅ | ✅ | ✅ |
| Primary/secondary outcomes | ✅ | ⬜ | ✅ | ✅ | ✅ |
| Sample size/power | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| Inclusion/exclusion criteria | ✅ | ⬜ | ✅ | ✅ | ✅ |
| Statistical method match | ✅ | ⬜ | ✅ | ✅ | ✅ |
| Variable definitions | ✅ | ✅ | ⬜ | ✅ | ✅ |
| Ethics statement | ✅ | ✅ | ⬜ | ✅ | ✅ |
| Collection period | ✅ | ✅ | ✅ | ✅ | ✅ |
| EQUATOR | CONSORT/STROBE | CARE | PRISMA | TRIPOD+AI | DECIDE-AI |
AI/ML-specific check items(AI/ML paper types only):
| Check item | Prediction | Diagnostic | Imaging | Decision |
|---|---|---|---|---|
| Data split strategy | ✅ | ✅ | ✅ | ✅ |
| Model architecture/hyperparameters | ✅ | ✅ | ✅ | ✅ |
| Training/validation/test set ratio | ✅ | ✅ | ✅ | ⬜ |
| External validation | ✅ | ✅ | ✅ | ✅ |
| Missing value handling | ✅ | ✅ | ⬜ | ✅ |
| Calibration | ✅ | ⬜ | ⬜ | ⬜ |
| Bias/Fairness analysis | ✅ | ✅ | ✅ | ✅ |
| Interpretability/explainability | ⬜ | ⬜ | ✅ | ✅ |
| Human vs AI comparison | ⬜ | ✅ | ✅ | ✅ |
| Applicable guidelines | TRIPOD+AI | STARD-AI | CLAIM | DECIDE-AI |
Division of labor between B5 ↔ Hook E: B5 performs a "rapid methodology scan" (10 items or fewer) in Phases 5-6, while Hook E performs a "full EQUATOR checklist item-by-item verification" (20-42 items) in Phase 7. The two are complementary and non-overlapping.
If any required item < 5 points → patch_draft → still < 5 after 2 rounds → human intervention.
B6 Prerequisites
| Target | Prerequisite | Reason |
|---|---|---|
| Results | Methods | Results depend on the Methods definition |
| Discussion | Results + Intro | Discussion addresses Results in response to Intro |
| Conclusion | Discussion | Summarizes the Discussion |
| Abstract | All main sections | Extract key points |
Advisory only (§22 may be reorganized); skipped items are recorded in the audit trail.
B7 Section Brief compliance 🆕
Based on manuscript-plan.yaml compare paragraph by paragraph to ensure the Section Brief is correctly implemented.
| Sub-item | Check content | Failure behavior |
|---|---|---|
| B7a | Each paragraph key_claims whether it is covered in the text |
patch_draft add argument |
| B7b | Each paragraph must_cite whether it appears |
patch_draft Add citation |
| B7c | Paragraph order/count vs plan | ⚠️ Advisory (non-blocking) |
| B7d | Whether the asset_plan items of that section have been inserted |
WARNING + prompt to insert figures/tables |
| B7e | Whether the caption_requirements of inserted figures/tables satisfies |
patch_draft Supplement figure captions |
FOR paragraph IN plan.sections[section].paragraphs:
content = extract_paragraph(draft, paragraph.id)
FOR claim IN paragraph.key_claims:
IF claim NOT conveyed in content → ISSUE (B7a)
FOR ref IN paragraph.must_cite:
IF ref NOT in content → ISSUE (B7b)
FOR asset IN plan.asset_plan WHERE asset.section == section:
IF asset NOT inserted in draft → ISSUE (B7d)
IF asset inserted AND caption_requirements NOT met → ISSUE (B7e)
B7a/B7b omissions are WARNING (1 round patch_draft fix), B7d is WARNING, B7e is WARNING.
B7c is ADVISORY (order deviation acceptable).
Hook B8: Data-Claim Alignment
Triggered after Results completion. Verify statistical claims are consistent with Methods:
- Statistical methods: tests used in Results must be declared in Methods
- P-value threshold: p < X in Results must match the α declared in Methods
- CI width: the 95% CI in Results must match Methods
- Software: statistical software mentioned in Results must be declared in Methods
| # | Check item | MCP Tool | Failure behavior | Threshold source |
|---|---|---|---|---|
| B8 | Statistical claim ↔ method alignment | run_quality_checks(action="writing_hooks", hooks="B8") |
patch_draft Methods/Results fill-in |
pipeline.writing.stat_alignment |
Hook C: post-manuscript (after full manuscript completion, including layered backtracking, at most N rounds, N = pipeline.hook_c_max_rounds)
| # | Check item | MCP Tool | Failure behavior | Backtracking layer | Threshold source |
|---|---|---|---|---|---|
| C1 | Manuscript consistency | check_formatting("consistency") |
patch_draft |
→ B4 | — |
| C2 | Submission checklist | check_formatting("submission") |
Fixed-point correction | — | required_documents.* |
| C3 | N value consistent across sections | read_draft × N + number comparison |
patch_draft unify |
→ A | — |
| C4 | Abbreviation first definition | read_draft + full-text scan |
patch_draft add definition |
→ A | — |
| C5 | Wikilinks resolvable | scan_draft_citations |
save_reference_mcp save |
→ A4 | — |
| C6 | Total word count compliant | count_words |
Condense overly long sections | → A1 | word_limits.total_manuscript |
| C7 | Count and cross-reference compliance 🆕 | See C7 subitems below | Handle by subitem | By subitem | assets.*, word_limits.*, references.max_references |
| C8 | Temporal consistency | read_draft × N + Agent scan |
patch_draft update outdated descriptions |
→ B | — |
| C9 | Supplementary material cross-references | run_quality_checks(action="writing_hooks", hooks="C9") |
patch_draft add citation |
— | — |
| C10 | Reference fulltext + analysis verification | run_quality_checks(action="writing_hooks", hooks="C10") |
Add fulltext/analysis | — | — |
| C11 | Balanced citation distribution 🆕 | run_quality_checks(action="writing_hooks", hooks="C11") |
Redistribute citations to sections lacking citations | → A2 | — |
| C12 | Citation appropriateness audit 🆕 | run_quality_checks(action="writing_hooks", hooks="C12") |
Add decision records to citation_decisions.json | — | — |
| C13 | Figure/table quality and ordering 🆕 | run_quality_checks(action="writing_hooks", hooks="C13") |
Fix order/add captions | → C7d | — |
| C14 | Claim-Evidence alignment 🆕 | run_quality_checks(action="writing_hooks", hooks="C14") |
Add citations/source material/figure-table evidence for strong claims, or weaken the wording | → Phase 5/8 | Strong claims are not classified as A3 style issues |
Hook C Cascading Protocol
Stage 1: Full Scan
→ 執行 C1-C7 → 收集 ALL issues
→ 分類: CRITICAL (C1不一致, C3數字錯, C5斷鏈) / WARNING (C2, C4, C6, C7)
Stage 2: Cascading Fix (最多 3 rounds)
Round N:
FOR each CRITICAL issue:
1. 定位到具體 section + 段落
2. patch_draft() 修正
3. 觸發 回溯層 的 Hook(見上表)確認 patch 品質
→ re-run Hook C
Stage 3: C8 Temporal Consistency Pass
→ C1-C7 全過後,執行 C8 逆向掃描
→ IF C8 發現過時引用 → patch_draft 更新 → 重跑 C1 確認一致性
Stage 4: 人工介入(3 rounds 後仍 CRITICAL)
→ 生成 quality-scorecard.md(量化分數)
→ 呈現具體問題 + 建議修改方案
→ 用戶選擇:修改 / 接受風險 / 回到 Phase 5
Hook C 修正策略:
C1 不一致: 統一術語 → 統一語氣 → 重寫弱 section
C3 N 值: 以 Methods 定義為準 → 更新所有 sections
C4 縮寫: 找首次出現 → 加全稱 → 後續只用縮寫
C5 斷鏈: validate_wikilinks → save_reference_mcp → manual
C6 字數: 刪冗餘 → 合併段落 → 詢問用戶刪哪段
C7 數量: 依子項分別處理(見下方)
C8 過時: 逆向掃描 → patch_draft 更新 → 重跑 C1
C11 引用分布: 找缺引用 section → 補引用 → re-run A2
C12 引用審計: 生成 citation_decisions.json → 每篇引用留 justification
C13 圖表品質: 修正順序 → 補 caption → 確保 Results 有圖表引用
C7 Count and cross-reference compliance (D5 extension) 🆕
The original C7 checked only figure/table counts; it is extended into a comprehensive count/citation compliance check with five subitems.
| Subitem | Check content | MCP Tool | Failure behavior | Backtracking layer | Threshold source |
|---|---|---|---|---|---|
| C7a | Total figure/table count ≤ limit | list_assets |
Merge or move to supplementary | — | assets.figures_max/tables_max |
| C7b | Reasonable range for total citation count | scan_draft_citations |
Flag low-citation refs → user decides | — | references.reference_limits[paper.type] fallback max_references |
| C7c | Total word count vs journal-profile | count_words |
Trim overly long sections | → A1 | word_limits.total_manuscript |
| C7d | Figure/table cross-references (orphan/phantom) | list_assets + read_draft |
orphan=WARNING, phantom=CRITICAL | — | — |
| C7e | Wikilink citation consistency | validate_wikilinks |
save_reference_mcp Save |
→ A4 | — |
orphan = manifest 中有但 draft 沒引用 → WARNING(有圖沒用)
phantom = draft 引用但 manifest 沒有 → CRITICAL(有引用沒圖)
NOTE: C6 (total word count) overlaps functionally with C7c. C6 performs a quick word count check, C7c performs a journal-profile-driven precise comparison. At implementation time, choose: C6 is retained as a Phase 6 quick pre-check (only looks at the total), C7c performs precise section-level comparison.
C8 Temporal Consistency Pass
Root cause: writing order (e.g., Methods → Results → Introduction) causes sections written earlier to potentially reference the state of sections “not yet written.” Once later sections are completed, earlier descriptions become outdated.
Trigger timing: Phase 6, after Hooks C1-C7
Check flow:
- Scan in reverse writing order (the earliest-written section is checked last)
- Search each section for the following patterns:
- "not yet written" / "not yet written"
- "Deferred" / "deferred"
- "will be" + section name (e.g., "will be discussed in Discussion")
- Hook status references (e.g., "B2: Deferred")
- Assertions about the content of other sections (e.g., "the Introduction contains...")
- For each match, verify: does the referenced section already exist? Is the description still correct?
- If incorrect →
patch_draftupdate to the actual state
Implementation:
FOR section IN reverse(writing_order):
content = read_draft(section)
FOR pattern IN temporal_patterns:
matches = scan(content, pattern)
FOR match IN matches:
referenced_section = extract_section(match)
IF referenced_section EXISTS AND match.claim != actual_state:
patch_draft(section, old=match, new=actual_state_description)
log_to_audit("C8: Updated stale reference in {section}")
Failure behavior:patch_draft Update outdated descriptions. Maximum 2 rounds.
Hook C9: Supplementary Cross-Reference
Triggered after the full manuscript is complete. Verify bidirectional references between the main manuscript and supplementary materials:
- Every "Supplementary Table/Figure N" reference in the main manuscript has a corresponding entry in the supplementary materials
- Every item in the supplementary materials is referenced at least once by the main manuscript (orphan detection)
- e-prefix references (eTable, eFigure) are also tracked
| # | Check item | MCP Tool | Failure behavior | Threshold source |
|---|---|---|---|---|
| C9 | Supplementary material cross-reference verification | run_quality_checks(action="writing_hooks", hooks="C9") |
patch_draft Add citation / delete orphan citation |
— |
Hook D: meta-learning (Phase 10, core of the closed loop)
Hook D does not only improve the SKILL — it improves the Hook itself (CONSTITUTION §23).
Infrastructure(infrastructure/persistence/):
| Component | File | Purpose |
|---|---|---|
HookEffectivenessTracker |
hook_effectiveness_tracker.py |
Record hook events, calculate trigger rate/correction rate/false-positive rate, produce recommendations |
QualityScorecard |
quality_scorecard.py |
6-dimensional quality score (0-10), threshold checks, weakness detection |
MetaLearningEngine |
meta_learning_engine.py |
D1-D8 orchestrator,ThresholdAdjustment (±20%)、LessonLearned |
Usage:
from med_paper_assistant.infrastructure.persistence.hook_effectiveness_tracker import HookEffectivenessTracker
from med_paper_assistant.infrastructure.persistence.quality_scorecard import QualityScorecard
from med_paper_assistant.infrastructure.persistence.meta_learning_engine import MetaLearningEngine
tracker = HookEffectivenessTracker(audit_dir)
scorecard = QualityScorecard(audit_dir)
engine = MetaLearningEngine(audit_dir, tracker, scorecard)
result = engine.analyze() # → {adjustments, lessons, suggestions, audit_trail, summary}
D1: Performance statistics
HookEffectivenessTracker Record each hook evaluation event (trigger/pass/fix/false_positive), persist to .audit/hook-effectiveness.yaml。
Performance judgment (§23):
- Trigger rate > 80% → Hook is too strict, recommend relaxing the threshold
- Trigger rate < 5% (over more than 5 runs) → Hook is too loose/outdated, consider removal
- False-positive rate > 30% → Judgment criteria need revision
QualityScorecard Track quality scores across 7 standard dimensions, persist to .audit/quality-scorecard.yaml。
D2: Quality dimension analysis
MetaLearningEngine._d2_analyze_quality() Perform in-depth analysis of the 7-dimensional quality scores of the QualityScorecard:
- Weakness detection: dimensions with score < 6.0 → produce
quality_gaplesson - Missing item detection: unevaluated dimensions → produce
process_gaplesson - Trend judgment: average score ≥ 8 → achievement, < 6 → critical review needed
- Dimension → Hook mapping: methodology → B5, text_quality → A3, equator_compliance → E1-E5
D2's lessons feed into D3 (adjust thresholds) and D4-D5 (modify SKILL), forming an analysis chain.
D3: Hook self-improvement
MetaLearningEngine._d1_d3_analyze_hooks() Generate based on tracker recommendations ThresholdAdjustment:
Automatic adjustment(auto_apply=True, change magnitude ≤ ±20%):
- Trigger rate too high → loosen threshold +15%
- Trigger rate too low → tighten threshold -15%
Requires user confirmation(auto_apply=False): logic fixes, add/remove Hook
Prohibited modifications: CONSTITUTION principles, 🔒 rules, save_reference_mcp priority, Hook D's own logic
Hook propagation procedure (automatically executed after user confirmation)
When D3 proposes a new Hook and the user confirms, automatically sync all files according to the following spec:
Hook Spec format(D3 output):
hook_id: C7 # 類型字母 + 編號
category: C # A/B/C/D
name: 時間一致性 # 簡短中文名
description: 逆向掃描修正因寫作順序造成的過時引用
check_tool: "`read_draft` × N + Agent 掃描"
fix_action: "`patch_draft` 更新過時描述"
detailed_definition: |
#### Hook C7: 時間一致性
C1-C6 完成後,逆向掃描每個 section...
Propagation list(5 files, updated in order):
| # | File | Update content | Mode |
|---|---|---|---|
| 1 | .claude/skills/auto-paper/SKILL.md |
Hook table add row + detailed definition + Phase flow | Insert row |
| 2 | AGENTS.md |
### Hook 架構(N checks) N+1 + table description row |
Replace |
| 3 | .github/copilot-instructions.md |
## Hook 架構(N checks) N+1 + table row Copilot X1-M → X1-(M+1) |
Replace |
| 4 | vscode-extension/copilot-instructions.md |
Same as above | Replace |
| 5 | vscode-extension/skills/auto-paper/SKILL.md |
Same as #1 (VSX mirror) | Insert row |
Automatic calculation:
new_count= grep allHook 架構((\d+) checks)get old value + 1new_range= parseCopilot {cat}1-{M}→{cat}1-{M+1}- Use
multi_replace_string_in_fileto complete all replacements in one pass
Verification: after propagation completes grep -rn "Hook 架構" AGENTS.md .github/ vscode-extension/ confirm the numbers are consistent
D4-D5: SKILL + Instruction improvement
MetaLearningEngine._d4_d5_skill_suggestions() detection:
- A certain Hook triggers >2 times and correction rate <50% → add pre-check
- Weak quality dimensions → strengthen corresponding Hooks (methodology → B5, text_quality → A3)
D6: Record audit trail
MetaLearningEngine._d6_build_audit_trail() Append-write .audit/meta-learning-audit.yaml(append-only array), and by run_quality_checks(action="meta_learning") generate .audit/meta-learning-feedback.yaml, feeding pending evolutions back into the project as an agent-readable summary.
Other updates:.audit/hook-effectiveness.md, .audit/quality-scorecard.md, .memory/progress.md, .memory/activeContext.md, memory-bank/decisionLog.md, Lessons Learned in this file
D7: Review Retrospective 🆕
Analyze Phase 7 Review Loop output, evolve Reviewer instructions (CONSTITUTION §23 L2 level).
Trigger: Phase 10, after D1-D6
Flow:
1. 讀取 review-report-*.md + author-response-*.md
2. 統計分析:
- 哪些 reviewer 角色的 MAJOR issues 最有價值(ACCEPT 率高)?
- 哪些 suggestions 被 DECLINE 最多?→ 可能過度嚴格
- 哪些 issues 跨 round 反覆出現?→ 修正策略不佳
- 各 reviewer 角色的有效問題數量分布
3. 產出建議:
- 調整 reviewer_perspectives 的檢查重點描述(±20%)
- 記錄到 SKILL.md Lessons Learned
- 更新 .audit/reviewer-effectiveness.json
4. 禁止:修改 CONSTITUTION 原則、修改 Hook D 自身邏輯
D8: EQUATOR Compliance Retrospective 🆕
Analyze Hook E's execution effect in Phase 7, continuously improving checklist accuracy.
Trigger: Phase 10, after D7
Flow:
1. 讀取 equator-compliance-*.md
2. 統計分析:
- 哪些 checklist items 被標為 N/A 最多?→ 可能不適用該 paper type
- 哪些 items 反覆 PARTIAL?→ 可能定義不清楚
- compliance rate 趨勢(Round 0 → N)
- ESSENTIAL items 的修補成功率
3. 產出建議:
- 調整 E1 偵測邏輯的 paper_type 映射
- 記錄到 SKILL.md Lessons Learned
- 建議新的 ESSENTIAL 分類(若某非 ESSENTIAL 項反覆 miss)
4. 更新 evolution-log.jsonl with meta_learning event
Automatic decision logic
| Scenario | Automatic behavior | Stop condition |
|---|---|---|
| Phase 0 no journal information | Use paper_type default value | Overridden after user provides it |
| Phase 0 has PDF/URL | Parse + auto-fill YAML | ⚠️ Field needs confirmation |
| Insufficient search | Expand search | After 3 rounds still <10 papers |
| Concept 65-74 | Auto-correct once | Still <75 |
| Hook A word count over limit | Round 1-N stepwise correction | FLAG after N rounds |
| Hook A insufficient citations | suggest + patch, N rds | No available citations |
| Hook B 🔒 missing | patch added | Research direction needs change |
| Hook B5 <5 points | patch fills in details, 2 rounds | After 2 rounds still <5 |
| Hook C CRITICAL | cascading fix, N rds | After N rounds ask user |
| Hook C WARNING | patch 1 round | LOG + continue |
| Hook C7 charts/tables over limit | Move to supplementary | User decides which to delete |
| Hook C7d phantom | Insert missing chart or remove citation | User decides |
| C11 citation distribution uneven | Add citations to sections lacking citations | LOG + continue |
| C12 citation decision record missing | Generate citation_decisions.json | LOG + continue |
| C13 chart/table quality issue | Fix ordering/add caption | LOG + continue |
| Hook B7 Brief omission | patch_draft fills omissions | LOG after 1 round |
| Phase 6 FLAG | Trace back Hook B → A | After 2 cascades ask user |
| Review MAJOR issue | patch/rewrite | quality ≥ threshold |
| Review score stagnant | Change strategy or ask user | No improvement for 2 consecutive rounds |
| Asset missing data | Prompt user to provide | Skip that asset |
| Asset tool unavailable | Fallback (see Sub-Pipeline) | LOG + alternative |
| Citations exceed limit | Mark low-citation refs | User decides which to delete |
| Hook D threshold fine-tuning | ±20% | Out of range |
| Hook D add/remove | Propose suggestions | Always requires confirmation |
Must stop: Concept < 60 (still low after two times), Phase 4 outline approve, research direction change, Phase 6 still CRITICAL after N rounds of cascading, Review no score improvement for 2 consecutive rounds, modify AGENTS.md core principles.
Auto-continue: Hook A/B WARNING → LOG → next step. Hook C WARNING → LOG → Phase 7. Review MINOR → batch fix → next round. Asset fallback succeeds → continue.
Cross-Tool Orchestration Map
Core principle: Pipeline defines "when" → Skill defines "how" → Hook defines "quality" → Review defines "completeness".
Phase × Tool Matrix
| Phase | Internal MCP Tools | External MCP | journal-profile field |
|---|---|---|---|
| 0 Pre-Planning | — | fetch_webpage 🔸 |
Generate all fields |
| 1 Project Setup | create_project, update_settings |
— | paper.type, journal.* |
| 2 Literature Search | save_reference_mcp |
pubmed-search, zotero |
references.max_references |
| 2.1 Fulltext Ingest | list_saved_references |
asset-aware-mcp 🔸, pubmed-search |
— |
| 3 Concept Dev | write_draft, validate_concept |
cgu 🔸 |
— |
| 4 Planning | read_draft |
— | paper.sections, assets.* |
| 5 Writing | draft_section, patch_draft, etc. |
drawio 🔸, cgu 🔸 |
word_limits.*, assets.* |
| 6 Audit | check_formatting, count_words |
— | All pipeline.* thresholds |
| 7 Review | read_draft, patch_draft |
cgu 🔸 |
pipeline.autonomous_review.* |
| 8 Ref Sync | sync_references, format_references |
— | references.* |
| 9 Export | save_document, verify_document |
— | required_documents.* |
| 10 Retrospective | — | — | Analyze reasonableness of all fields |
Cross-MCP passing rules
| Source | Target | Passed item | Rule |
|---|---|---|---|
| pubmed-search | mdpaper | PMID | save_reference_mcp(pmid) passes only PMID |
| pubmed-search | asset-aware | Full text / PMC ID | get_fulltext(pmcid) → PDF/text |
| asset-aware | mdpaper | doc_id + paragraph | Update metadata.json after parsing |
| zotero-keeper | mdpaper | PMID/DOI | Fetch PMID → save_reference_mcp() |
| cgu | concept.md | Text suggestions | Agent integrates into write_draft() |
| drawio | mdpaper | XML | save_diagram(project, content) |
| data tools | drafts | Tables/figures | Agent integrates into draft text |
When to skip external MCP
| Scenario | Skip |
|---|---|
| No Zotero | zotero-keeper |
| Concept ≥ 75 first pass | CGU |
| No dataset | table_one / plot |
| Pure review (no Methods flow) | drawio |
| Full text unavailable (non-OA) | asset-aware (but must record ⚠️ in metadata) |
Skill dependencies
auto-paper → Phase 0(pre-plan) → project-management(P1) → literature-review + parallel-search(P2) → fulltext-ingestion(P2.1) → concept-development(P3) → draft-writing(P4,5) → evolution-gate(P6.5) → autonomous-review+equator(P7) → reference-management(P8) → word-export(P9) → submission-preparation(P9)
Closed-loop checklist
- Phase 0: source-materials.yaml generated; all pending_asset_aware files handed off to asset-aware or have explicit fallback reason
- Phase 0: journal-profile.yaml generated + user confirmed
- Phase 2.1: fulltext-ingestion-status.md created, each reference marked with full-text status + analysis_completed
- All sections pass Hook A (cascading)
- All sections pass Hook B (including retrospective fixes)
- All Phase 5 FLAGs handled in Phase 6
- Full manuscript passes Hook C (cascading fix)
- Phase 6.5: Evolution Gate baseline snapshot created
- Phase 7: Autonomous Review reaches quality_threshold (MANDATORY, at least 2 rounds, unless pipeline config explicitly adjusted)
- Hook E: EQUATOR compliance rate ≥ 80% + all ESSENTIAL items reported
- quality-scorecard.md generated (all dimensions ≥ 6 points, including EQUATOR dimension)
- review-round-*.md generated (complete record per round)
- equator-compliance-*.md generated (checklist report per round)
- evolution-log.jsonl contains baseline + all round events
- hook-effectiveness.md generated
- .audit/pipeline-run-{YYYYMMDD-HHmm}.md covers all Phases and includes
## D7 retrospective:+## D8 retrospective: - meta-learning-feedback.yaml generated, pending evolutions fed back into workspace state
- checkpoint.json marked complete
- All Asset Plan items generated or with fallback record
- Reference count ≤ journal-profile.references.max_references
- Figure/table count ≤ journal-profile.assets limits
- Required documents list (required_documents) completed
- .memory/ updated
- Hook D meta-learning executed (including D7 Review + D8 EQUATOR Retrospective)
- SKILL.md Lessons Learned updated
- Word exported
Lessons Learned (Hook D auto-update section)
Run 2026-02-20: Self-Referential Paper (Software/Methods)
Pipeline: 9 phases, fully autonomous, 0 human interventions
-
Proactive Hook Effect: All 6 sections passed Hook A on first write (0 corrections needed). The hook criteria documented in this SKILL.md act as proactive constraints — the LLM avoids prohibited patterns because it knows they will be checked. This means hooks serve dual purpose: reactive verification AND proactive generation shaping.
-
Hook A4 False Positive: Example text
[[author_year_pmid]]in the System Architecture section was flagged as invalid wikilink. Action: Detection criteria should exclude placeholder/example patterns. Recommended regex exclusion: patterns matchingauthor_year_pmidor similar template-style tokens. FP rate 100% (1/1). -
CGU Engine Dependency: CGU in "simple" mode returns empty results for
deep_thinkandspark_collision. Pipeline must handle graceful degradation — log the limitation and proceed. Full meta-learning assessment requires CGU engine upgrade. -
Template Path Bug:
start_document_sessionresolves template path via__file__traversal tosrc/templates/but workspace templates live in roottemplates/. Workaround: direct python-docx export. Fix needed intemplate_reader.pyinitialization. -
Concept Gate Override: Score 70 (< 75 threshold) was overridden after 2 correction attempts + CGU failure. The 60 hard-stop threshold proved appropriate — the paper was completed successfully at quality score 91.4%. Consider formally documenting the override decision tree: score ≥ 75 → auto-proceed; 60-74 + consistency 100 + user authority → override with audit; < 60 → hard stop.
-
Non-PubMed References: CS/AI system papers frequently cite arXiv preprints lacking PMIDs. The tiered trust architecture only covers PubMed-indexed literature. Future: extend
save_reference_mcpto accept DOIs with CrossRef verification as a secondary verified channel. -
Writing Order Validated: Methods → Results → Introduction → Discussion → Abstract order for Software/Methods papers produced coherent flow. The Introduction was contextually richer because System Architecture, Methods, and Results were already written.
-
Self-Referential Circularity: The system writing about itself creates a bootstrapping challenge — Results data (hook statistics) are generated during writing, but the Results section must describe them. Resolution: write Results with partial data, then verify final numbers match in Hook C. Acceptable for n=1 demonstration.
-
Temporal Inconsistency from Writing Order: When Results is written before Introduction, deferred hook statuses (e.g., "B2: Deferred — Introduction not yet written") become stale after Introduction is completed. Action: Added Hook C7 (Temporal Consistency Pass) to systematically scan for and correct such stale references in Phase 6. Root cause: writing order creates forward-references that need backward-patching.