Annotative Caption Visualization Lens
Philosophical Mode: Annotative
Primary Question: "Are figure captions and axis labels fully self-contained?"
Focus: Declarative titles (state the result, not "Figure N: Results"), axis labels with
units, error definition in legend (CI95 / std / SEM), baseline references cited in
caption, sample sizes disclosed per condition, venue-specific caption format
Arguments
/autoskillit:vis-lens-caption-annot [context_path] [experiment_plan_path]
- context_path (optional positional arg 1) — Absolute path to a lens context file
containing IV/DV tables, H0/H1 hypotheses, controlled variables, and success criteria.
If provided, read this file before beginning analysis to obtain structured context.
If omitted, discover context by exploring the CWD.
- experiment_plan_path (optional positional arg 2) — Absolute path to the full
experiment plan. If provided, read for complete experimental methodology and design.
If omitted, locate the experiment plan by exploring the CWD.
When to Use
- Auditing figure captions before paper submission
- Checking whether axis labels carry units and direction information
- Verifying error bars are defined in the legend or caption
- Ensuring baseline conditions are referenced explicitly
- Disclosing sample size per plotted condition
- User invokes
/autoskillit:vis-lens-caption-annot
Critical Constraints
NEVER:
- Modify any source code files
- Do not litter the codebase with useless comments, TODO markers, or explanatory annotations — the skill output and diagram speak for themselves
- Create files outside
{{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/
- Use a non-declarative title like "Results" or "Figure 3: Performance" — titles must state the takeaway (e.g., "Model A outperforms baseline on all benchmarks")
- Omit units from axis labels (e.g., write "Latency (ms)", not "Latency")
ALWAYS:
Check every figure title for declarative language
Verify every axis label carries a unit or categorical scale description
Confirm error bars / shaded regions are defined (CI95, ±1 std, IQR, etc.) in the legend or caption
Flag any figure that references a baseline without naming it explicitly
Report sample size per plotted condition (n=X seeds, N=X subjects, etc.)
BEFORE creating any diagram, LOAD the /autoskillit:mermaid skill using the Skill tool — this is MANDATORY
If the Skill tool cannot be used (disable-model-invocation) or refuses this invocation, do NOT proceed with diagram creation. Abort this step and omit the diagram from output.
Write output to {{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/vis_spec_caption_annot_{YYYY-MM-DD_HHMMSS}.md (relative to the current working directory)
After writing the file, emit the structured output token as literal plain text with no
markdown formatting on the token name (the adjudicator performs a regex match):
diagram_path = /absolute/path/to/{{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/vis_spec_caption_annot_{...}.md
Analysis Workflow
Step 0: Parse optional arguments
If positional arg 1 (context_path) is provided and the file exists, read it to obtain
IV/DV tables, H0/H1 hypotheses, controlled variables, and success criteria. If positional
arg 2 (experiment_plan_path) is provided and exists, read the experiment plan for full
methodology. Use this structured context as the foundation for Steps 1–4; skip the CWD
exploration for these fields if the context file supplies them.
Step 1: Inventory Figure Titles
For every figure in the experiment plan or codebase:
- Collect the current title string
- Classify: DECLARATIVE (states a result) vs DESCRIPTIVE (labels the figure)
- FAIL if title is purely descriptive (e.g. "Ablation Results", "Performance Comparison")
- PASS if title states the key finding (e.g. "Removing component X degrades accuracy by 8 pp")
Step 2: Axis Label and Unit Audit
For every axis in every figure:
- Confirm the label is present (no unlabeled axes)
- Confirm units are stated for continuous quantities: time (ms/s), memory (MB/GB), accuracy (%), loss (nats/bits), etc.
- Confirm categorical axes name the grouping variable
- FLAG WARNING for any axis missing a unit on a continuous quantity
Step 3: Error and Uncertainty Definition Audit
For every figure that shows error bars, shaded regions, or confidence intervals:
- Identify the error representation: CI (90/95/99%), ±1 std, ±1 SEM, IQR, min/max
- Verify the definition appears in the legend or caption text
- FLAG FAIL if error bars are shown but not defined
Step 4: Baseline and Sample Size Disclosure
- Identify every "baseline" referenced in a figure or caption
- Verify the baseline name and source are stated (e.g. "GPT-4 (OpenAI, 2023)")
- For each plotted group/condition, verify sample size n is disclosed (seeds, subjects, runs)
- FLAG WARNING for any undisclosed baseline or missing n
Step 5: Emit yaml:figure-spec Blocks
For each figure, emit one yaml:figure-spec fenced block with the annotations field
describing the caption audit result. Then LOAD /autoskillit:mermaid and create a diagram
showing: title audit → axis audit → error definition → baseline/n disclosure → verdict.
Output Template
# Annotative Caption Spec: {System / Experiment Name}
**Lens:** Annotative Caption (Annotative)
**Question:** Are figure captions and axis labels fully self-contained?
**Date:** {YYYY-MM-DD}
**Scope:** {What was analyzed}
## Caption Audit Summary
| Figure | Declarative Title | Axis Units | Error Defined | Baseline Named | Sample n | Status |
|--------|-------------------|-----------|---------------|----------------|----------|--------|
| fig-01 | FAIL (descriptive) | PASS | PASS | N/A | PASS | FAIL |
| fig-02 | PASS | PASS | PASS | PASS | PASS | OK |
## Figure Specs
```yaml
# yaml:figure-spec — canonical schema (spec_version: "1.0")
figure_id: "fig-02-ablation-comparison"
figure_title: "Removing component X degrades accuracy by 8 pp"
spec_version: "1.0"
chart_type: "bar"
chart_type_fallback: "table"
perceptual_justification: "Grouped bar chart shows per-component contribution directly."
data_source: "results/ablation.csv"
data_mapping:
x: "variant"
y: "accuracy_delta_pp"
color: "component"
size: ""
facet: ""
layout:
width_inches: 5.0
height_inches: 3.5
dpi: 300
stat_overlay:
type: "error_bar"
measure: "CI95"
n_seeds: 5
annotations: ["Declarative title PASS; axis labels with units PASS; CI95 defined in legend PASS; n=5 seeds per condition PASS"]
anti_patterns: []
palette: "okabe-ito"
format: "pdf"
target_dpi: 300
library: "matplotlib"
report_section: "Section 5 Ablation"
priority: "P1"
placement_tier: "main"
conflicts: []
metadata:
created_by: "vis-lens-caption-annot"
reviewed_by: ""
last_updated: "{YYYY-MM-DD}"
Caption Annotation Diagram
%%{init: {'flowchart': {'nodeSpacing': 50, 'rankSpacing': 60, 'curve': 'basis'}}}%%
flowchart TB
%% CLASS DEFINITIONS %%
classDef cli fill:#1a237e,stroke:#7986cb,stroke-width:2px,color:#fff;
classDef stateNode fill:#004d40,stroke:#4db6ac,stroke-width:2px,color:#fff;
classDef handler fill:#e65100,stroke:#ffb74d,stroke-width:2px,color:#fff;
classDef output fill:#00695c,stroke:#4db6ac,stroke-width:2px,color:#fff;
classDef detector fill:#b71c1c,stroke:#ef5350,stroke-width:2px,color:#fff;
subgraph Titles ["TITLE AUDIT"]
T1["title = {text}<br/>━━━━━━━━━━<br/>declarative: PASS / FAIL"]
end
subgraph Axes ["AXIS LABEL AUDIT"]
A1["x-axis: {label} ({unit})<br/>y-axis: {label} ({unit})<br/>━━━━━━━━━━<br/>units present: PASS / FAIL"]
end
subgraph Errors ["ERROR DEFINITION"]
E1["error type: {CI95/std/SEM}<br/>━━━━━━━━━━<br/>defined in legend: PASS / FAIL"]
end
subgraph Disclosure ["BASELINE & SAMPLE n"]
D1["baseline: {name}<br/>n per condition: {N}<br/>━━━━━━━━━━<br/>disclosed: PASS / FAIL"]
end
subgraph Verdict ["VERDICT"]
V1["{OK / WARNING / FAIL}<br/>━━━━━━━━━━<br/>{reason}"]
end
T1 --> A1
A1 --> E1
E1 --> D1
D1 --> V1
class T1 stateNode;
class A1 handler;
class E1 cli;
class D1 output;
class V1 detector;
Color Legend:
| Color |
Category |
Description |
| Dark Teal |
Title |
Declarative title audit |
| Orange |
Axes |
Axis label and unit audit |
| Dark Blue |
Error |
Error bar definition check |
| Teal |
Disclosure |
Baseline and sample size disclosure |
| Red |
Verdict |
OK / WARNING / FAIL assessment |
---
## Pre-Diagram Checklist
Before creating the diagram, verify:
- [ ] LOADED `/autoskillit:mermaid` skill using the Skill tool
- [ ] Using ONLY classDef styles from the mermaid skill (no invented colors)
- [ ] Diagram will include a color legend table
- [ ] Every figure with a non-declarative title is flagged as FAIL
- [ ] Every axis missing units on a continuous quantity is flagged as WARNING
- [ ] Every figure with undefined error bars is flagged as FAIL
1---2name: vis-lens-caption-annot3description: Create Annotative Caption visualization planning spec showing declarative titles, axis labels with units, error definition in legend, baseline references, sample sizes, and venue-specific caption format. Annotative lens answering "Are figure captions and axis labels fully self-contained?"4---56# Annotative Caption Visualization Lens78**Philosophical Mode:** Annotative9**Primary Question:** "Are figure captions and axis labels fully self-contained?"10**Focus:** Declarative titles (state the result, not "Figure N: Results"), axis labels with11 units, error definition in legend (CI95 / std / SEM), baseline references cited in12 caption, sample sizes disclosed per condition, venue-specific caption format1314## Arguments1516`/autoskillit:vis-lens-caption-annot [context_path] [experiment_plan_path]`1718- **context_path** (optional positional arg 1) — Absolute path to a lens context file19 containing IV/DV tables, H0/H1 hypotheses, controlled variables, and success criteria.20 If provided, read this file before beginning analysis to obtain structured context.21 If omitted, discover context by exploring the CWD.22- **experiment_plan_path** (optional positional arg 2) — Absolute path to the full23 experiment plan. If provided, read for complete experimental methodology and design.24 If omitted, locate the experiment plan by exploring the CWD.2526## When to Use2728- Auditing figure captions before paper submission29- Checking whether axis labels carry units and direction information30- Verifying error bars are defined in the legend or caption31- Ensuring baseline conditions are referenced explicitly32- Disclosing sample size per plotted condition33- User invokes `/autoskillit:vis-lens-caption-annot`3435## Critical Constraints3637**NEVER:**38- Modify any source code files39- Do not litter the codebase with useless comments, TODO markers, or explanatory annotations — the skill output and diagram speak for themselves40- Create files outside `{{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/`41- Use a non-declarative title like "Results" or "Figure 3: Performance" — titles must state the takeaway (e.g., "Model A outperforms baseline on all benchmarks")42- Omit units from axis labels (e.g., write "Latency (ms)", not "Latency")4344**ALWAYS:**45- Check every figure title for declarative language46- Verify every axis label carries a unit or categorical scale description47- Confirm error bars / shaded regions are defined (CI95, ±1 std, IQR, etc.) in the legend or caption48- Flag any figure that references a baseline without naming it explicitly49- Report sample size per plotted condition (n=X seeds, N=X subjects, etc.)50- BEFORE creating any diagram, LOAD the `/autoskillit:mermaid` skill using the Skill tool — this is MANDATORY51- If the Skill tool cannot be used (disable-model-invocation) or refuses this invocation, do NOT proceed with diagram creation. Abort this step and omit the diagram from output.52- Write output to `{{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/vis_spec_caption_annot_{YYYY-MM-DD_HHMMSS}.md` (relative to the current working directory)53- After writing the file, emit the structured output token as **literal plain text** with no54 markdown formatting on the token name (the adjudicator performs a regex match):5556 ```57 diagram_path = /absolute/path/to/{{AUTOSKILLIT_TEMP}}/vis-lens-caption-annot/vis_spec_caption_annot_{...}.md58 ```5960---6162## Analysis Workflow6364### Step 0: Parse optional arguments6566If positional arg 1 (context_path) is provided and the file exists, read it to obtain67IV/DV tables, H0/H1 hypotheses, controlled variables, and success criteria. If positional68arg 2 (experiment_plan_path) is provided and exists, read the experiment plan for full69methodology. Use this structured context as the foundation for Steps 1–4; skip the CWD70exploration for these fields if the context file supplies them.7172### Step 1: Inventory Figure Titles7374For every figure in the experiment plan or codebase:75- Collect the current title string76- Classify: DECLARATIVE (states a result) vs DESCRIPTIVE (labels the figure)77- FAIL if title is purely descriptive (e.g. "Ablation Results", "Performance Comparison")78- PASS if title states the key finding (e.g. "Removing component X degrades accuracy by 8 pp")7980### Step 2: Axis Label and Unit Audit8182For every axis in every figure:83- Confirm the label is present (no unlabeled axes)84- Confirm units are stated for continuous quantities: time (ms/s), memory (MB/GB), accuracy (%), loss (nats/bits), etc.85- Confirm categorical axes name the grouping variable86- FLAG WARNING for any axis missing a unit on a continuous quantity8788### Step 3: Error and Uncertainty Definition Audit8990For every figure that shows error bars, shaded regions, or confidence intervals:91- Identify the error representation: CI (90/95/99%), ±1 std, ±1 SEM, IQR, min/max92- Verify the definition appears in the legend or caption text93- FLAG FAIL if error bars are shown but not defined9495### Step 4: Baseline and Sample Size Disclosure9697- Identify every "baseline" referenced in a figure or caption98- Verify the baseline name and source are stated (e.g. "GPT-4 (OpenAI, 2023)")99- For each plotted group/condition, verify sample size n is disclosed (seeds, subjects, runs)100- FLAG WARNING for any undisclosed baseline or missing n101102### Step 5: Emit yaml:figure-spec Blocks103104For each figure, emit one `yaml:figure-spec` fenced block with the `annotations` field105describing the caption audit result. Then LOAD `/autoskillit:mermaid` and create a diagram106showing: title audit → axis audit → error definition → baseline/n disclosure → verdict.107108---109110## Output Template111112```markdown113# Annotative Caption Spec: {System / Experiment Name}114115**Lens:** Annotative Caption (Annotative)116**Question:** Are figure captions and axis labels fully self-contained?117**Date:** {YYYY-MM-DD}118**Scope:** {What was analyzed}119120## Caption Audit Summary121122| Figure | Declarative Title | Axis Units | Error Defined | Baseline Named | Sample n | Status |123|--------|-------------------|-----------|---------------|----------------|----------|--------|124| fig-01 | FAIL (descriptive) | PASS | PASS | N/A | PASS | FAIL |125| fig-02 | PASS | PASS | PASS | PASS | PASS | OK |126127## Figure Specs128129```yaml130# yaml:figure-spec — canonical schema (spec_version: "1.0")131figure_id: "fig-02-ablation-comparison"132figure_title: "Removing component X degrades accuracy by 8 pp"133spec_version: "1.0"134chart_type: "bar"135chart_type_fallback: "table"136perceptual_justification: "Grouped bar chart shows per-component contribution directly."137data_source: "results/ablation.csv"138data_mapping:139 x: "variant"140 y: "accuracy_delta_pp"141 color: "component"142 size: ""143 facet: ""144layout:145 width_inches: 5.0146 height_inches: 3.5147 dpi: 300148stat_overlay:149 type: "error_bar"150 measure: "CI95"151 n_seeds: 5152annotations: ["Declarative title PASS; axis labels with units PASS; CI95 defined in legend PASS; n=5 seeds per condition PASS"]153anti_patterns: []154palette: "okabe-ito"155format: "pdf"156target_dpi: 300157library: "matplotlib"158report_section: "Section 5 Ablation"159priority: "P1"160placement_tier: "main"161conflicts: []162metadata:163 created_by: "vis-lens-caption-annot"164 reviewed_by: ""165 last_updated: "{YYYY-MM-DD}"166```167168## Caption Annotation Diagram169170```mermaid171%%{init: {'flowchart': {'nodeSpacing': 50, 'rankSpacing': 60, 'curve': 'basis'}}}%%172flowchart TB173 %% CLASS DEFINITIONS %%174 classDef cli fill:#1a237e,stroke:#7986cb,stroke-width:2px,color:#fff;175 classDef stateNode fill:#004d40,stroke:#4db6ac,stroke-width:2px,color:#fff;176 classDef handler fill:#e65100,stroke:#ffb74d,stroke-width:2px,color:#fff;177 classDef output fill:#00695c,stroke:#4db6ac,stroke-width:2px,color:#fff;178 classDef detector fill:#b71c1c,stroke:#ef5350,stroke-width:2px,color:#fff;179180 subgraph Titles ["TITLE AUDIT"]181 T1["title = {text}<br/>━━━━━━━━━━<br/>declarative: PASS / FAIL"]182 end183184 subgraph Axes ["AXIS LABEL AUDIT"]185 A1["x-axis: {label} ({unit})<br/>y-axis: {label} ({unit})<br/>━━━━━━━━━━<br/>units present: PASS / FAIL"]186 end187188 subgraph Errors ["ERROR DEFINITION"]189 E1["error type: {CI95/std/SEM}<br/>━━━━━━━━━━<br/>defined in legend: PASS / FAIL"]190 end191192 subgraph Disclosure ["BASELINE & SAMPLE n"]193 D1["baseline: {name}<br/>n per condition: {N}<br/>━━━━━━━━━━<br/>disclosed: PASS / FAIL"]194 end195196 subgraph Verdict ["VERDICT"]197 V1["{OK / WARNING / FAIL}<br/>━━━━━━━━━━<br/>{reason}"]198 end199200 T1 --> A1201 A1 --> E1202 E1 --> D1203 D1 --> V1204205 class T1 stateNode;206 class A1 handler;207 class E1 cli;208 class D1 output;209 class V1 detector;210```211212**Color Legend:**213| Color | Category | Description |214|-------|----------|-------------|215| Dark Teal | Title | Declarative title audit |216| Orange | Axes | Axis label and unit audit |217| Dark Blue | Error | Error bar definition check |218| Teal | Disclosure | Baseline and sample size disclosure |219| Red | Verdict | OK / WARNING / FAIL assessment |220```221222---223224## Pre-Diagram Checklist225226Before creating the diagram, verify:227228- [ ] LOADED `/autoskillit:mermaid` skill using the Skill tool229- [ ] Using ONLY classDef styles from the mermaid skill (no invented colors)230- [ ] Diagram will include a color legend table231- [ ] Every figure with a non-declarative title is flagged as FAIL232- [ ] Every axis missing units on a continuous quantity is flagged as WARNING233- [ ] Every figure with undefined error bars is flagged as FAIL