Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 41 additions & 2 deletions src/autoskillit/skills_extended/generate-report/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,33 @@ If `${RESEARCH_DIR}/visualization-plan.md` exists:

### Step 3 — Write Report

### Domain-Adaptive Section Ordering

The default section order below suits software engineering and computational
research. Adjust to match domain conventions when the research question
originates from a non-engineering field:

- **Default (engineering / computational):** Executive Summary → Background and
Research Question → Methodology → Results → Observations → Analysis →
What We Learned → Conclusions → Recommendations
- **Biology / biomedical:** Adapted from IMRaD — Background → Methodology →
Results → Discussion and Future Directions → What We Learned. Use "Discussion
and Future Directions" instead of "Recommendations". For journals that move
Methods to supplementary material (e.g., Nature style), omit the Methodology
section from the main body and note its location.
- **Economics / social science:** Background → Methodology → Results → Analysis →
Discussion and Future Directions → What We Learned.

**Rules:**
- Executive Summary is always first; Appendices are always last. Exception: for
academic journal submissions (biology, medical, social science) where Executive
Summary is not a standard format, replace it with a structured Abstract at the
document start.
- All mandatory sections (Data Scope Statement, Metrics Provenance Check, Gate
Enforcement, What We Learned) must appear regardless of reordering.
- When reordering, only the section position changes — content requirements are
unchanged.

Create the report directory and file:
```
research/YYYY-MM-DD-{slug}/
Expand Down Expand Up @@ -216,7 +243,7 @@ enough detail for independent reproduction.}
### Environment
- **Repository commit:** {output of `git rev-parse HEAD` — the exact commit this experiment ran against}
- **Branch:** {current branch name}
- **Package versions:** {output of the project's package manager — e.g., `cargo tree`, `pip freeze`, `conda list`, or the contents of lock files. Include ALL relevant dependency versions, not just top-level.}
- **Package versions:** {output of the project's package manager — e.g., `pip freeze`, `conda list`, or the contents of lock files (e.g., `requirements.txt`, `environment.yml`). Include ALL relevant dependency versions, not just top-level.}
- **Hardware/OS:** {if relevant to the experiment}
- **Custom environment:** {if a micromamba/conda environment.yml was used, note it and its location}

Expand Down Expand Up @@ -307,8 +334,20 @@ analysis if relevant to the experiment type.}

## Recommendations

*For biology and social science domains, use "Discussion and Future Directions" as the section title instead.*

{Actionable next steps based on findings — what to keep, revert, modify,
or investigate further. Include justification for each recommendation.}
or investigate further. Include justification for each recommendation.
In non-engineering domains, frame this section as "Discussion and Future Directions":
interpret findings in the context of existing literature, explain implications,
and propose follow-on studies rather than prescriptive next steps.}

## Data Availability

{Optional — include when required by the target journal or domain conventions
(biology, medical, social science). State where datasets, code, and supplementary
materials are available, or explain any access restrictions (e.g., patient data,
proprietary datasets). Omit this section for internal engineering reports.}

## Appendix: Experiment Scripts

Expand Down
42 changes: 42 additions & 0 deletions tests/contracts/test_generate_report_contracts.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,45 @@ def test_gate_enforcement_fail_state() -> None:
text = SKILL_PATH.read_text()
lower = text.lower()
assert "fail" in lower and "gate" in lower


def test_no_rust_specific_package_manager() -> None:
"""Environment section must not reference cargo tree (Rust-specific)."""
text = SKILL_PATH.read_text()
assert "cargo tree" not in text, (
"generate-report/SKILL.md references 'cargo tree' (Rust-specific). "
"Use language-agnostic package manager examples."
)


def test_domain_adaptive_ordering_guidance() -> None:
"""SKILL.md must include guidance on domain-adaptive section ordering."""
text = SKILL_PATH.read_text()
lower = text.lower()
assert "biology" in lower, (
"generate-report/SKILL.md has no domain-adaptive ordering guidance. "
"Add notes on biology/non-engineering section ordering conventions."
)
assert "domain-adaptive" in lower, (
"generate-report/SKILL.md must mention 'domain-adaptive' section ordering "
"to verify the guidance actually covers non-engineering conventions."
)


def test_data_availability_section_supported() -> None:
"""SKILL.md must include an optional Data Availability section in the template."""
text = SKILL_PATH.read_text()
assert "Data Availability" in text, (
"generate-report/SKILL.md template is missing an optional 'Data Availability' "
"section. Required by biology and social science journals."
)


def test_recommendations_or_discussion_framing() -> None:
"""SKILL.md must allow 'Discussion and Future Directions' as an alternative
to 'Recommendations' for non-engineering domains."""
text = SKILL_PATH.read_text()
assert "Discussion and Future Directions" in text, (
"generate-report/SKILL.md does not offer 'Discussion and Future Directions' "
"as an alternative framing for the Recommendations section."
)
Loading