report-revision-workflow
Skill5 starsChanged 6 months agoMITView on GitHub
AI-assisted HITL revision of performance test reports with iterative refinement, version tracking, and optional Confluence publishing. Use when the user mentions report revision, AI-enhanced report, revise executive summary, revise key observations, revise issues table, or improve a performance report.
We split this skill into the rules it gives an agent
26 rules. About 0 are common, 19 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈19
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 179
Use markdown formatting (headers, bullet points, tables)
- Distinctive: line 183
When using terms non-technical stakeholders may not understand:
- Very specific: line 185
1-2 terms: Add a footnote after Key Observations: > Terms: *CoV* — A measure of response time consistency.
- Distinctive: line 187
3+ terms: Add a "Glossary" section before "Report Generation Details" with a definition table.
- Distinctive: line 194
When generating content for comparison reports, consider:
- Distinctive: line 244
When iterating, provide specific feedback to improve subsequent versions.
- Distinctive: line 257
Ask the user for the following values.
- Distinctive: line 282
Do not proceed until the original report has been generated.
- Distinctive: line 288
Action: Create task items to monitor progress:
- Very specific: line 304
Action: Call MCP tool discover_revision_data
- Very specific: line 332
Validation: Verify enabled_section_count > 0.
- Very specific: line 341
On error: If the tool fails, check run_id, verify the artifacts folder exists, and ensure the original report was generated first.
- Distinctive: line 350
Action: Read the priority data files listed in the Reference section to build context.
- Distinctive: line 369
Use the data from the analysis files to produce specific, data-driven content.
- Very specific: line 418
Only process sections where enabled: true in the discovery response.
- Very specific: line 422
On error: If the tool fails, check section_id is valid, content is not empty, and report_type matches the run_id.
- Very specific: line 463
Validation: Verify status is "success", sections_revised contains all expected sections, revised_report_path exists.
- Distinctive: line 466
On error: Verify revision files exist in the revisions folder and at least one section is enabled.
- Distinctive: line 487
If the user is satisfied, go to Step 8.
- Distinctive: line 488
If the user wants changes, go to Step 7.
- Distinctive: line 654
On error: If API calls fail, retry up to 3 times.
- Distinctive: line 663
Do NOT retry on failure. Report the error with full details.
- Distinctive: line 665
Wait 5-10 seconds between retries.
- Distinctive: line 666
If any step fails, stop and report to the user with:
- Distinctive: line 670
Do NOT proceed to the next step if the current step failed.
- Distinctive: line 671
Ask the user for next steps on any error.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI-Assisted Report Revision Workflow
When to Use This Skill
- User wants to revise or enhance a performance test report with AI-generated content
- User mentions report revision, AI summary, executive summary, key observations, or issues table
- User wants to iteratively refine report sections with feedback
- User wants to publish a revised report to Confluence
- This workflow supports both
single_runreports andcomparisonreports
Reference
This section provides context for humans and capable models. For the step-by-step execution instructions, skip to the Execution section below.
What This Workflow Does
Orchestrates the AI-assisted revision of performance test reports using a Human-In-The-Loop (HITL) approach. It enables iterative refinement of report sections through PerfReport MCP tools that work together to discover data, save AI-generated revisions, and assemble the final report.
The workflow phases:
- Discovery — Gather all available data files and determine which sections are revisable
- AI Generation — Read analysis data and generate revised content for enabled sections
- Save Revisions — Save each revised section with version tracking
- Assembly — Assemble the final revised report with AI content replacing placeholders
- User Review — Present results and gather feedback
- HITL Iteration — Refine specific sections based on user feedback (repeatable)
- Confluence Publishing — Optionally publish the revised report
Report Types and Section Differences
This workflow handles two report types with different section IDs:
Single-Run Report Sections:
| Section ID | Placeholder | Description |
executive_summary | {{EXECUTIVE_SUMMARY}} | High-level test outcome summary with key metrics and findings |
key_observations | {{KEY_OBSERVATIONS}} | Bullet-point observations about test performance and issues |
issues_table | {{ISSUES_TABLE}} | Table of issues and errors observed during test execution |
jmeter_log_analysis | {{JMETER_LOG_ANALYSIS}} | JMeter/BlazeMeter log error analysis with categorization, affected APIs, and JTL correlation |
bottleneck_analysis | {{BOTTLENECK_ANALYSIS}} | Bottleneck identification with degradation thresholds, severity breakdown, and per-endpoint findings |
Comparison Report Sections:
| Section ID | Placeholder | Description |
executive_summary | {{EXECUTIVE_SUMMARY}} | Comparison summary across multiple test runs |
key_findings | {{KEY_FINDINGS_BULLETS}} | Key findings from comparing test runs |
issues_summary | {{ISSUES_SUMMARY}} | Summary of issues across compared runs |
overall_trend_summary | {{OVERALL_TREND_SUMMARY}} | Overall performance trend narrative comparing key metrics across test runs |
correlation_insights_section | {{CORRELATION_INSIGHTS_SECTION}} | Performance-infrastructure correlation analysis across compared runs |
The discover_revision_data tool returns the full list of available sections dynamically.
The tables above reflect the known sections defined in report_config.yaml. Additional
sections may be added in the future.
Key differences between report types:
- Single-run uses
key_observationsandissues_table - Comparison uses
key_findingsandissues_summary - Comparison has additional sections:
overall_trend_summaryandcorrelation_insights_section - Single-run has additional sections:
jmeter_log_analysisandbottleneck_analysis
Artifact Paths
Single-Run Reports:
artifacts/{run_id}/reports/
├── performance_report_{run_id}.md # Original report
├── performance_report_{run_id}_original.md # Backup (after revision)
├── performance_report_{run_id}_revised.md # AI-revised report
├── report_metadata_{run_id}.json # Metadata
├── report_metadata_{run_id}_original.json # Backup metadata
└── revisions/ # AI revision files
├── AI_EXECUTIVE_SUMMARY_v1.md
├── AI_KEY_OBSERVATIONS_v1.md
└── AI_ISSUES_TABLE_v1.mdComparison Reports:
artifacts/comparisons/{comparison_id}/
├── comparison_report_*.md # Original report
├── comparison_report_*_original.md # Backup (after revision)
├── comparison_report_*_revised.md # AI-revised report
├── comparison_metadata_*.json # Metadata
├── comparison_metadata_*_original.json # Backup metadata
├── charts/ # Comparison charts
└── revisions/ # AI revision files
├── AI_EXECUTIVE_SUMMARY_v1.md
├── AI_KEY_FINDINGS_BULLETS_v1.md
└── AI_ISSUES_SUMMARY_v1.mdTool Reference
| Tool | Purpose | Key Parameters |
discover_revision_data | Gather data files and revisable sections | run_id, report_type, additional_context (optional) |
prepare_revision_context | Save AI-generated content for a section | run_id, section_id, revised_content, report_type, additional_context (optional) |
revise_performance_test_report | Assemble final revised report from saved revisions | run_id, report_type, revision_version (optional) |
convert_markdown_to_xhtml | Convert revised Markdown to Confluence XHTML | test_run_id, filename, report_type |
update_page | Publish revised content to Confluence page | page_ref, test_run_id, mode, use_revised, report_type |
AI Content Guidelines
Executive Summary
- High-level overview of test results
- Include key metrics: success rate, avg response time, throughput
- Highlight critical issues or SLA violations
- 3-5 sentences or bullet points
- Mention test environment and date if relevant
- Incorporate
additional_contextif provided (project name, purpose)
Key Observations (single_run) / Key Findings (comparison)
- 3-7 key observations or findings
- Bullet points for clarity
- Both positive findings and concerns
- Reference specific APIs or services
- Prioritize by impact
- For comparison: Include trends across runs, scaling behavior, pattern identification
Issues Table (single_run) / Issues Summary (comparison)
- Markdown table: Issue Type, Severity, Count/Impact, Affected Endpoint, Description
- Sort by severity (Critical > High > Medium > Low)
- Include error rates and specific error messages
- For HTTP errors, recommend reviewing JMeter logs
- For comparison: Recurring vs. one-time issues, issues resolved between runs
JMeter Log Analysis (single_run)
- Categorize errors found in JMeter/BlazeMeter logs
- List affected APIs and endpoints
- Correlate with JTL test results data where applicable
- Highlight patterns (e.g., recurring errors, timeouts, connection failures)
Bottleneck Analysis (single_run)
- Identify the concurrency threshold where performance degradation begins
- Severity breakdown by endpoint
- Per-endpoint findings with specific metrics
- Recommendations for addressing bottlenecks
Overall Trend Summary (comparison)
- Narrative describing how key metrics changed across test runs
- Highlight scaling behavior (e.g., linear throughput growth, stable error rates)
- Note any inflection points where performance degraded
Correlation Insights (comparison)
- Performance-infrastructure correlation findings across runs
- CPU/Memory scaling behavior relative to load increases
- Identify which resources correlate most strongly with response time changes
Writing Style
- Professional tone suitable for leadership/stakeholders
- Concise but informative with specific metrics and data points
- Use markdown formatting (headers, bullet points, tables)
Technical Term Definitions
When using terms non-technical stakeholders may not understand:
- 1-2 terms: Add a footnote after Key Observations:
> **Terms:** *CoV* — A measure of response time consistency; values >1.0 indicate high variability. - 3+ terms: Add a "Glossary" section before "Report Generation Details" with a definition table.
Common terms requiring definition: CoV, P90/P95/P99, SLA, Throughput, Latency vs Response Time, Error Rate, mCPU, Connection Pool.
AI Content Guidelines for Comparison Reports
When generating content for comparison reports, consider:
- Trends Analysis — How performance changed across runs, improvements or degradations, pattern identification
- Multi-Run Context — User load scaling (e.g., 25 -> 500 VUs), throughput changes, success rate consistency
- Infrastructure Insights — CPU/Memory scaling behavior, resource utilization patterns, correlation between load and usage
- Aggregated Issues — Recurring vs. one-time issues, issues resolved between runs, critical patterns
Example comparison executive summary:
"Analysis of 5 test runs (25-750 VUs) shows stable system performance under increasing load. Throughput scaled linearly from 1.76 to 161.54 req/sec while maintaining 99.98%+ success rate. CPU utilization increased proportionally (220 -> 1040 mCPU) indicating healthy resource scaling."
Priority Data Files
For single_run reports (read in this order):
artifacts/{run_id}/analysis/performance_analysis.json— Core metricsartifacts/{run_id}/analysis/performance_summary.md— Human-readable summaryartifacts/{run_id}/analysis/infrastructure_analysis.json— Infrastructure metricsartifacts/{run_id}/analysis/correlation_analysis.json— Correlationsartifacts/{run_id}/analysis/bottleneck_analysis.json— Bottleneck analysisartifacts/{run_id}/analysis/<source>_log_analysis.json— Source: "jmeter" or "blazemeter"artifacts/{run_id}/analysis/log_analysis.json— High-level log analysis incl. Datadogartifacts/{run_id}/blazemeter/test_config.json— Test configurationartifacts/{run_id}/reports/performance_report_{run_id}.md— Current report
For comparison reports (read in this order):
artifacts/comparisons/{comparison_id}/comparison_metadata_*.json— Run IDs and configartifacts/comparisons/{comparison_id}/comparison_report_*.md— Current comparison report- For each run in
run_id_list:artifacts/{run_id}/reports/report_metadata_{run_id}.json— Individual run metricsartifacts/{run_id}/analysis/performance_analysis.json— Detailed metrics per run
Related Rules
prerequisites.mdc—test_run_idand artifact structure validationskill-execution-rules.mdc— Follow steps in order, collect inputs first, do not skipmcp-error-handling.mdc— MCP tool error handling (retry policy, reporting format)
Important Notes
- The original report must exist before running the revision workflow.
- Sections must be enabled in
report_config.yamlbefore they can be revised. All sections are disabled by default. - Each call to
prepare_revision_contextcreates a new version. Previous versions are preserved for comparison. - The original report and metadata are backed up before any modifications. Backups are not overwritten if they already exist.
- When iterating, provide specific feedback to improve subsequent versions.
Execution
This is an interactive HITL workflow. Steps 6-7 repeat as many times as needed based on user feedback.
Collect Inputs
Ask the user for the following values. Do not proceed until all required values are collected.
REQUIRED:
run_id = [test run ID for single_run, or comparison_id for comparison reports]
report_type = ["single_run" (default) or "comparison"]
OPTIONAL:
additional_context = [project name, purpose, feature/PBI details from ADO/JIRA]
sections_to_revise = [user preferences on which sections to revise]Prerequisites Check
For single_run reports, verify:
- Report exists at
artifacts/{run_id}/reports/performance_report_{run_id}.md - Analysis data exists at
artifacts/{run_id}/analysis/ - Sections are enabled in
report_config.yamlunderrevisable_sections.single_run
For comparison reports, verify:
- Report exists at
artifacts/comparisons/{comparison_id}/comparison_report_*.md - Comparison metadata exists at
artifacts/comparisons/{comparison_id}/comparison_metadata_*.json - Individual run reports exist for each run in
run_id_list - Sections are enabled in
report_config.yamlunderrevisable_sections.comparison
Do not proceed until the original report has been generated.
Step 1 — Initialize Task Tracking
Action: Create task items to monitor progress:
- Discovery: Run
discover_revision_data - AI Generation: Read data files and generate content
- Save Revisions: Run
prepare_revision_context(per section) - Assembly: Run
revise_performance_test_report - Review: User reviews revised report
- HITL Iteration (if needed)
- Confluence Publishing (if needed)
Step 2 — Discovery
Input: run_id, report_type, additional_context (optional)
Action: Call MCP tool discover_revision_data
discover_revision_data(
run_id = {run_id},
report_type = {report_type},
additional_context = {additional_context}
)Expected response:
{
"data_sources": { "blazemeter": [...], "datadog": [...], "analysis": [...], "reports": [...] },
"revisable_sections": [ { "section_id": "...", "enabled": true/false, ... } ],
"enabled_section_count": 3,
"revision_output_path": "artifacts/{run_id}/reports/revisions/",
"existing_revisions": { ... },
"revision_guidelines": "..."
}Save:
data_sources= file paths organized by MCP sourcerevisable_sections= list of sections with enabled/disabled statusenabled_section_count= number of sections ready for revision
Validation: Verify enabled_section_count > 0. If no sections are enabled, inform
the user to update report_config.yaml:
Location: perfreport-mcp/report_config.yaml
Section: revisable_sections.single_run (or .comparison)
Set enabled: true for desired sectionsOn error: If the tool fails, check run_id, verify the artifacts folder exists,
and ensure the original report was generated first. Stop and report to user.
Step 3 — AI Generation
Input: data_sources (from Step 2), report_type, additional_context
Action: Read the priority data files listed in the Reference section to build context.
For each enabled section, generate revised content following the AI Content Guidelines in the Reference section:
Single-run sections:
executive_summary— 3-5 sentences, key metrics, critical issueskey_observations— 3-7 bullet points prioritized by impactissues_table— Markdown table sorted by severityjmeter_log_analysis— Error categorization, affected APIs, JTL correlation findingsbottleneck_analysis— Degradation thresholds, severity breakdown, per-endpoint findings
Comparison sections:
executive_summary— Overall comparison findings across runskey_findings— Trends and insights, 3-7 bullet pointsissues_summary— Aggregated issues, recurring vs. one-timeoverall_trend_summary— Performance trend narrative across runscorrelation_insights_section— Performance-infrastructure correlation analysis
Use the data from the analysis files to produce specific, data-driven content.
Save: generated_content = dict mapping section_id to generated markdown content.
Step 4 — Save Revisions
Input: run_id, report_type, generated_content (from Step 3), additional_context
Action: For each enabled section, call MCP tool prepare_revision_context:
prepare_revision_context(
run_id = {run_id},
section_id = {section_id},
revised_content = {content for this section},
report_type = {report_type},
additional_context = {additional_context}
)Expected response:
{
"section_full_id": "single_run.executive_summary",
"revision_number": 1,
"revision_path": "artifacts/{run_id}/reports/revisions/AI_EXECUTIVE_SUMMARY_v1.md",
"previous_versions": []
}Repeat for each enabled section returned by discover_revision_data.
Single-run sections:
executive_summary-> save executive summary contentkey_observations-> save key observations contentissues_table-> save issues table contentjmeter_log_analysis-> save JMeter log analysis contentbottleneck_analysis-> save bottleneck analysis content
Comparison sections:
executive_summary-> save executive summary contentkey_findings-> save key findings contentissues_summary-> save issues summary contentoverall_trend_summary-> save overall trend summary contentcorrelation_insights_section-> save correlation insights content
Only process sections where enabled: true in the discovery response.
Save: Track which sections were saved and their version numbers.
On error: If the tool fails, check section_id is valid, content is not empty,
and report_type matches the run_id. Stop and report to user.
Step 5 — Assembly
Input: run_id, report_type
Action: Call MCP tool revise_performance_test_report
revise_performance_test_report(
run_id = {run_id},
report_type = {report_type},
revision_version = {optional — defaults to latest}
)The tool:
- Backs up original report to
*_original.md - Backs up metadata to
*_original.json - Replaces placeholders with AI-revised content
- Saves revised report to
*_revised.md - Updates metadata with revision info
Expected response:
{
"status": "success",
"revised_report_path": "artifacts/{run_id}/reports/performance_report_{run_id}_revised.md",
"backup_report_path": "artifacts/{run_id}/reports/performance_report_{run_id}_original.md",
"sections_revised": ["executive_summary", "key_observations", "issues_table"],
"revision_versions_used": { "executive_summary": 1, "key_observations": 1, "issues_table": 1 },
"warnings": []
}Save: revised_report_path, sections_revised, revision_versions_used.
Validation: Verify status is "success", sections_revised contains all expected
sections, revised_report_path exists. Review any warnings.
On error: Verify revision files exist in the revisions folder and at least one section is enabled. Stop and report to user.
Step 6 — User Review
Input: revised_report_path, sections_revised, revision_versions_used
Action: Present the results to the user:
- Display the path to the revised report
- Summarize which sections were revised
- Show the version numbers used
- Note any warnings from the assembly
Ask the user:
- "Would you like to review the revised report?"
- "Are there any sections that need further refinement?"
- "Should I make any adjustments to the content?"
If the user is satisfied, go to Step 8. If the user wants changes, go to Step 7.
Step 7 — HITL Iteration (repeatable)
When: The user requests changes to specific sections.
7a. Gather Feedback
Collect from the user:
- Which section needs revision?
- What changes are needed?
- Any additional context to incorporate?
7b. Re-generate Content
Generate new content for the specified section incorporating the user's feedback.
7c. Save New Version
prepare_revision_context(
run_id = {run_id},
section_id = {section_id},
revised_content = {new content},
report_type = {report_type},
additional_context = {feedback context}
)The tool automatically increments the version number (e.g., AI_EXECUTIVE_SUMMARY_v2.md).
7d. Re-assemble Report
revise_performance_test_report(
run_id = {run_id},
report_type = {report_type},
revision_version = {optional — specify version or omit for latest}
)7e. Present Updated Results
Go back to Step 6 to present the updated report and ask for feedback.
Continue the HITL loop until the user approves the revised report.
Step 8 — Final Output Summary
Action: Present a final summary to the user.
File Locations
For single_run reports:
- Original (backed up):
artifacts/{run_id}/reports/performance_report_{run_id}_original.md - Revised:
artifacts/{run_id}/reports/performance_report_{run_id}_revised.md - Revision files:
artifacts/{run_id}/reports/revisions/ - Metadata:
artifacts/{run_id}/reports/report_metadata_{run_id}.json
For comparison reports:
- Original (backed up):
artifacts/comparisons/{comparison_id}/comparison_report_*_original.md - Revised:
artifacts/comparisons/{comparison_id}/comparison_report_*_revised.md - Revision files:
artifacts/comparisons/{comparison_id}/revisions/ - Metadata:
artifacts/comparisons/{comparison_id}/comparison_metadata_*.json
Revision Summary Table (example for single_run)
| Section | Versions Created | Final Version Used |
| executive_summary | v1, v2 | v2 |
| key_observations | v1 | v1 |
| issues_table | v1 | v1 |
| jmeter_log_analysis | v1 | v1 |
| bottleneck_analysis | v1 | v1 |
Next Steps
Ask the user:
- "Would you like to publish the revised report to Confluence?" — If yes, go to Step 9.
- "Would you like to generate additional charts?" — Use
create_chartfrom PerfReport MCP. - "Would you like to create a comparison report?" — Follow the skill at
.cursor/skills/comparison-report-workflow/SKILL.md.
Step 9 — Publish Revised Report to Confluence (Optional)
When: The user wants to publish the revised report to an existing Confluence page.
Prerequisites:
- Revised report exists (
*_revised.md) page_ref(page ID) from the initial publish is available- Images have already been attached during the initial publish (no re-attach needed)
confluence_mode="cloud"or"onprem"
9a. Convert Revised Markdown to XHTML
For single_run reports:
convert_markdown_to_xhtml(
test_run_id = {run_id},
filename = "performance_report_{run_id}_revised.md",
report_type = "single_run"
)For comparison reports:
convert_markdown_to_xhtml(
test_run_id = {comparison_id},
filename = "comparison_report_{ids}_revised.md",
report_type = "comparison"
)This creates a *_revised.xhtml file in the reports folder.
9b. Update Confluence Page with Revised Content
For single_run reports:
update_page(
page_ref = {page_ref},
test_run_id = {run_id},
mode = {confluence_mode},
use_revised = true,
report_type = "single_run"
)For comparison reports:
update_page(
page_ref = {page_ref},
test_run_id = {comparison_id},
mode = {confluence_mode},
use_revised = true,
report_type = "comparison"
)The update_page tool with use_revised=true:
- Selects the
*_revised.xhtmlfile (not the main XHTML) - Substitutes chart placeholders with embedded
<ac:image>markup - Creates a
*_revised_with_images.xhtmlfile for reference - Updates the Confluence page with the revised content
Images are already attached from the initial publish. Only placeholder substitution and page content update are needed.
9c. Verification
Verify:
- Response shows
"used_revised": true xhtml_sourcefield shows the*_revised.xhtmlfilename- Chart placeholders were replaced (check
placeholders_replaced) - Page URL is accessible and shows the revised content
On error: If API calls fail, retry up to 3 times. Report error to user.
Error Handling
These rules apply to every step:
- PerfReport MCP tools (discover, prepare, revise): These are Python code executions. Do NOT retry on failure. Report the error with full details. Do NOT attempt to fix code.
- Confluence MCP tools (convert, update_page): These are API calls. Retry up to 3 times. Wait 5-10 seconds between retries.
- If any step fails, stop and report to the user with:
- Which tool failed
- Full error message
- What was expected vs. what happened
- Do NOT proceed to the next step if the current step failed.
- Ask the user for next steps on any error.
In this repository23 other files it gives its agents.
- .cursor/rules/browser-automation-guardrails.mdcCursor rule
- .cursor/rules/implementation-standards.mdcCursor rule
- .cursor/rules/jmeter-script-guardrails.mdcCursor rule
- .cursor/rules/mcp-error-handling.mdcCursor rule
- .cursor/rules/prerequisites.mdcCursor rule
- .cursor/rules/project-and-coding-guidelines.mdcCursor rule
- .cursor/rules/skill-execution-rules.mdcCursor rule
- .cursor/rules/technology-reference-policy.mdcCursor rule
- ado-test-case-conversionSkill
- comparison-report-workflowSkill
- jmeter-correlation-namingSkill
- jmeter-debuggingSkill
- jmeter-entraid-debuggingSkill
- jmeter-har-conversionSkill
- jmeter-hitl-editingSkill
- jmeter-script-validatorSkill
- jmeter-swagger-conversionSkill
- msteams-notificationSkill
- perfmemorySkill
- performance-testing-workflowSkill
- playwright-browser-automationSkill
- sharepoint-uploadSkill
- subagent-orchestratorSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

