feat: add comprehensive agent rules and workflows for memory curation, communication synchronization, and project documentation management
This commit is contained in:
117
.agents/workflows/standup.md
Normal file
117
.agents/workflows/standup.md
Normal file
@@ -0,0 +1,117 @@
|
||||
---
|
||||
description: Draft a standup from the latest Fidelity workspace context
|
||||
---
|
||||
|
||||
Generate a standup update using the latest workspace state.
|
||||
|
||||
First, refresh Mattermost context before drafting:
|
||||
|
||||
!`python3 - <<'PY'
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
cmd = os.environ.get("AIW_MATTERMOST_SYNC_CMD") or os.environ.get("FIDELITY_MATTERMOST_SYNC_CMD")
|
||||
if cmd:
|
||||
result = subprocess.run(["bash", "-lc", cmd], capture_output=True, text=True)
|
||||
elif Path("scripts/mattermost/sync.sh").is_file():
|
||||
result = subprocess.run(["bash", "scripts/mattermost/sync.sh"], capture_output=True, text=True)
|
||||
else:
|
||||
print("No Mattermost sync command configured.")
|
||||
raise SystemExit(0)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("__MATTERMOST_SYNC_FAILED__")
|
||||
if result.stdout:
|
||||
print(result.stdout.strip())
|
||||
if result.stderr:
|
||||
print(result.stderr.strip())
|
||||
else:
|
||||
if result.stdout.strip():
|
||||
print(result.stdout.strip())
|
||||
PY`
|
||||
|
||||
Read:
|
||||
|
||||
@prompts/standup.md
|
||||
@project-knowledge/00-start/start-here.md
|
||||
@project-knowledge/01-current/current-work.md
|
||||
@project-knowledge/01-current/work-items.md
|
||||
@project-knowledge/03-context/project.md
|
||||
@project-knowledge/03-context/workstreams/index.md
|
||||
@project-knowledge/03-context/workstreams/flow-page-references.md
|
||||
@project-knowledge/03-context/process/communication.md
|
||||
@project-knowledge/03-context/process/jira-story-rules.md
|
||||
@project-knowledge/04-people/manager.md
|
||||
|
||||
Previous workday Mattermost context, if present:
|
||||
|
||||
!`bash scripts/mattermost/sync.sh --previous-workday --today "$(date +%F)"`
|
||||
|
||||
Today's log, if present:
|
||||
|
||||
!`if [ -f project-knowledge/06-daily/$(date +%F).md ]; then cat project-knowledge/06-daily/$(date +%F).md; else echo "No daily note exists for today yet."; fi`
|
||||
|
||||
Latest Mattermost context, preferring inbox and falling back to generated JSONL:
|
||||
|
||||
!`if [ -s ai/inbox/mattermost-latest.md ]; then cat ai/inbox/mattermost-latest.md; elif [ -s scripts/mattermost/generated/mattermost_context.jsonl ]; then cat scripts/mattermost/generated/mattermost_context.jsonl; else echo "No Mattermost context available."; fi`
|
||||
|
||||
Detailed active work item files, if available:
|
||||
|
||||
!`python3 - <<'PY'
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
summary = Path("project-knowledge/01-current/work-items.md")
|
||||
if not summary.is_file():
|
||||
print("No work item files available.")
|
||||
raise SystemExit(0)
|
||||
|
||||
text = summary.read_text()
|
||||
paths = re.findall(r"Detail: `(project-knowledge/02-work-items/[^`]+)`", text)
|
||||
if not paths:
|
||||
print("No work item files available.")
|
||||
raise SystemExit(0)
|
||||
|
||||
for rel in paths:
|
||||
path = Path(rel)
|
||||
if not path.is_file():
|
||||
continue
|
||||
print(f"\n### {rel}")
|
||||
print(path.read_text())
|
||||
PY`
|
||||
|
||||
Before drafting:
|
||||
|
||||
- use `status-reporting` when available
|
||||
- update workspace memory if the refreshed context introduced clear high-confidence project facts
|
||||
- prefer existing memory when the latest context is ambiguous
|
||||
- treat the previous workday Mattermost context as the source for the `Yesterday` section, even when the previous calendar day was a weekend, holiday, or OOO day
|
||||
- mention Jira IDs and approved titles when they map cleanly to previous-work context
|
||||
- prioritize story-based updates over side questions, memory refreshes, or manager-only context
|
||||
- if documentation or root cause updates directly support a story, roll them into that story's update instead of listing them separately
|
||||
- exclude items that are not directly tied to a story unless they are true blockers
|
||||
- when one Jira item has multiple concrete updates, group them under one top-level `JIRA-ID - Title` bullet with indented markdown sub-bullets instead of repeating the same Jira line
|
||||
- use `project-knowledge/03-context/workstreams/flow-page-references.md` to preserve real flow/page identifiers when shorthand appears in logs or messages
|
||||
- for standups that will also be sent to Teams, prefer plain language over internal implementation jargon; avoid unexplained terms like `fallback`
|
||||
- if work is in release-process waiting state, show the parallel story work explicitly instead of implying idle waiting
|
||||
- if Mattermost sync failed, acknowledge that internally and rely on the latest saved workspace context instead of inventing fresher communication
|
||||
- prefer only the detailed work-item files referenced by `project-knowledge/01-current/work-items.md`; do not mine unrelated or completed ticket files unless they are explicitly active in current memory
|
||||
|
||||
Return a standup that is:
|
||||
|
||||
- specific
|
||||
- concise
|
||||
- grounded in the latest context
|
||||
- safe to send without overstating certainty
|
||||
- written in natural US English that can be sent externally without rewriting
|
||||
- written as David's progress report
|
||||
- free of any mention of Mattermost, since it is internal-only communication
|
||||
- starts with exactly `Hi @jeff, here’s my daily scrum update:` for the active Fidelity profile
|
||||
- does not mention Jeff again after the greeting unless explicitly needed
|
||||
- uses bullet points for each item
|
||||
- groups multiple updates for the same Jira item as indented sub-bullets
|
||||
- uses `JIRA-ID - Title` or `JIRA-ID Title` formatting instead of comma-separated ID/title formatting
|
||||
- preserves chronological order within each Jira item's sub-bullets
|
||||
- omits future-sprint stories from `Today` unless they are real blockers
|
||||
- is ready to copy/paste into Mattermost as Markdown
|
||||
Reference in New Issue
Block a user