diff --git a/.agents/rules/ai-prompt-engineering.md b/.agents/rules/ai-prompt-engineering.md new file mode 100644 index 0000000..fff62cb --- /dev/null +++ b/.agents/rules/ai-prompt-engineering.md @@ -0,0 +1,28 @@ +--- +name: ai-prompt-engineering +description: Create self-contained prompts for another AI assistant that lacks access to this workspace memory. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill when the user wants a prompt for another AI assistant, coding agent, review tool, or implementation environment. + +## Workflow + +1. Identify target task type: investigation, implementation, review, testing, debugging, or documentation. +2. Pull only relevant workspace context. +3. Make the prompt self-contained. +4. Tell the target AI what to inspect before acting. +5. State constraints, non-goals, expected output, and validation expectations. +6. Avoid invented file paths when the implementation repository is not available. + +## Output Rules + +- Return only the prompt unless the user asks for commentary. +- Prefer clear sections over long prose. +- Include work-item ID and title when relevant. +- Make assumptions explicit. + diff --git a/.agents/rules/copilot-prompt-engineering.md b/.agents/rules/copilot-prompt-engineering.md new file mode 100644 index 0000000..ffe0810 --- /dev/null +++ b/.agents/rules/copilot-prompt-engineering.md @@ -0,0 +1,49 @@ +--- +name: copilot-prompt-engineering +description: Create high-quality prompts for GitHub Copilot or another AI running on the Fidelity development machine, using this workspace's context without assuming the target AI has access to it. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill when the user wants a prompt for another AI assistant, GitHub Copilot, or the Fidelity development machine. + +## Workflow + +1. Identify the target task type: + - investigation + - implementation plan + - code change + - review + - test strategy + - story/PR drafting +2. Pull only the relevant context: + - `project-knowledge/02-work-items/` for ticket-specific context + - `project-knowledge/03-context/systems/` for component context + - `project-knowledge/03-context/workstreams/` for recurring constraints + - `project-knowledge/03-context/ios/` for Swift/iOS guidance +3. Make the prompt self-contained. +4. Tell the target AI what to inspect before acting. +5. State constraints, non-goals, and validation expectations. + +## Fidelity Prompting Rules + +- Write the final prompt in English unless the user explicitly requests another language. +- Default to first-person wording so the user can paste the prompt directly into Copilot. +- Keep the prompt short unless the user asks for more detail. +- For follow-up prompts in the same AI session, assume recent shared context and avoid repeating which side made the previous changes unless it matters for the task. +- Include Jira ID and approved title when available. +- For REST work, say REST is behind a feature flag and GraphQL is fallback unless confirmed otherwise. +- For XFlow work, say behavior may depend on entry point, auth state, backend config, and consumer integration. +- For AO/Discourse issues, say external report vs regression must be separated. +- For SwiftUI/XFlow work, mention lifecycle, modal presentation, UIKit bridge, feature flag, and Fid4 validation if relevant. + +## Output Rules + +- Return only the prompt unless the user asks for explanation. +- Keep the prompt concise but complete. +- Prefer sections over paragraphs. +- Do not invent file paths unless the workspace context explicitly names them. +- If exact files are unknown, ask Copilot to locate them first. diff --git a/.agents/rules/ios-swift-answering.md b/.agents/rules/ios-swift-answering.md new file mode 100644 index 0000000..70932bb --- /dev/null +++ b/.agents/rules/ios-swift-answering.md @@ -0,0 +1,30 @@ +--- +name: ios-swift-answering +description: Answer Swift, SwiftUI, and iOS programming questions using current Apple guidance while adapting recommendations to Fidelity/XFlow project constraints. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill for Swift, SwiftUI, iOS architecture, concurrency, testing, or debugging questions. + +## Workflow + +1. Identify whether the question is general Swift/iOS or Fidelity-specific. +2. Read `project-knowledge/03-context/ios/current-practices.md` for currentness rules. +3. Read `project-knowledge/03-context/ios/project-swift-guidance.md` when the answer may affect XFlow, Fid4, XFlowViewMaker, FTFrameworks, feature flags, or consumer validation. +4. If the answer depends on current Apple APIs, Xcode versions, dependency tooling, package-manager behavior, testing frameworks, or migration guidance, verify with official/primary documentation before making strong claims. +5. Separate: + - current best practice + - project-safe recommendation + - assumptions to confirm + +## Output Rules + +- Be direct and senior-engineer practical. +- Avoid generic architecture advice when project constraints matter. +- Do not assume deployment target, Xcode version, or framework migration status. +- Do not characterize CocoaPods, SPM, podspec repos, trunk/CDN behavior, CI/build behavior, or testing framework practices as good or bad practice without corroborating current primary docs when the recommendation matters. +- Mention tradeoffs and validation path when relevant. diff --git a/.agents/rules/ios-testing-strategy.md b/.agents/rules/ios-testing-strategy.md new file mode 100644 index 0000000..5e2953a --- /dev/null +++ b/.agents/rules/ios-testing-strategy.md @@ -0,0 +1,36 @@ +--- +name: ios-testing-strategy +description: Recommend iOS testing approaches for Swift, SwiftUI, XFlow, Fid4, and REST migration work while respecting existing XCTest/Swift Testing/project constraints. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill for unit tests, UI tests, integration tests, regression coverage, XFlow flow validation, or REST/GraphQL migration testing questions. + +## Workflow + +1. Identify the behavior under test. +2. Classify the test level: + - unit + - integration + - UI / consumer flow + - exploratory validation +3. Check whether the behavior depends on backend configuration, auth state, entry point, feature flags, or Fid4 integration. +4. Prefer the test framework already used by the project unless the user asks about migration. +5. If suggesting Swift Testing, confirm Xcode/project support first and do not mix APIs inside the same test. + +## Project-Specific Guidance + +- XFlow behavior may require exploratory validation beyond unit tests. +- AO/Discourse issues often need auth-state and entry-point coverage. +- REST migration tests must distinguish REST path from GraphQL fallback. +- Consumer-facing changes may require Fid4 validation even when SDK tests pass. + +## Output Rules + +- Recommend the smallest useful test strategy. +- Include what cannot be proven by that test layer. +- Mention manual/exploratory validation when code-level tests are insufficient. diff --git a/.agents/rules/professional-communication.md b/.agents/rules/professional-communication.md new file mode 100644 index 0000000..7b54026 --- /dev/null +++ b/.agents/rules/professional-communication.md @@ -0,0 +1,26 @@ +--- +name: professional-communication +description: Rewrite rough technical notes into clear, concise, stakeholder-ready professional English while preserving scope and technical meaning. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill for manager updates, stakeholder messages, translations, issue clarification, Jira comments, and communication polishing. + +## Workflow + +1. Identify audience, purpose, scope, and requested action. +2. Preserve technical meaning and uncertainty. +3. Make ownership, reproducibility, environment, and next action explicit when relevant. +4. Use Context, Observation, Action when it improves readability. +5. Avoid vague comparisons and generic progress language. + +## Output Rules + +- Write natural professional US English. +- Keep messages concise enough for workplace chat unless the user asks for a longer document. +- Do not invent facts, evidence, or commitments. + diff --git a/.agents/rules/status-reporting.md b/.agents/rules/status-reporting.md new file mode 100644 index 0000000..d11ce0c --- /dev/null +++ b/.agents/rules/status-reporting.md @@ -0,0 +1,27 @@ +--- +name: status-reporting +description: Generate work-item-aware standups and status summaries from current workspace memory, recent logs, and communication evidence. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill for standups, daily scrum updates, end-of-day summaries, and short progress reports. + +## Workflow + +1. Read current state, active work items, recent logs, and latest communication evidence. +2. Use the previous workday as the default source for "Yesterday" style updates. +3. Group updates by work item when possible. +4. If one work item has multiple concrete updates, use one top-level work-item bullet with indented markdown sub-bullets. +5. Exclude side chatter unless it changed work scope, priority, risk, or blockers. + +## Output Rules + +- Use explicit work-item ID and title when available. +- Keep the report concise and ready to send. +- Do not mention internal evidence sources unless the user asks. +- Use `Blockers: None` only when no blocker is visible in current memory. + diff --git a/.agents/rules/swiftui-xflow-review.md b/.agents/rules/swiftui-xflow-review.md new file mode 100644 index 0000000..bb30e3f --- /dev/null +++ b/.agents/rules/swiftui-xflow-review.md @@ -0,0 +1,33 @@ +--- +name: swiftui-xflow-review +description: Review or reason about SwiftUI code in XFlow/Fidelity contexts, especially lifecycle, modal presentation, navigation, backend-driven UI, and UIKit bridge removal. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill when a SwiftUI question touches XFlow, Fid4, XFlowViewMaker, modal presentation, dismissal sequencing, navigation, `UIHostingController`, or backend-driven UI behavior. + +## Review Heuristics + +- Check whether behavior is driven by backend configuration before blaming local SwiftUI code. +- Identify data ownership and view lifecycle boundaries. +- Treat dismissal sequencing as high risk when delegate callbacks, `onDisappear`, or upstream state changes are involved. +- Treat UIKit bridge removal as rollout-sensitive, not just cleanup. +- Separate SwiftUI best practice from Fidelity-safe migration strategy. + +## Fidelity-Specific Checks + +- Does the change preserve UIKit/SwiftUI parity? +- Does it require a feature flag? +- Does it need validation in Fid4 or only XFlowSDK? +- Could XFlowViewMaker or FTFrameworks block consumer visibility? +- Is the issue external behavior, existing behavior, or a regression? + +## Output Rules + +- Provide a clear recommendation. +- Include risks and validation path. +- Avoid recommending a pure SwiftUI approach without noting rollout and consumer validation impact. diff --git a/.agents/rules/workspace-memory-curation.md b/.agents/rules/workspace-memory-curation.md new file mode 100644 index 0000000..0f88acc --- /dev/null +++ b/.agents/rules/workspace-memory-curation.md @@ -0,0 +1,27 @@ +--- +name: workspace-memory-curation +description: Maintain file-based operational memory by deciding what to log, promote, correct, or route into tool behavior across reusable AI workspaces. +compatibility: opencode +trigger: always_on +glob: "" +--- + +## When To Use + +Use this skill when new information may change workspace memory, project state, work-item context, people context, decisions, or reusable agent/tool behavior. + +## Workflow + +1. Read `core/memory/operational-memory.md`. +2. Classify the information as daily, state, work-item, stable-context, people, decision, or tooling-behavior. +3. Update the smallest correct canonical file. +4. If new information corrects older memory, replace or refine the stale statement instead of appending a contradiction. +5. If a correction affects future output, update the command, prompt, agent, skill, or knowledge file that controls that behavior. +6. Keep imported evidence separate from promoted memory. + +## Output Rules + +- Report updated files and the memory change. +- Preserve uncertainty when confidence is mixed. +- Do not promote tool failures, sync noise, or generic chat chatter as project facts. + diff --git a/.agents/workflows/ai-prompt.md b/.agents/workflows/ai-prompt.md new file mode 100644 index 0000000..7102c10 --- /dev/null +++ b/.agents/workflows/ai-prompt.md @@ -0,0 +1,39 @@ +--- +description: Generate a self-contained prompt for another AI assistant +--- + +Generate a high-quality prompt for another AI assistant that may not have access to this workspace memory. + +Read: + +@core/README.md +@core/memory/operational-memory.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/03-context/project.md +@agent-memory/workflows/ai-to-ai-prompting.md + +Read active profile, if present: + +!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` + +Relevant active work item files, if available: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +User request: + +$ARGUMENTS + +Instructions: + +- use `ai-prompt-engineering` when available +- make the prompt self-contained +- include only relevant project context +- tell the target AI what to inspect before changing code or producing conclusions +- include constraints, non-goals, expected output, and validation expectations +- include work-item IDs and approved titles when relevant +- do not assume the target AI can read this workspace +- do not invent file paths if the implementation repository is not available here + +Return only the prompt unless the user asks for explanation. diff --git a/.agents/workflows/archive-import.md b/.agents/workflows/archive-import.md new file mode 100644 index 0000000..e2d2909 --- /dev/null +++ b/.agents/workflows/archive-import.md @@ -0,0 +1,57 @@ +--- +description: Import a historical communication archive and refine workspace memory +--- + +Use a historical communication export as archive evidence for the workspace. + +Interpret this as historical recovery, not as current truth and not as model training. + +Inputs: + +- `$ARGUMENTS` may contain an export path, channel names, or date filters +- if no explicit path is given, use `AIW_SLACK_EXPORT_PATH` when available +- Fidelity profile alias: `FIDELITY_SLACK_EXPORT_PATH` +- otherwise, if `archives/slack/export/` exists, use it as the default import source +- if no channels are specified, auto-detect channels using `AIW_CHANNEL_PREFIX` +- Fidelity default prefix: `fidelity` + +Run the importer: + +!`prefix="${AIW_CHANNEL_PREFIX:-fidelity}"; if [ -n "$ARGUMENTS" ]; then python3 scripts/slack/import_slack_export.py $ARGUMENTS; elif [ -n "$AIW_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$AIW_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -n "$FIDELITY_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$FIDELITY_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -d archives/slack/export ]; then python3 scripts/slack/import_slack_export.py --export-path archives/slack/export --channel-prefix "$prefix"; else echo "Provide archive import arguments, set AIW_SLACK_EXPORT_PATH, set FIDELITY_SLACK_EXPORT_PATH, or place an extracted export in archives/slack/export."; fi` + +Read: + +@core/README.md +@core/memory/operational-memory.md +@core/integrations/communication-model.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/03-context/project.md +@agent-memory/memory/context-maintenance.md +@project-knowledge/04-people/index.md +@project-knowledge/04-people/manager.md + +Imported summary, if present: + +!`if [ -s scripts/slack/generated/slack_summary.md ]; then cat scripts/slack/generated/slack_summary.md; else echo "No archive summary generated."; fi` + +Imported archive context, if present: + +!`if [ -s scripts/slack/generated/slack_context.jsonl ]; then cat scripts/slack/generated/slack_context.jsonl; else echo "No archive context generated."; fi` + +Instructions: + +- treat the archive as historical evidence +- promote durable project-relevant context automatically when confidence is high +- prefer durable role/person associations, recurring architecture patterns, repeated work-item references, approval/scope history, and process lessons +- create or update `project-knowledge/04-people/*.md` when a human repeatedly affects project flow +- avoid promoting outdated daily status unless it changes current understanding +- update existing memory when the archive clarifies or corrects it +- keep ambiguous or likely outdated facts as archive-only context +- write promoted memory to `project-knowledge/` + +Return: + +1. What was imported +2. Which files were updated +3. Which historical facts were promoted or intentionally left as archive-only context diff --git a/.agents/workflows/communication-sync.md b/.agents/workflows/communication-sync.md new file mode 100644 index 0000000..f2a0247 --- /dev/null +++ b/.agents/workflows/communication-sync.md @@ -0,0 +1,47 @@ +--- +description: Sync live communication context and promote high-confidence memory +--- + +Use the configured live communication connector to fetch fresh evidence and maintain workspace memory automatically. + +Preferred command sources: + +- `AIW_MATTERMOST_SYNC_CMD` +- Fidelity profile alias: `FIDELITY_MATTERMOST_SYNC_CMD` +- workspace fallback: `bash scripts/mattermost/sync.sh` + +Run the connector: + +!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No live communication sync command is configured."; fi` + +Read: + +@core/README.md +@core/memory/operational-memory.md +@core/integrations/communication-model.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/03-context/project.md +@agent-memory/memory/context-maintenance.md + +Fresh communication evidence: + +!`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 communication evidence available."; fi` + +Instructions: + +- if the sync command failed, stop and do not edit workspace memory +- treat connector output as evidence, not automatically as project truth +- promote only explicit, project-relevant, high-confidence facts +- default destination is `project-knowledge/06-daily/$(date +%F).md` +- update `project-knowledge/01-current/current-work.md` only for facts that materially change the active work window +- update `project-knowledge/02-work-items/*.md` for explicit work-item IDs, approved titles, points, scope, and status notes +- keep `project-knowledge/01-current/work-items.md` aligned as the compact summary of active work items +- do not write tooling noise, sync status, or generic chat chatter into project memory +- if a fact is ambiguous, skip it rather than asking what to do + +Return: + +1. What was synchronized +2. Which files were updated +3. Which facts were promoted or intentionally skipped diff --git a/.agents/workflows/copilot-prompt.md b/.agents/workflows/copilot-prompt.md new file mode 100644 index 0000000..2774cc6 --- /dev/null +++ b/.agents/workflows/copilot-prompt.md @@ -0,0 +1,44 @@ +--- +description: Generate a high-quality prompt for GitHub Copilot on the Fidelity development machine +--- + +Generate a prompt that the user can send to GitHub Copilot or another AI assistant on the Fidelity development machine. + +Read: + +@core/README.md +@core/memory/operational-memory.md +@prompts/copilot-prompt.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/03-context/project.md +@agent-memory/workflows/ai-to-ai-prompting.md +@project-knowledge/03-context/ios/index.md +@project-knowledge/03-context/ios/project-swift-guidance.md +@project-knowledge/03-context/systems/index.md +@project-knowledge/03-context/workstreams/index.md + +Active profile, if present: + +!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` + +Detailed active work item files, if available: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +User request: + +$ARGUMENTS + +Instructions: + +- Use `ai-prompt-engineering` and `copilot-prompt-engineering` if available. +- Generate a self-contained prompt for the target AI. +- Include only context relevant to the request. +- Include Jira ID/title when the task maps to an active work item. +- Tell Copilot what to inspect before making assumptions. +- Include constraints, non-goals, expected output, and validation. +- If the user asks for implementation help but the write scope is unclear, generate an investigation/plan prompt rather than a code-change prompt. +- Do not mention this workspace unless explaining that the target AI will not have access to it. + +Return only the final prompt unless the user explicitly asks for commentary. diff --git a/.agents/workflows/fidelity-context.md b/.agents/workflows/fidelity-context.md new file mode 100644 index 0000000..86d246b --- /dev/null +++ b/.agents/workflows/fidelity-context.md @@ -0,0 +1,66 @@ +--- +description: Load Fidelity workspace context for the current session +--- + +Load and internalize the active context for this Fidelity workspace before answering any follow-up questions today. + +Use these files as the baseline context: + +@README.md +@core/README.md +@core/memory/operational-memory.md +@core/integrations/memory-vault-model.md +@core/integrations/communication-model.md +@profiles/fidelity/profile.md +@agent-memory/README.md +@agent-memory/behavior/learning-sessions.md +@agent-memory/behavior/self-maintenance.md +@agent-memory/memory/operational-memory.md +@agent-memory/integrations/memory-interface.md +@agent-memory/integrations/obsidian.md +@agent-memory/integrations/communication-sources.md +@project-knowledge/00-start/start-here.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/07-maps/current-work.md +@project-knowledge/07-maps/fidelity-domain.md +@project-knowledge/07-maps/work-items.md +@project-knowledge/07-maps/people.md +@project-knowledge/03-context/project.md +@project-knowledge/03-context/process/communication.md +@agent-memory/integrations/technical-verification.md +@agent-memory/workflows/ai-to-ai-prompting.md +@project-knowledge/03-context/process/jira-story-rules.md +@agent-memory/workflows/workspace-model.md +@agent-memory/behavior/agent-behavior.md +@agent-memory/memory/promotion-rules.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +Today's date: + +!`date +%F` + +Today's canonical daily note, 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` + +Recent daily notes available: + +!`if [ -d project-knowledge/06-daily ]; then ls -1 project-knowledge/06-daily 2>/dev/null | sort | tail -n 5; else echo "No daily notes directory available."; fi` + +Detailed active work item files, if available: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +Latest Mattermost context, if available: + +!`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` + +Respond with: + +1. Current context +2. Communication risks +3. Missing context to capture today + +Keep the response concise, then wait for the next request. diff --git a/.agents/workflows/index.md b/.agents/workflows/index.md new file mode 100644 index 0000000..55513f4 --- /dev/null +++ b/.agents/workflows/index.md @@ -0,0 +1,45 @@ +# OpenCode Commands Index + +Slash commands available in this workspace. + +--- + +## Generic Commands + +- [Workspace Context](workspace-context.md) +- [Memory Health](memory-health.md) +- [Memory Create](memory-create.md) +- [Communication Sync](communication-sync.md) +- [Archive Import](archive-import.md) +- [AI Prompt](ai-prompt.md) +- [Sync Context](sync-context.md) +- [Log Note](log-note.md) +- [Promote Project Context](promote-project-context.md) +- [Latest Message](latest-message.md) + +--- + +## Communication Commands + +- [Standup](standup.md) +- [Manager Update](manager-update.md) +- [Translate](translate.md) +- [Story Draft](story-draft.md) + +--- + +## Fidelity Compatibility Aliases + +- [Fidelity Context](fidelity-context.md) +- [Mattermost Sync](mattermost-sync.md) +- [Slack Import](slack-import.md) +- [Copilot Prompt](copilot-prompt.md) +- [Swift Help](swift-help.md) + +--- + +## Related + +- [Tooling Map](../../agent-memory/maps/tooling.md) +- [Prompts Index](../../prompts/index.md) +- [Skills Index](../skills/index.md) diff --git a/.agents/workflows/latest-message.md b/.agents/workflows/latest-message.md new file mode 100644 index 0000000..e95618f --- /dev/null +++ b/.agents/workflows/latest-message.md @@ -0,0 +1,40 @@ +--- +description: Force-sync Mattermost and answer from the latest matching message +--- + +Force-refresh Mattermost first, then answer the user's question from the refreshed inbox. + +Use this when the user asks for: + +- the latest or last message +- what Jeff or another person just said +- the latest Mattermost update +- the latest message in `fidelity-preguntas` + +Run sync: + +!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No Mattermost sync command is configured."; fi` + +Read refreshed Mattermost context: + +!`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 after sync."; fi` + +User request: + +$ARGUMENTS + +Instructions: + +- Do not answer from old conversation memory. +- Use only the refreshed Mattermost output above. +- If the user asks for the current manager/stakeholder, filter messages by the profile mapping when visible; for the Fidelity profile, also match `jeff` and `jeff.dewitte`. +- If multiple messages match, return the newest matching message first. +- Include timestamp, channel, sender, and concise summary. +- If the message changes project context, update the appropriate workspace memory after answering, writing to `project-knowledge/` first. +- If sync fails or no refreshed context is available, say that directly and do not infer from stale context. + +Return: + +1. Latest matching message +2. Why it matters +3. Any memory update made diff --git a/.agents/workflows/log-note.md b/.agents/workflows/log-note.md new file mode 100644 index 0000000..a3b49d5 --- /dev/null +++ b/.agents/workflows/log-note.md @@ -0,0 +1,42 @@ +--- +description: Update today's log from rough notes or contextual notes +--- + +Use this command for quick same-day note capture. + +Read: + +@README.md +@core/README.md +@core/memory/operational-memory.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 +@agent-memory/memory/context-maintenance.md + +Today's existing 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` + +Incorporate these new rough notes into today's log: + +$ARGUMENTS + +Instructions: + +- use `workspace-memory-curation` when available +- Update or create `project-knowledge/06-daily/$(date +%F).md` +- Maintain daily-note frontmatter for Obsidian Bases: `date`, `focus`, `work-items`, `blockers`, and `updated` +- Preserve concrete technical meaning +- Capture both technical findings and communication context when relevant +- Keep the log concise but reusable for later standups and manager updates +- If the notes are ambiguous, normalize them without inventing facts +- If a note clearly corrects or sharpens existing current memory, update the corresponding canonical file as well +- If a note reveals durable system, workstream, process, or people context, update the relevant canonical file instead of only appending to the log +- Prefer `sync-context` for broader memory updates; use this command for fast daily capture + +After editing, respond with: + +1. What was added or clarified +2. Whether any broader memory was also updated diff --git a/.agents/workflows/manager-update.md b/.agents/workflows/manager-update.md new file mode 100644 index 0000000..f141b3f --- /dev/null +++ b/.agents/workflows/manager-update.md @@ -0,0 +1,53 @@ +--- +description: Draft or polish a Mattermost update for the current manager or stakeholder +--- + +Draft a concise Mattermost message for the current manager or stakeholder in natural, manager-ready US English. + +Use `professional-communication` when available. + +Read: + +@prompts/manager-update.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/process/communication.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +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, if available: + +!`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: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +User draft or rough notes: + +$ARGUMENTS + +Requirements: + +- Use Context, Observation, Action +- Clarify scope +- Preserve technical meaning +- Rewrite fully when needed so the result sounds like a fluent senior engineer wrote it +- Separate the current issue from unrelated bugs, workarounds, and follow-up work unless the user clearly wants them combined +- Prefer evidence-backed wording over intuition when context includes concrete findings +- Make ownership explicit when relevant: XFlow vs consumer app vs service/configuration vs another framework +- Mention auth state when relevant +- Mention Jira IDs and approved titles when they materially improve clarity +- Do not label something a regression unless the context supports it +- Keep the result short enough for Mattermost + +Return: + +1. Final message +2. One-line note with any assumption you had to make diff --git a/.agents/workflows/mattermost-sync.md b/.agents/workflows/mattermost-sync.md new file mode 100644 index 0000000..cf33cc8 --- /dev/null +++ b/.agents/workflows/mattermost-sync.md @@ -0,0 +1,38 @@ +--- +description: Sync Mattermost context and automatically promote high-confidence project memory +--- + +Use the configured Mattermost sync command to fetch fresh communication context and maintain workspace memory automatically. + +Preferred command sources: + +- `AIW_MATTERMOST_SYNC_CMD` +- Fidelity profile alias: `FIDELITY_MATTERMOST_SYNC_CMD` +- fallback: `bash scripts/mattermost/sync.sh` + +Run the command and use its output as fresh communication context: + +!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No Mattermost sync command is configured."; fi` + +Use this command implicitly when the user asks for the latest or last Mattermost message, especially messages from Jeff or the current manager. + +Then: + +- if the command fails, stop there and do not edit any workspace files +- use `ai/inbox/mattermost-latest.md` if it exists and is non-empty +- otherwise use `scripts/mattermost/generated/mattermost_context.jsonl` if it exists and is non-empty +- apply the memory promotion rules from `agent-memory/memory/promotion-rules.md` +- treat Mattermost output as live communication evidence; the agent decides what becomes promoted memory +- automatically promote explicit, project-relevant, high-confidence facts +- default destination is `project-knowledge/06-daily/$(date +%F).md` +- update `project-knowledge/01-current/current-work.md` only for facts that materially change the current work window +- update `project-knowledge/02-work-items/*.md` for explicit Jira IDs, approved titles, points, scope, and status notes +- keep `project-knowledge/01-current/work-items.md` aligned as the compact summary of active ticket files +- do not write tooling noise, sync status, or generic chat chatter into project memory +- if a fact is ambiguous, skip it rather than asking the user what to do + +Return: + +1. What was synchronized +2. Which files were updated +3. Which facts were promoted or intentionally skipped diff --git a/.agents/workflows/memory-create.md b/.agents/workflows/memory-create.md new file mode 100644 index 0000000..300ddff --- /dev/null +++ b/.agents/workflows/memory-create.md @@ -0,0 +1,43 @@ +--- +description: Create a canonical memory note using the project-agnostic memory interface +--- + +Create a new canonical memory note from a known type. + +Supported types: + +- `daily` +- `work-item` +- `person` +- `decision` +- `system` +- `workstream` +- `meeting-note` + +User request: + +$ARGUMENTS + +Read: + +@core/integrations/memory-vault-model.md +@agent-memory/workflows/workspace-architecture.md +@project-knowledge/09-templates/work-item.md +@project-knowledge/09-templates/person.md +@project-knowledge/09-templates/decision.md +@project-knowledge/09-templates/system.md +@project-knowledge/09-templates/workstream.md + +Instructions: + +- Parse the requested type, slug, and title from `$ARGUMENTS`. +- Use `bash scripts/memory/memory.sh create [title]` when type and slug are clear. +- If type or slug is not clear, do not guess. Explain the expected format. +- After creation, inspect the generated file and update metadata/content if the user provided enough context. +- Keep the note in the canonical folder selected by the memory interface. + +Return: + +1. Created file +2. Any metadata/content refined +3. Any missing details the user may want to add diff --git a/.agents/workflows/memory-health.md b/.agents/workflows/memory-health.md new file mode 100644 index 0000000..9069a08 --- /dev/null +++ b/.agents/workflows/memory-health.md @@ -0,0 +1,27 @@ +--- +description: Check canonical memory health and Obsidian adapter status +--- + +Run a lightweight health check for canonical project knowledge. + +Read: + +@core/integrations/memory-vault-model.md +@core/integrations/obsidian-model.md +@agent-memory/workflows/workspace-architecture.md + +Run: + +!`bash scripts/memory/memory.sh health` + +Structured views: + +!`for base in work-items people decisions daily systems workstreams; do echo "\n## $base"; bash scripts/memory/memory.sh base-query "$base" paths 2>/dev/null || bash scripts/memory/memory.sh base-query "$base" 2>/dev/null || true; done` + +Respond with: + +1. Health status +2. Any issues that should be fixed now +3. Any optional Obsidian-only improvements + +Do not modify project memory unless the user explicitly asks for cleanup. diff --git a/.agents/workflows/promote-project-context.md b/.agents/workflows/promote-project-context.md new file mode 100644 index 0000000..7ddaf8b --- /dev/null +++ b/.agents/workflows/promote-project-context.md @@ -0,0 +1,64 @@ +--- +description: Manually promote confirmed project facts into Fidelity workspace memory +--- + +Use this only when you want an explicit manual promotion pass. + +Read: + +@core/README.md +@core/memory/operational-memory.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/systems/index.md +@project-knowledge/03-context/workstreams/index.md +@project-knowledge/03-context/workstreams/flow-page-references.md +@project-knowledge/03-context/process/index.md + +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` + +Current Mattermost inbox, if present: + +!`if [ -f ai/inbox/mattermost-latest.md ]; then cat ai/inbox/mattermost-latest.md; else echo "No Mattermost inbox file is available."; fi` + +Generated Mattermost context, if present: + +!`if [ -s scripts/mattermost/generated/mattermost_context.jsonl ]; then cat scripts/mattermost/generated/mattermost_context.jsonl; else echo "No generated Mattermost context is available."; fi` + +User direction or facts to promote: + +$ARGUMENTS + +Instructions: + +- Promote only confirmed project-relevant facts +- Ignore tooling noise and sync status +- Update the smallest correct set of files among: + - `project-knowledge/06-daily/$(date +%F).md` + - `project-knowledge/01-current/current-work.md` + - `project-knowledge/02-work-items/*.md` + - `project-knowledge/01-current/work-items.md` + - `project-knowledge/03-context/project.md` + - `project-knowledge/03-context/systems/*.md` + - `project-knowledge/03-context/workstreams/*.md` + - `project-knowledge/03-context/process/*.md` + - `project-knowledge/05-decisions/*.md` + - `.opencode/commands/*.md` when command behavior needs to change + - `prompts/*.md` when a reusable output template needs to change + - `.opencode/agents/*.md` or `AGENTS.md` when default agent behavior needs to change + - `.opencode/skills/*/SKILL.md` when a specialized workflow needs to change + - `project-knowledge/00-start/*.md` when durable project onboarding guidance needs to change + - `agent-memory/**/*.md` when agent learning, promotion, verification, or self-maintenance behavior needs to change +- Prefer concrete project updates over broad summaries +- If a fact is still ambiguous, do not promote it +- If the promoted fact is a reusable behavior correction, do not leave it only in a daily log; update the operational file that controls future behavior +- Use this command when you want a deliberate manual pass beyond the agent's default automatic memory maintenance + +Return: + +1. Updated files +2. Promoted project facts +3. Remaining uncertainty diff --git a/.agents/workflows/slack-import.md b/.agents/workflows/slack-import.md new file mode 100644 index 0000000..7e9a462 --- /dev/null +++ b/.agents/workflows/slack-import.md @@ -0,0 +1,79 @@ +--- +description: Import a historical Slack export and refine workspace memory from it +--- + +Use a Slack export as a historical context source for the workspace. + +Interpret this as historical recovery, not as current truth and not as model training. + +Inputs: + +- `$ARGUMENTS` may contain an export path, channel names, or date filters +- if no explicit path is given in the arguments, use `AIW_SLACK_EXPORT_PATH` when available +- Fidelity profile alias: `FIDELITY_SLACK_EXPORT_PATH` +- otherwise, if `archives/slack/export/` exists, use it as the default import source +- if no channels are specified, auto-detect channels using `AIW_CHANNEL_PREFIX` +- Fidelity default prefix: `fidelity` +- if no message limit is specified, auto-tune message selection based on archive size +- if no date range is specified, do an initial full-history sweep across the detected `fidelity*` channels +- preserve broad coverage across years and channels while still prioritizing high-signal messages + +First, run the importer: + +!`prefix="${AIW_CHANNEL_PREFIX:-fidelity}"; if [ -n "$ARGUMENTS" ]; then python3 scripts/slack/import_slack_export.py $ARGUMENTS; elif [ -n "$AIW_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$AIW_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -n "$FIDELITY_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$FIDELITY_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -d archives/slack/export ]; then python3 scripts/slack/import_slack_export.py --export-path archives/slack/export --channel-prefix "$prefix"; else echo "Provide Slack import arguments, set AIW_SLACK_EXPORT_PATH, set FIDELITY_SLACK_EXPORT_PATH, or place an extracted export in archives/slack/export."; fi` + +Read: + +@core/README.md +@core/memory/operational-memory.md +@core/integrations/communication-model.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/systems/index.md +@project-knowledge/03-context/workstreams/index.md +@project-knowledge/03-context/process/index.md +@project-knowledge/04-people/index.md +@project-knowledge/04-people/manager.md + +Imported summary, if present: + +!`if [ -s scripts/slack/generated/slack_summary.md ]; then cat scripts/slack/generated/slack_summary.md; else echo "No Slack summary generated."; fi` + +Imported Slack context, if present: + +!`if [ -s scripts/slack/generated/slack_context.jsonl ]; then cat scripts/slack/generated/slack_context.jsonl; else echo "No Slack context generated."; fi` + +Instructions: + +- treat the Slack archive as historical evidence, not promoted memory by itself +- assume this may be a large multi-year export +- assume the first import should preserve evidence from the beginning of the project, not just recent history +- promote durable project-relevant context automatically when confidence is high +- prefer promoting: + - repeated Jira IDs and titles still relevant to current understanding + - durable role/person associations + - recurring architecture or debugging patterns + - past approvals or decisions that still matter +- create or update `project-knowledge/04-people/*.md` when the archive shows a human repeatedly contributing across channels, years, or high-signal technical/process discussions +- store people conservatively: + - exact role only when explicitly supported by the archive + - otherwise store collaboration pattern, communication style, and project relationship +- actively look for: + - Jira IDs plus explicit titles, sizing, and scope changes + - repeated architecture themes around XFlow, SwiftUI, REST, GraphQL, auth, and entry-point behavior + - ownership or responsibility boundaries between framework and consuming app teams + - recurring pipeline or dependency failures that shaped project work + - named people who repeatedly drive approvals, technical framing, or debugging direction +- prioritize high-signal messages such as Jira references, approvals, scope changes, root-cause notes, points, and persistent technical constraints +- favor messages that help reconstruct project history across multiple years, not just the newest ones +- avoid promoting outdated daily status unless it changes current understanding +- update existing memory when the archive clarifies or corrects it +- if historical facts are ambiguous or likely outdated, summarize them as archived context instead of promoting them +- write promoted memory to `project-knowledge/` + +Return: + +1. What was imported +2. Which files were updated +3. Which historical facts were promoted or intentionally left as archive-only context diff --git a/.agents/workflows/standup.md b/.agents/workflows/standup.md new file mode 100644 index 0000000..fc5f96a --- /dev/null +++ b/.agents/workflows/standup.md @@ -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 diff --git a/.agents/workflows/story-draft.md b/.agents/workflows/story-draft.md new file mode 100644 index 0000000..e4984b2 --- /dev/null +++ b/.agents/workflows/story-draft.md @@ -0,0 +1,67 @@ +--- +description: Draft a Jira story proposal with Fidelity-ready context and acceptance criteria +--- + +Draft a future Jira story from rough notes, findings, or follow-up ideas. + +This command should optimize for: + +- professional story wording +- explicit scope +- useful acceptance criteria +- clear ownership framing +- natural US English that the current manager or stakeholder can reuse or forward without rewriting + +Input notes or rough idea: + +$ARGUMENTS + +Read: + +@core/README.md +@core/memory/operational-memory.md +@prompts/story-draft.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/process/communication.md +@project-knowledge/03-context/process/jira-story-rules.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +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, if available: + +!`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: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +Requirements: + +- Use `professional-communication` when available. +- Preserve the exact technical meaning of the input +- Rewrite fully when needed so the output sounds like a fluent senior engineer wrote it +- Choose the most appropriate story framing: bug, enhancement, spike, task, or follow-up +- Keep the title short, concrete, and Jira-ready +- Make the description specific enough that another engineer can understand the intended work +- Separate current problem, root-cause suspicion, workaround, and follow-up work when relevant +- Do not overstate certainty; if something is still a hypothesis, label it clearly +- Make ownership explicit when helpful: XFlow vs consumer app vs service/configuration vs other framework +- Acceptance criteria should be testable and scoped to the proposed story +- If the story looks too large or too ambiguous, say so explicitly and suggest spike framing instead +- If useful, include a short note about dependencies, blockers, or coordination needed +- If the story touches consumer validation or release propagation, reflect that explicitly in the description or notes + +Return: + +1. Suggested story type +2. Jira-ready title +3. Description +4. Acceptance criteria +5. Optional notes on dependencies / blockers / sizing concerns diff --git a/.agents/workflows/swift-help.md b/.agents/workflows/swift-help.md new file mode 100644 index 0000000..5fcae50 --- /dev/null +++ b/.agents/workflows/swift-help.md @@ -0,0 +1,35 @@ +--- +description: Answer Swift or iOS programming questions with Fidelity/XFlow context +--- + +Answer the user's Swift/iOS programming question using current iOS practices and this workspace's Fidelity context. + +Read: + +@project-knowledge/03-context/ios/index.md +@project-knowledge/03-context/ios/current-practices.md +@project-knowledge/03-context/ios/project-swift-guidance.md +@agent-memory/integrations/technical-verification.md +@project-knowledge/03-context/project.md +@project-knowledge/03-context/systems/index.md +@project-knowledge/03-context/workstreams/index.md +@project-knowledge/01-current/work-items.md + +User question: + +$ARGUMENTS + +Instructions: + +- Use the `ios-swift-answering` skill if available. +- Use `swiftui-xflow-review` if the question touches SwiftUI, XFlow, UIKit bridge removal, modal presentation, lifecycle, or backend-driven UI. +- Use `ios-testing-strategy` if the question touches tests or validation. +- If current Apple API, Swift, CocoaPods, SPM, Xcode, CI/build, or testing behavior matters, verify against official/primary documentation before making strong claims. +- Contextualize the answer to Fidelity only when it materially changes the recommendation. +- Separate current best practice from project-safe recommendation when they differ. + +Return: + +1. Recommendation +2. Project-specific caveats +3. Validation or follow-up checks diff --git a/.agents/workflows/sync-context.md b/.agents/workflows/sync-context.md new file mode 100644 index 0000000..fe09812 --- /dev/null +++ b/.agents/workflows/sync-context.md @@ -0,0 +1,65 @@ +--- +description: Update workspace memory from new facts, corrections, or contextual notes +--- + +Use this command when new information should become part of the persistent workspace context. + +Read: + +@README.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/systems/index.md +@project-knowledge/03-context/workstreams/index.md +@project-knowledge/03-context/workstreams/flow-page-references.md +@agent-memory/memory/context-maintenance.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +Today's existing 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` + +New information to incorporate: + +$ARGUMENTS + +Instructions: + +- use `workspace-memory-curation` when available +- Treat direct user corrections and learning-session updates as memory sources. +- For learning-session updates, prefer durable project understanding over transient ticket status. +- Route durable learning to architecture/process/system/workstream notes; route only truly current operational state to `project-knowledge/01-current/` or `project-knowledge/06-daily/`. +- If the new information corrects the agent's uncertainty handling or recurring behavior, update the command, prompt, agent, skill, or process rule that controls that behavior. +- Decide whether the new information belongs in: + - today's daily note: `project-knowledge/06-daily/$(date +%F).md` + - current work: `project-knowledge/01-current/current-work.md` + - work items: `project-knowledge/02-work-items/*.md` + - active work summary: `project-knowledge/01-current/work-items.md` + - project overview: `project-knowledge/03-context/project.md` + - systems: `project-knowledge/03-context/systems/` + - workstreams: `project-knowledge/03-context/workstreams/` + - process: `project-knowledge/03-context/process/` + - manager mapping: `project-knowledge/04-people/manager.md` + - people roster: `project-knowledge/04-people/index.md` + - people notes: `project-knowledge/04-people/*.md` + - decisions: `project-knowledge/05-decisions/` + - `.agents/workflows/*.md` + - `.agents/rules/*.md` + - `prompts/*.md` +- Update the appropriate files directly +- When updating a canonical project note, maintain frontmatter properties used by Obsidian Bases, including `updated`, `systems`, `workstreams`, `people`, `related`, `focus`, `work-items`, and `blockers` when applicable +- If an existing statement became stale, replace or refine it +- If the new information changes how this workspace should behave, update the linked command, prompt, agent, skill, or knowledge file that enforces that behavior +- Do not invent missing facts +- Keep uncertain information in the daily log instead of promoting it to stable context +- Do not ask for promotion confirmation when the correct destination is already clear +- Prefer correcting canonical memory over appending duplicate summaries + +After editing, respond with: + +1. Updated files +2. What changed in the persistent context +3. Any uncertainty that remains diff --git a/.agents/workflows/translate.md b/.agents/workflows/translate.md new file mode 100644 index 0000000..11586c5 --- /dev/null +++ b/.agents/workflows/translate.md @@ -0,0 +1,31 @@ +--- +description: Rewrite rough engineering notes into natural Mattermost-ready US English +--- + +Rewrite and tighten the following rough notes into concise, natural, Mattermost-ready US English. + +Use `professional-communication` when available. + +Do not translate literally. +Rewrite fully when needed so the result sounds like a fluent senior engineer wrote it. + +If the notes mix multiple issues, separate the main issue from unrelated bugs or follow-up work unless the user clearly wants them combined. + +$ARGUMENTS + +Read: + +@prompts/mattermost-translation.md +@project-knowledge/03-context/project.md +@project-knowledge/03-context/process/communication.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +If relevant, use today's log for context: + +!`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` + +Return: + +1. Clean message +2. Short assumptions note diff --git a/.agents/workflows/workspace-context.md b/.agents/workflows/workspace-context.md new file mode 100644 index 0000000..d36c12e --- /dev/null +++ b/.agents/workflows/workspace-context.md @@ -0,0 +1,73 @@ +--- +description: Load reusable AI workspace core plus the active project profile +--- + +Load and internalize the reusable workspace core and the active project context before answering follow-up questions. + +Read core: + +@core/README.md +@core/memory/operational-memory.md +@core/integrations/memory-vault-model.md +@core/integrations/communication-model.md +@core/profiles/create-project-profile.md +@agent-memory/README.md +@agent-memory/behavior/learning-sessions.md +@agent-memory/behavior/self-maintenance.md +@agent-memory/memory/operational-memory.md +@agent-memory/integrations/memory-interface.md +@agent-memory/integrations/obsidian.md +@agent-memory/integrations/communication-sources.md + +Read active workspace memory: + +@README.md +@project-knowledge/00-start/start-here.md +@project-knowledge/00-start/onboarding.md +@project-knowledge/01-current/current-work.md +@project-knowledge/01-current/work-items.md +@project-knowledge/07-maps/current-work.md +@project-knowledge/07-maps/fidelity-domain.md +@project-knowledge/07-maps/work-items.md +@project-knowledge/07-maps/people.md +@project-knowledge/03-context/project.md +@project-knowledge/03-context/process/communication.md +@agent-memory/integrations/technical-verification.md +@agent-memory/memory/context-maintenance.md +@agent-memory/workflows/workspace-model.md +@agent-memory/behavior/agent-behavior.md +@agent-memory/memory/promotion-rules.md +@project-knowledge/04-people/manager.md +@project-knowledge/04-people/index.md + +Read active profile, preferring the configured profile and falling back to Fidelity: + +!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` + +Today's date: + +!`date +%F` + +Today's canonical daily note, 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` + +Recent daily notes available: + +!`if [ -d project-knowledge/06-daily ]; then ls -1 project-knowledge/06-daily 2>/dev/null | sort | tail -n 5; else echo "No daily notes directory available."; fi` + +Detailed active work item files, if available: + +!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` + +Latest communication inbox, if available: + +!`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 live communication context available."; fi` + +Respond with: + +1. Current context +2. Communication risks +3. Missing context to capture today + +Keep the response concise, then wait for the next request. diff --git a/.opencode/commands/ai-prompt.md b/.opencode/commands/ai-prompt.md deleted file mode 100644 index 7102c10..0000000 --- a/.opencode/commands/ai-prompt.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -description: Generate a self-contained prompt for another AI assistant ---- - -Generate a high-quality prompt for another AI assistant that may not have access to this workspace memory. - -Read: - -@core/README.md -@core/memory/operational-memory.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/03-context/project.md -@agent-memory/workflows/ai-to-ai-prompting.md - -Read active profile, if present: - -!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` - -Relevant active work item files, if available: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -User request: - -$ARGUMENTS - -Instructions: - -- use `ai-prompt-engineering` when available -- make the prompt self-contained -- include only relevant project context -- tell the target AI what to inspect before changing code or producing conclusions -- include constraints, non-goals, expected output, and validation expectations -- include work-item IDs and approved titles when relevant -- do not assume the target AI can read this workspace -- do not invent file paths if the implementation repository is not available here - -Return only the prompt unless the user asks for explanation. diff --git a/.opencode/commands/ai-prompt.md b/.opencode/commands/ai-prompt.md new file mode 120000 index 0000000..3f7c0db --- /dev/null +++ b/.opencode/commands/ai-prompt.md @@ -0,0 +1 @@ +../../.agents/workflows/ai-prompt.md \ No newline at end of file diff --git a/.opencode/commands/archive-import.md b/.opencode/commands/archive-import.md deleted file mode 100644 index e2d2909..0000000 --- a/.opencode/commands/archive-import.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -description: Import a historical communication archive and refine workspace memory ---- - -Use a historical communication export as archive evidence for the workspace. - -Interpret this as historical recovery, not as current truth and not as model training. - -Inputs: - -- `$ARGUMENTS` may contain an export path, channel names, or date filters -- if no explicit path is given, use `AIW_SLACK_EXPORT_PATH` when available -- Fidelity profile alias: `FIDELITY_SLACK_EXPORT_PATH` -- otherwise, if `archives/slack/export/` exists, use it as the default import source -- if no channels are specified, auto-detect channels using `AIW_CHANNEL_PREFIX` -- Fidelity default prefix: `fidelity` - -Run the importer: - -!`prefix="${AIW_CHANNEL_PREFIX:-fidelity}"; if [ -n "$ARGUMENTS" ]; then python3 scripts/slack/import_slack_export.py $ARGUMENTS; elif [ -n "$AIW_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$AIW_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -n "$FIDELITY_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$FIDELITY_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -d archives/slack/export ]; then python3 scripts/slack/import_slack_export.py --export-path archives/slack/export --channel-prefix "$prefix"; else echo "Provide archive import arguments, set AIW_SLACK_EXPORT_PATH, set FIDELITY_SLACK_EXPORT_PATH, or place an extracted export in archives/slack/export."; fi` - -Read: - -@core/README.md -@core/memory/operational-memory.md -@core/integrations/communication-model.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/03-context/project.md -@agent-memory/memory/context-maintenance.md -@project-knowledge/04-people/index.md -@project-knowledge/04-people/manager.md - -Imported summary, if present: - -!`if [ -s scripts/slack/generated/slack_summary.md ]; then cat scripts/slack/generated/slack_summary.md; else echo "No archive summary generated."; fi` - -Imported archive context, if present: - -!`if [ -s scripts/slack/generated/slack_context.jsonl ]; then cat scripts/slack/generated/slack_context.jsonl; else echo "No archive context generated."; fi` - -Instructions: - -- treat the archive as historical evidence -- promote durable project-relevant context automatically when confidence is high -- prefer durable role/person associations, recurring architecture patterns, repeated work-item references, approval/scope history, and process lessons -- create or update `project-knowledge/04-people/*.md` when a human repeatedly affects project flow -- avoid promoting outdated daily status unless it changes current understanding -- update existing memory when the archive clarifies or corrects it -- keep ambiguous or likely outdated facts as archive-only context -- write promoted memory to `project-knowledge/` - -Return: - -1. What was imported -2. Which files were updated -3. Which historical facts were promoted or intentionally left as archive-only context diff --git a/.opencode/commands/archive-import.md b/.opencode/commands/archive-import.md new file mode 120000 index 0000000..29ec755 --- /dev/null +++ b/.opencode/commands/archive-import.md @@ -0,0 +1 @@ +../../.agents/workflows/archive-import.md \ No newline at end of file diff --git a/.opencode/commands/communication-sync.md b/.opencode/commands/communication-sync.md deleted file mode 100644 index f2a0247..0000000 --- a/.opencode/commands/communication-sync.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -description: Sync live communication context and promote high-confidence memory ---- - -Use the configured live communication connector to fetch fresh evidence and maintain workspace memory automatically. - -Preferred command sources: - -- `AIW_MATTERMOST_SYNC_CMD` -- Fidelity profile alias: `FIDELITY_MATTERMOST_SYNC_CMD` -- workspace fallback: `bash scripts/mattermost/sync.sh` - -Run the connector: - -!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No live communication sync command is configured."; fi` - -Read: - -@core/README.md -@core/memory/operational-memory.md -@core/integrations/communication-model.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/03-context/project.md -@agent-memory/memory/context-maintenance.md - -Fresh communication evidence: - -!`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 communication evidence available."; fi` - -Instructions: - -- if the sync command failed, stop and do not edit workspace memory -- treat connector output as evidence, not automatically as project truth -- promote only explicit, project-relevant, high-confidence facts -- default destination is `project-knowledge/06-daily/$(date +%F).md` -- update `project-knowledge/01-current/current-work.md` only for facts that materially change the active work window -- update `project-knowledge/02-work-items/*.md` for explicit work-item IDs, approved titles, points, scope, and status notes -- keep `project-knowledge/01-current/work-items.md` aligned as the compact summary of active work items -- do not write tooling noise, sync status, or generic chat chatter into project memory -- if a fact is ambiguous, skip it rather than asking what to do - -Return: - -1. What was synchronized -2. Which files were updated -3. Which facts were promoted or intentionally skipped diff --git a/.opencode/commands/communication-sync.md b/.opencode/commands/communication-sync.md new file mode 120000 index 0000000..5d5e66a --- /dev/null +++ b/.opencode/commands/communication-sync.md @@ -0,0 +1 @@ +../../.agents/workflows/communication-sync.md \ No newline at end of file diff --git a/.opencode/commands/copilot-prompt.md b/.opencode/commands/copilot-prompt.md deleted file mode 100644 index 2774cc6..0000000 --- a/.opencode/commands/copilot-prompt.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -description: Generate a high-quality prompt for GitHub Copilot on the Fidelity development machine ---- - -Generate a prompt that the user can send to GitHub Copilot or another AI assistant on the Fidelity development machine. - -Read: - -@core/README.md -@core/memory/operational-memory.md -@prompts/copilot-prompt.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/03-context/project.md -@agent-memory/workflows/ai-to-ai-prompting.md -@project-knowledge/03-context/ios/index.md -@project-knowledge/03-context/ios/project-swift-guidance.md -@project-knowledge/03-context/systems/index.md -@project-knowledge/03-context/workstreams/index.md - -Active profile, if present: - -!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` - -Detailed active work item files, if available: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -User request: - -$ARGUMENTS - -Instructions: - -- Use `ai-prompt-engineering` and `copilot-prompt-engineering` if available. -- Generate a self-contained prompt for the target AI. -- Include only context relevant to the request. -- Include Jira ID/title when the task maps to an active work item. -- Tell Copilot what to inspect before making assumptions. -- Include constraints, non-goals, expected output, and validation. -- If the user asks for implementation help but the write scope is unclear, generate an investigation/plan prompt rather than a code-change prompt. -- Do not mention this workspace unless explaining that the target AI will not have access to it. - -Return only the final prompt unless the user explicitly asks for commentary. diff --git a/.opencode/commands/copilot-prompt.md b/.opencode/commands/copilot-prompt.md new file mode 120000 index 0000000..4c05b1f --- /dev/null +++ b/.opencode/commands/copilot-prompt.md @@ -0,0 +1 @@ +../../.agents/workflows/copilot-prompt.md \ No newline at end of file diff --git a/.opencode/commands/fidelity-context.md b/.opencode/commands/fidelity-context.md deleted file mode 100644 index 86d246b..0000000 --- a/.opencode/commands/fidelity-context.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -description: Load Fidelity workspace context for the current session ---- - -Load and internalize the active context for this Fidelity workspace before answering any follow-up questions today. - -Use these files as the baseline context: - -@README.md -@core/README.md -@core/memory/operational-memory.md -@core/integrations/memory-vault-model.md -@core/integrations/communication-model.md -@profiles/fidelity/profile.md -@agent-memory/README.md -@agent-memory/behavior/learning-sessions.md -@agent-memory/behavior/self-maintenance.md -@agent-memory/memory/operational-memory.md -@agent-memory/integrations/memory-interface.md -@agent-memory/integrations/obsidian.md -@agent-memory/integrations/communication-sources.md -@project-knowledge/00-start/start-here.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/07-maps/current-work.md -@project-knowledge/07-maps/fidelity-domain.md -@project-knowledge/07-maps/work-items.md -@project-knowledge/07-maps/people.md -@project-knowledge/03-context/project.md -@project-knowledge/03-context/process/communication.md -@agent-memory/integrations/technical-verification.md -@agent-memory/workflows/ai-to-ai-prompting.md -@project-knowledge/03-context/process/jira-story-rules.md -@agent-memory/workflows/workspace-model.md -@agent-memory/behavior/agent-behavior.md -@agent-memory/memory/promotion-rules.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -Today's date: - -!`date +%F` - -Today's canonical daily note, 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` - -Recent daily notes available: - -!`if [ -d project-knowledge/06-daily ]; then ls -1 project-knowledge/06-daily 2>/dev/null | sort | tail -n 5; else echo "No daily notes directory available."; fi` - -Detailed active work item files, if available: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -Latest Mattermost context, if available: - -!`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` - -Respond with: - -1. Current context -2. Communication risks -3. Missing context to capture today - -Keep the response concise, then wait for the next request. diff --git a/.opencode/commands/fidelity-context.md b/.opencode/commands/fidelity-context.md new file mode 120000 index 0000000..383ffce --- /dev/null +++ b/.opencode/commands/fidelity-context.md @@ -0,0 +1 @@ +../../.agents/workflows/fidelity-context.md \ No newline at end of file diff --git a/.opencode/commands/index.md b/.opencode/commands/index.md deleted file mode 100644 index 55513f4..0000000 --- a/.opencode/commands/index.md +++ /dev/null @@ -1,45 +0,0 @@ -# OpenCode Commands Index - -Slash commands available in this workspace. - ---- - -## Generic Commands - -- [Workspace Context](workspace-context.md) -- [Memory Health](memory-health.md) -- [Memory Create](memory-create.md) -- [Communication Sync](communication-sync.md) -- [Archive Import](archive-import.md) -- [AI Prompt](ai-prompt.md) -- [Sync Context](sync-context.md) -- [Log Note](log-note.md) -- [Promote Project Context](promote-project-context.md) -- [Latest Message](latest-message.md) - ---- - -## Communication Commands - -- [Standup](standup.md) -- [Manager Update](manager-update.md) -- [Translate](translate.md) -- [Story Draft](story-draft.md) - ---- - -## Fidelity Compatibility Aliases - -- [Fidelity Context](fidelity-context.md) -- [Mattermost Sync](mattermost-sync.md) -- [Slack Import](slack-import.md) -- [Copilot Prompt](copilot-prompt.md) -- [Swift Help](swift-help.md) - ---- - -## Related - -- [Tooling Map](../../agent-memory/maps/tooling.md) -- [Prompts Index](../../prompts/index.md) -- [Skills Index](../skills/index.md) diff --git a/.opencode/commands/index.md b/.opencode/commands/index.md new file mode 120000 index 0000000..76867d7 --- /dev/null +++ b/.opencode/commands/index.md @@ -0,0 +1 @@ +../../.agents/workflows/index.md \ No newline at end of file diff --git a/.opencode/commands/latest-message.md b/.opencode/commands/latest-message.md deleted file mode 100644 index e95618f..0000000 --- a/.opencode/commands/latest-message.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -description: Force-sync Mattermost and answer from the latest matching message ---- - -Force-refresh Mattermost first, then answer the user's question from the refreshed inbox. - -Use this when the user asks for: - -- the latest or last message -- what Jeff or another person just said -- the latest Mattermost update -- the latest message in `fidelity-preguntas` - -Run sync: - -!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No Mattermost sync command is configured."; fi` - -Read refreshed Mattermost context: - -!`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 after sync."; fi` - -User request: - -$ARGUMENTS - -Instructions: - -- Do not answer from old conversation memory. -- Use only the refreshed Mattermost output above. -- If the user asks for the current manager/stakeholder, filter messages by the profile mapping when visible; for the Fidelity profile, also match `jeff` and `jeff.dewitte`. -- If multiple messages match, return the newest matching message first. -- Include timestamp, channel, sender, and concise summary. -- If the message changes project context, update the appropriate workspace memory after answering, writing to `project-knowledge/` first. -- If sync fails or no refreshed context is available, say that directly and do not infer from stale context. - -Return: - -1. Latest matching message -2. Why it matters -3. Any memory update made diff --git a/.opencode/commands/latest-message.md b/.opencode/commands/latest-message.md new file mode 120000 index 0000000..f6ff519 --- /dev/null +++ b/.opencode/commands/latest-message.md @@ -0,0 +1 @@ +../../.agents/workflows/latest-message.md \ No newline at end of file diff --git a/.opencode/commands/log-note.md b/.opencode/commands/log-note.md deleted file mode 100644 index a3b49d5..0000000 --- a/.opencode/commands/log-note.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -description: Update today's log from rough notes or contextual notes ---- - -Use this command for quick same-day note capture. - -Read: - -@README.md -@core/README.md -@core/memory/operational-memory.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 -@agent-memory/memory/context-maintenance.md - -Today's existing 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` - -Incorporate these new rough notes into today's log: - -$ARGUMENTS - -Instructions: - -- use `workspace-memory-curation` when available -- Update or create `project-knowledge/06-daily/$(date +%F).md` -- Maintain daily-note frontmatter for Obsidian Bases: `date`, `focus`, `work-items`, `blockers`, and `updated` -- Preserve concrete technical meaning -- Capture both technical findings and communication context when relevant -- Keep the log concise but reusable for later standups and manager updates -- If the notes are ambiguous, normalize them without inventing facts -- If a note clearly corrects or sharpens existing current memory, update the corresponding canonical file as well -- If a note reveals durable system, workstream, process, or people context, update the relevant canonical file instead of only appending to the log -- Prefer `sync-context` for broader memory updates; use this command for fast daily capture - -After editing, respond with: - -1. What was added or clarified -2. Whether any broader memory was also updated diff --git a/.opencode/commands/log-note.md b/.opencode/commands/log-note.md new file mode 120000 index 0000000..0c697b6 --- /dev/null +++ b/.opencode/commands/log-note.md @@ -0,0 +1 @@ +../../.agents/workflows/log-note.md \ No newline at end of file diff --git a/.opencode/commands/manager-update.md b/.opencode/commands/manager-update.md deleted file mode 100644 index f141b3f..0000000 --- a/.opencode/commands/manager-update.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: Draft or polish a Mattermost update for the current manager or stakeholder ---- - -Draft a concise Mattermost message for the current manager or stakeholder in natural, manager-ready US English. - -Use `professional-communication` when available. - -Read: - -@prompts/manager-update.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/process/communication.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -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, if available: - -!`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: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -User draft or rough notes: - -$ARGUMENTS - -Requirements: - -- Use Context, Observation, Action -- Clarify scope -- Preserve technical meaning -- Rewrite fully when needed so the result sounds like a fluent senior engineer wrote it -- Separate the current issue from unrelated bugs, workarounds, and follow-up work unless the user clearly wants them combined -- Prefer evidence-backed wording over intuition when context includes concrete findings -- Make ownership explicit when relevant: XFlow vs consumer app vs service/configuration vs another framework -- Mention auth state when relevant -- Mention Jira IDs and approved titles when they materially improve clarity -- Do not label something a regression unless the context supports it -- Keep the result short enough for Mattermost - -Return: - -1. Final message -2. One-line note with any assumption you had to make diff --git a/.opencode/commands/manager-update.md b/.opencode/commands/manager-update.md new file mode 120000 index 0000000..15f627a --- /dev/null +++ b/.opencode/commands/manager-update.md @@ -0,0 +1 @@ +../../.agents/workflows/manager-update.md \ No newline at end of file diff --git a/.opencode/commands/mattermost-sync.md b/.opencode/commands/mattermost-sync.md deleted file mode 100644 index cf33cc8..0000000 --- a/.opencode/commands/mattermost-sync.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: Sync Mattermost context and automatically promote high-confidence project memory ---- - -Use the configured Mattermost sync command to fetch fresh communication context and maintain workspace memory automatically. - -Preferred command sources: - -- `AIW_MATTERMOST_SYNC_CMD` -- Fidelity profile alias: `FIDELITY_MATTERMOST_SYNC_CMD` -- fallback: `bash scripts/mattermost/sync.sh` - -Run the command and use its output as fresh communication context: - -!`if [ -n "$AIW_MATTERMOST_SYNC_CMD" ]; then bash -lc "$AIW_MATTERMOST_SYNC_CMD"; elif [ -n "$FIDELITY_MATTERMOST_SYNC_CMD" ]; then bash -lc "$FIDELITY_MATTERMOST_SYNC_CMD"; elif [ -f scripts/mattermost/sync.sh ]; then bash scripts/mattermost/sync.sh; else echo "No Mattermost sync command is configured."; fi` - -Use this command implicitly when the user asks for the latest or last Mattermost message, especially messages from Jeff or the current manager. - -Then: - -- if the command fails, stop there and do not edit any workspace files -- use `ai/inbox/mattermost-latest.md` if it exists and is non-empty -- otherwise use `scripts/mattermost/generated/mattermost_context.jsonl` if it exists and is non-empty -- apply the memory promotion rules from `agent-memory/memory/promotion-rules.md` -- treat Mattermost output as live communication evidence; the agent decides what becomes promoted memory -- automatically promote explicit, project-relevant, high-confidence facts -- default destination is `project-knowledge/06-daily/$(date +%F).md` -- update `project-knowledge/01-current/current-work.md` only for facts that materially change the current work window -- update `project-knowledge/02-work-items/*.md` for explicit Jira IDs, approved titles, points, scope, and status notes -- keep `project-knowledge/01-current/work-items.md` aligned as the compact summary of active ticket files -- do not write tooling noise, sync status, or generic chat chatter into project memory -- if a fact is ambiguous, skip it rather than asking the user what to do - -Return: - -1. What was synchronized -2. Which files were updated -3. Which facts were promoted or intentionally skipped diff --git a/.opencode/commands/mattermost-sync.md b/.opencode/commands/mattermost-sync.md new file mode 120000 index 0000000..902e5c4 --- /dev/null +++ b/.opencode/commands/mattermost-sync.md @@ -0,0 +1 @@ +../../.agents/workflows/mattermost-sync.md \ No newline at end of file diff --git a/.opencode/commands/memory-create.md b/.opencode/commands/memory-create.md deleted file mode 100644 index 300ddff..0000000 --- a/.opencode/commands/memory-create.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -description: Create a canonical memory note using the project-agnostic memory interface ---- - -Create a new canonical memory note from a known type. - -Supported types: - -- `daily` -- `work-item` -- `person` -- `decision` -- `system` -- `workstream` -- `meeting-note` - -User request: - -$ARGUMENTS - -Read: - -@core/integrations/memory-vault-model.md -@agent-memory/workflows/workspace-architecture.md -@project-knowledge/09-templates/work-item.md -@project-knowledge/09-templates/person.md -@project-knowledge/09-templates/decision.md -@project-knowledge/09-templates/system.md -@project-knowledge/09-templates/workstream.md - -Instructions: - -- Parse the requested type, slug, and title from `$ARGUMENTS`. -- Use `bash scripts/memory/memory.sh create [title]` when type and slug are clear. -- If type or slug is not clear, do not guess. Explain the expected format. -- After creation, inspect the generated file and update metadata/content if the user provided enough context. -- Keep the note in the canonical folder selected by the memory interface. - -Return: - -1. Created file -2. Any metadata/content refined -3. Any missing details the user may want to add diff --git a/.opencode/commands/memory-create.md b/.opencode/commands/memory-create.md new file mode 120000 index 0000000..ce361ee --- /dev/null +++ b/.opencode/commands/memory-create.md @@ -0,0 +1 @@ +../../.agents/workflows/memory-create.md \ No newline at end of file diff --git a/.opencode/commands/memory-health.md b/.opencode/commands/memory-health.md deleted file mode 100644 index 9069a08..0000000 --- a/.opencode/commands/memory-health.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: Check canonical memory health and Obsidian adapter status ---- - -Run a lightweight health check for canonical project knowledge. - -Read: - -@core/integrations/memory-vault-model.md -@core/integrations/obsidian-model.md -@agent-memory/workflows/workspace-architecture.md - -Run: - -!`bash scripts/memory/memory.sh health` - -Structured views: - -!`for base in work-items people decisions daily systems workstreams; do echo "\n## $base"; bash scripts/memory/memory.sh base-query "$base" paths 2>/dev/null || bash scripts/memory/memory.sh base-query "$base" 2>/dev/null || true; done` - -Respond with: - -1. Health status -2. Any issues that should be fixed now -3. Any optional Obsidian-only improvements - -Do not modify project memory unless the user explicitly asks for cleanup. diff --git a/.opencode/commands/memory-health.md b/.opencode/commands/memory-health.md new file mode 120000 index 0000000..6af1da7 --- /dev/null +++ b/.opencode/commands/memory-health.md @@ -0,0 +1 @@ +../../.agents/workflows/memory-health.md \ No newline at end of file diff --git a/.opencode/commands/promote-project-context.md b/.opencode/commands/promote-project-context.md deleted file mode 100644 index 7ddaf8b..0000000 --- a/.opencode/commands/promote-project-context.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -description: Manually promote confirmed project facts into Fidelity workspace memory ---- - -Use this only when you want an explicit manual promotion pass. - -Read: - -@core/README.md -@core/memory/operational-memory.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/systems/index.md -@project-knowledge/03-context/workstreams/index.md -@project-knowledge/03-context/workstreams/flow-page-references.md -@project-knowledge/03-context/process/index.md - -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` - -Current Mattermost inbox, if present: - -!`if [ -f ai/inbox/mattermost-latest.md ]; then cat ai/inbox/mattermost-latest.md; else echo "No Mattermost inbox file is available."; fi` - -Generated Mattermost context, if present: - -!`if [ -s scripts/mattermost/generated/mattermost_context.jsonl ]; then cat scripts/mattermost/generated/mattermost_context.jsonl; else echo "No generated Mattermost context is available."; fi` - -User direction or facts to promote: - -$ARGUMENTS - -Instructions: - -- Promote only confirmed project-relevant facts -- Ignore tooling noise and sync status -- Update the smallest correct set of files among: - - `project-knowledge/06-daily/$(date +%F).md` - - `project-knowledge/01-current/current-work.md` - - `project-knowledge/02-work-items/*.md` - - `project-knowledge/01-current/work-items.md` - - `project-knowledge/03-context/project.md` - - `project-knowledge/03-context/systems/*.md` - - `project-knowledge/03-context/workstreams/*.md` - - `project-knowledge/03-context/process/*.md` - - `project-knowledge/05-decisions/*.md` - - `.opencode/commands/*.md` when command behavior needs to change - - `prompts/*.md` when a reusable output template needs to change - - `.opencode/agents/*.md` or `AGENTS.md` when default agent behavior needs to change - - `.opencode/skills/*/SKILL.md` when a specialized workflow needs to change - - `project-knowledge/00-start/*.md` when durable project onboarding guidance needs to change - - `agent-memory/**/*.md` when agent learning, promotion, verification, or self-maintenance behavior needs to change -- Prefer concrete project updates over broad summaries -- If a fact is still ambiguous, do not promote it -- If the promoted fact is a reusable behavior correction, do not leave it only in a daily log; update the operational file that controls future behavior -- Use this command when you want a deliberate manual pass beyond the agent's default automatic memory maintenance - -Return: - -1. Updated files -2. Promoted project facts -3. Remaining uncertainty diff --git a/.opencode/commands/promote-project-context.md b/.opencode/commands/promote-project-context.md new file mode 120000 index 0000000..0cadb2a --- /dev/null +++ b/.opencode/commands/promote-project-context.md @@ -0,0 +1 @@ +../../.agents/workflows/promote-project-context.md \ No newline at end of file diff --git a/.opencode/commands/slack-import.md b/.opencode/commands/slack-import.md deleted file mode 100644 index 7e9a462..0000000 --- a/.opencode/commands/slack-import.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -description: Import a historical Slack export and refine workspace memory from it ---- - -Use a Slack export as a historical context source for the workspace. - -Interpret this as historical recovery, not as current truth and not as model training. - -Inputs: - -- `$ARGUMENTS` may contain an export path, channel names, or date filters -- if no explicit path is given in the arguments, use `AIW_SLACK_EXPORT_PATH` when available -- Fidelity profile alias: `FIDELITY_SLACK_EXPORT_PATH` -- otherwise, if `archives/slack/export/` exists, use it as the default import source -- if no channels are specified, auto-detect channels using `AIW_CHANNEL_PREFIX` -- Fidelity default prefix: `fidelity` -- if no message limit is specified, auto-tune message selection based on archive size -- if no date range is specified, do an initial full-history sweep across the detected `fidelity*` channels -- preserve broad coverage across years and channels while still prioritizing high-signal messages - -First, run the importer: - -!`prefix="${AIW_CHANNEL_PREFIX:-fidelity}"; if [ -n "$ARGUMENTS" ]; then python3 scripts/slack/import_slack_export.py $ARGUMENTS; elif [ -n "$AIW_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$AIW_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -n "$FIDELITY_SLACK_EXPORT_PATH" ]; then python3 scripts/slack/import_slack_export.py --export-path "$FIDELITY_SLACK_EXPORT_PATH" --channel-prefix "$prefix"; elif [ -d archives/slack/export ]; then python3 scripts/slack/import_slack_export.py --export-path archives/slack/export --channel-prefix "$prefix"; else echo "Provide Slack import arguments, set AIW_SLACK_EXPORT_PATH, set FIDELITY_SLACK_EXPORT_PATH, or place an extracted export in archives/slack/export."; fi` - -Read: - -@core/README.md -@core/memory/operational-memory.md -@core/integrations/communication-model.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/systems/index.md -@project-knowledge/03-context/workstreams/index.md -@project-knowledge/03-context/process/index.md -@project-knowledge/04-people/index.md -@project-knowledge/04-people/manager.md - -Imported summary, if present: - -!`if [ -s scripts/slack/generated/slack_summary.md ]; then cat scripts/slack/generated/slack_summary.md; else echo "No Slack summary generated."; fi` - -Imported Slack context, if present: - -!`if [ -s scripts/slack/generated/slack_context.jsonl ]; then cat scripts/slack/generated/slack_context.jsonl; else echo "No Slack context generated."; fi` - -Instructions: - -- treat the Slack archive as historical evidence, not promoted memory by itself -- assume this may be a large multi-year export -- assume the first import should preserve evidence from the beginning of the project, not just recent history -- promote durable project-relevant context automatically when confidence is high -- prefer promoting: - - repeated Jira IDs and titles still relevant to current understanding - - durable role/person associations - - recurring architecture or debugging patterns - - past approvals or decisions that still matter -- create or update `project-knowledge/04-people/*.md` when the archive shows a human repeatedly contributing across channels, years, or high-signal technical/process discussions -- store people conservatively: - - exact role only when explicitly supported by the archive - - otherwise store collaboration pattern, communication style, and project relationship -- actively look for: - - Jira IDs plus explicit titles, sizing, and scope changes - - repeated architecture themes around XFlow, SwiftUI, REST, GraphQL, auth, and entry-point behavior - - ownership or responsibility boundaries between framework and consuming app teams - - recurring pipeline or dependency failures that shaped project work - - named people who repeatedly drive approvals, technical framing, or debugging direction -- prioritize high-signal messages such as Jira references, approvals, scope changes, root-cause notes, points, and persistent technical constraints -- favor messages that help reconstruct project history across multiple years, not just the newest ones -- avoid promoting outdated daily status unless it changes current understanding -- update existing memory when the archive clarifies or corrects it -- if historical facts are ambiguous or likely outdated, summarize them as archived context instead of promoting them -- write promoted memory to `project-knowledge/` - -Return: - -1. What was imported -2. Which files were updated -3. Which historical facts were promoted or intentionally left as archive-only context diff --git a/.opencode/commands/slack-import.md b/.opencode/commands/slack-import.md new file mode 120000 index 0000000..3790e9e --- /dev/null +++ b/.opencode/commands/slack-import.md @@ -0,0 +1 @@ +../../.agents/workflows/slack-import.md \ No newline at end of file diff --git a/.opencode/commands/standup.md b/.opencode/commands/standup.md deleted file mode 100644 index fc5f96a..0000000 --- a/.opencode/commands/standup.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -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 diff --git a/.opencode/commands/standup.md b/.opencode/commands/standup.md new file mode 120000 index 0000000..541c4f3 --- /dev/null +++ b/.opencode/commands/standup.md @@ -0,0 +1 @@ +../../.agents/workflows/standup.md \ No newline at end of file diff --git a/.opencode/commands/story-draft.md b/.opencode/commands/story-draft.md deleted file mode 100644 index e4984b2..0000000 --- a/.opencode/commands/story-draft.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -description: Draft a Jira story proposal with Fidelity-ready context and acceptance criteria ---- - -Draft a future Jira story from rough notes, findings, or follow-up ideas. - -This command should optimize for: - -- professional story wording -- explicit scope -- useful acceptance criteria -- clear ownership framing -- natural US English that the current manager or stakeholder can reuse or forward without rewriting - -Input notes or rough idea: - -$ARGUMENTS - -Read: - -@core/README.md -@core/memory/operational-memory.md -@prompts/story-draft.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/process/communication.md -@project-knowledge/03-context/process/jira-story-rules.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -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, if available: - -!`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: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -Requirements: - -- Use `professional-communication` when available. -- Preserve the exact technical meaning of the input -- Rewrite fully when needed so the output sounds like a fluent senior engineer wrote it -- Choose the most appropriate story framing: bug, enhancement, spike, task, or follow-up -- Keep the title short, concrete, and Jira-ready -- Make the description specific enough that another engineer can understand the intended work -- Separate current problem, root-cause suspicion, workaround, and follow-up work when relevant -- Do not overstate certainty; if something is still a hypothesis, label it clearly -- Make ownership explicit when helpful: XFlow vs consumer app vs service/configuration vs other framework -- Acceptance criteria should be testable and scoped to the proposed story -- If the story looks too large or too ambiguous, say so explicitly and suggest spike framing instead -- If useful, include a short note about dependencies, blockers, or coordination needed -- If the story touches consumer validation or release propagation, reflect that explicitly in the description or notes - -Return: - -1. Suggested story type -2. Jira-ready title -3. Description -4. Acceptance criteria -5. Optional notes on dependencies / blockers / sizing concerns diff --git a/.opencode/commands/story-draft.md b/.opencode/commands/story-draft.md new file mode 120000 index 0000000..a6bfb3e --- /dev/null +++ b/.opencode/commands/story-draft.md @@ -0,0 +1 @@ +../../.agents/workflows/story-draft.md \ No newline at end of file diff --git a/.opencode/commands/swift-help.md b/.opencode/commands/swift-help.md deleted file mode 100644 index 5fcae50..0000000 --- a/.opencode/commands/swift-help.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -description: Answer Swift or iOS programming questions with Fidelity/XFlow context ---- - -Answer the user's Swift/iOS programming question using current iOS practices and this workspace's Fidelity context. - -Read: - -@project-knowledge/03-context/ios/index.md -@project-knowledge/03-context/ios/current-practices.md -@project-knowledge/03-context/ios/project-swift-guidance.md -@agent-memory/integrations/technical-verification.md -@project-knowledge/03-context/project.md -@project-knowledge/03-context/systems/index.md -@project-knowledge/03-context/workstreams/index.md -@project-knowledge/01-current/work-items.md - -User question: - -$ARGUMENTS - -Instructions: - -- Use the `ios-swift-answering` skill if available. -- Use `swiftui-xflow-review` if the question touches SwiftUI, XFlow, UIKit bridge removal, modal presentation, lifecycle, or backend-driven UI. -- Use `ios-testing-strategy` if the question touches tests or validation. -- If current Apple API, Swift, CocoaPods, SPM, Xcode, CI/build, or testing behavior matters, verify against official/primary documentation before making strong claims. -- Contextualize the answer to Fidelity only when it materially changes the recommendation. -- Separate current best practice from project-safe recommendation when they differ. - -Return: - -1. Recommendation -2. Project-specific caveats -3. Validation or follow-up checks diff --git a/.opencode/commands/swift-help.md b/.opencode/commands/swift-help.md new file mode 120000 index 0000000..448eaff --- /dev/null +++ b/.opencode/commands/swift-help.md @@ -0,0 +1 @@ +../../.agents/workflows/swift-help.md \ No newline at end of file diff --git a/.opencode/commands/sync-context.md b/.opencode/commands/sync-context.md deleted file mode 100644 index a6acb77..0000000 --- a/.opencode/commands/sync-context.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -description: Update workspace memory from new facts, corrections, or contextual notes ---- - -Use this command when new information should become part of the persistent workspace context. - -Read: - -@README.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/systems/index.md -@project-knowledge/03-context/workstreams/index.md -@project-knowledge/03-context/workstreams/flow-page-references.md -@agent-memory/memory/context-maintenance.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -Today's existing 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` - -New information to incorporate: - -$ARGUMENTS - -Instructions: - -- use `workspace-memory-curation` when available -- Treat direct user corrections and learning-session updates as memory sources. -- For learning-session updates, prefer durable project understanding over transient ticket status. -- Route durable learning to architecture/process/system/workstream notes; route only truly current operational state to `project-knowledge/01-current/` or `project-knowledge/06-daily/`. -- If the new information corrects the agent's uncertainty handling or recurring behavior, update the command, prompt, agent, skill, or process rule that controls that behavior. -- Decide whether the new information belongs in: - - today's daily note: `project-knowledge/06-daily/$(date +%F).md` - - current work: `project-knowledge/01-current/current-work.md` - - work items: `project-knowledge/02-work-items/*.md` - - active work summary: `project-knowledge/01-current/work-items.md` - - project overview: `project-knowledge/03-context/project.md` - - systems: `project-knowledge/03-context/systems/` - - workstreams: `project-knowledge/03-context/workstreams/` - - process: `project-knowledge/03-context/process/` - - manager mapping: `project-knowledge/04-people/manager.md` - - people roster: `project-knowledge/04-people/index.md` - - people notes: `project-knowledge/04-people/*.md` - - decisions: `project-knowledge/05-decisions/` - - `.opencode/commands/*.md` - - `prompts/*.md` - - `.opencode/agents/*.md` - - `.opencode/skills/*/SKILL.md` -- Update the appropriate files directly -- When updating a canonical project note, maintain frontmatter properties used by Obsidian Bases, including `updated`, `systems`, `workstreams`, `people`, `related`, `focus`, `work-items`, and `blockers` when applicable -- If an existing statement became stale, replace or refine it -- If the new information changes how this workspace should behave, update the linked command, prompt, agent, skill, or knowledge file that enforces that behavior -- Do not invent missing facts -- Keep uncertain information in the daily log instead of promoting it to stable context -- Do not ask for promotion confirmation when the correct destination is already clear -- Prefer correcting canonical memory over appending duplicate summaries - -After editing, respond with: - -1. Updated files -2. What changed in the persistent context -3. Any uncertainty that remains diff --git a/.opencode/commands/sync-context.md b/.opencode/commands/sync-context.md new file mode 120000 index 0000000..3beedd0 --- /dev/null +++ b/.opencode/commands/sync-context.md @@ -0,0 +1 @@ +../../.agents/workflows/sync-context.md \ No newline at end of file diff --git a/.opencode/commands/translate.md b/.opencode/commands/translate.md deleted file mode 100644 index 11586c5..0000000 --- a/.opencode/commands/translate.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -description: Rewrite rough engineering notes into natural Mattermost-ready US English ---- - -Rewrite and tighten the following rough notes into concise, natural, Mattermost-ready US English. - -Use `professional-communication` when available. - -Do not translate literally. -Rewrite fully when needed so the result sounds like a fluent senior engineer wrote it. - -If the notes mix multiple issues, separate the main issue from unrelated bugs or follow-up work unless the user clearly wants them combined. - -$ARGUMENTS - -Read: - -@prompts/mattermost-translation.md -@project-knowledge/03-context/project.md -@project-knowledge/03-context/process/communication.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -If relevant, use today's log for context: - -!`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` - -Return: - -1. Clean message -2. Short assumptions note diff --git a/.opencode/commands/translate.md b/.opencode/commands/translate.md new file mode 120000 index 0000000..2de696f --- /dev/null +++ b/.opencode/commands/translate.md @@ -0,0 +1 @@ +../../.agents/workflows/translate.md \ No newline at end of file diff --git a/.opencode/commands/workspace-context.md b/.opencode/commands/workspace-context.md deleted file mode 100644 index d36c12e..0000000 --- a/.opencode/commands/workspace-context.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -description: Load reusable AI workspace core plus the active project profile ---- - -Load and internalize the reusable workspace core and the active project context before answering follow-up questions. - -Read core: - -@core/README.md -@core/memory/operational-memory.md -@core/integrations/memory-vault-model.md -@core/integrations/communication-model.md -@core/profiles/create-project-profile.md -@agent-memory/README.md -@agent-memory/behavior/learning-sessions.md -@agent-memory/behavior/self-maintenance.md -@agent-memory/memory/operational-memory.md -@agent-memory/integrations/memory-interface.md -@agent-memory/integrations/obsidian.md -@agent-memory/integrations/communication-sources.md - -Read active workspace memory: - -@README.md -@project-knowledge/00-start/start-here.md -@project-knowledge/00-start/onboarding.md -@project-knowledge/01-current/current-work.md -@project-knowledge/01-current/work-items.md -@project-knowledge/07-maps/current-work.md -@project-knowledge/07-maps/fidelity-domain.md -@project-knowledge/07-maps/work-items.md -@project-knowledge/07-maps/people.md -@project-knowledge/03-context/project.md -@project-knowledge/03-context/process/communication.md -@agent-memory/integrations/technical-verification.md -@agent-memory/memory/context-maintenance.md -@agent-memory/workflows/workspace-model.md -@agent-memory/behavior/agent-behavior.md -@agent-memory/memory/promotion-rules.md -@project-knowledge/04-people/manager.md -@project-knowledge/04-people/index.md - -Read active profile, preferring the configured profile and falling back to Fidelity: - -!`profile="${AIW_PROJECT_PROFILE:-fidelity}"; if [ -f "profiles/$profile/profile.md" ]; then cat "profiles/$profile/profile.md"; elif [ -f profiles/fidelity/profile.md ]; then cat profiles/fidelity/profile.md; else echo "No profile file found."; fi` - -Today's date: - -!`date +%F` - -Today's canonical daily note, 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` - -Recent daily notes available: - -!`if [ -d project-knowledge/06-daily ]; then ls -1 project-knowledge/06-daily 2>/dev/null | sort | tail -n 5; else echo "No daily notes directory available."; fi` - -Detailed active work item files, if available: - -!`if [ -d project-knowledge/02-work-items ]; then for f in project-knowledge/02-work-items/*.md; do case "$f" in *README.md|*index.md) continue;; esac; echo "\n### $f"; cat "$f"; done; else echo "No work item files available."; fi` - -Latest communication inbox, if available: - -!`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 live communication context available."; fi` - -Respond with: - -1. Current context -2. Communication risks -3. Missing context to capture today - -Keep the response concise, then wait for the next request. diff --git a/.opencode/commands/workspace-context.md b/.opencode/commands/workspace-context.md new file mode 120000 index 0000000..b16f58f --- /dev/null +++ b/.opencode/commands/workspace-context.md @@ -0,0 +1 @@ +../../.agents/workflows/workspace-context.md \ No newline at end of file diff --git a/.opencode/skills/ai-prompt-engineering/SKILL.md b/.opencode/skills/ai-prompt-engineering/SKILL.md deleted file mode 100644 index 9e119b1..0000000 --- a/.opencode/skills/ai-prompt-engineering/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: ai-prompt-engineering -description: Create self-contained prompts for another AI assistant that lacks access to this workspace memory. -compatibility: opencode ---- - -## When To Use - -Use this skill when the user wants a prompt for another AI assistant, coding agent, review tool, or implementation environment. - -## Workflow - -1. Identify target task type: investigation, implementation, review, testing, debugging, or documentation. -2. Pull only relevant workspace context. -3. Make the prompt self-contained. -4. Tell the target AI what to inspect before acting. -5. State constraints, non-goals, expected output, and validation expectations. -6. Avoid invented file paths when the implementation repository is not available. - -## Output Rules - -- Return only the prompt unless the user asks for commentary. -- Prefer clear sections over long prose. -- Include work-item ID and title when relevant. -- Make assumptions explicit. - diff --git a/.opencode/skills/ai-prompt-engineering/SKILL.md b/.opencode/skills/ai-prompt-engineering/SKILL.md new file mode 120000 index 0000000..fd57cd9 --- /dev/null +++ b/.opencode/skills/ai-prompt-engineering/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/ai-prompt-engineering.md \ No newline at end of file diff --git a/.opencode/skills/copilot-prompt-engineering/SKILL.md b/.opencode/skills/copilot-prompt-engineering/SKILL.md deleted file mode 100644 index 912c84b..0000000 --- a/.opencode/skills/copilot-prompt-engineering/SKILL.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -name: copilot-prompt-engineering -description: Create high-quality prompts for GitHub Copilot or another AI running on the Fidelity development machine, using this workspace's context without assuming the target AI has access to it. -compatibility: opencode ---- - -## When To Use - -Use this skill when the user wants a prompt for another AI assistant, GitHub Copilot, or the Fidelity development machine. - -## Workflow - -1. Identify the target task type: - - investigation - - implementation plan - - code change - - review - - test strategy - - story/PR drafting -2. Pull only the relevant context: - - `project-knowledge/02-work-items/` for ticket-specific context - - `project-knowledge/03-context/systems/` for component context - - `project-knowledge/03-context/workstreams/` for recurring constraints - - `project-knowledge/03-context/ios/` for Swift/iOS guidance -3. Make the prompt self-contained. -4. Tell the target AI what to inspect before acting. -5. State constraints, non-goals, and validation expectations. - -## Fidelity Prompting Rules - -- Write the final prompt in English unless the user explicitly requests another language. -- Default to first-person wording so the user can paste the prompt directly into Copilot. -- Keep the prompt short unless the user asks for more detail. -- For follow-up prompts in the same AI session, assume recent shared context and avoid repeating which side made the previous changes unless it matters for the task. -- Include Jira ID and approved title when available. -- For REST work, say REST is behind a feature flag and GraphQL is fallback unless confirmed otherwise. -- For XFlow work, say behavior may depend on entry point, auth state, backend config, and consumer integration. -- For AO/Discourse issues, say external report vs regression must be separated. -- For SwiftUI/XFlow work, mention lifecycle, modal presentation, UIKit bridge, feature flag, and Fid4 validation if relevant. - -## Output Rules - -- Return only the prompt unless the user asks for explanation. -- Keep the prompt concise but complete. -- Prefer sections over paragraphs. -- Do not invent file paths unless the workspace context explicitly names them. -- If exact files are unknown, ask Copilot to locate them first. diff --git a/.opencode/skills/copilot-prompt-engineering/SKILL.md b/.opencode/skills/copilot-prompt-engineering/SKILL.md new file mode 120000 index 0000000..924871c --- /dev/null +++ b/.opencode/skills/copilot-prompt-engineering/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/copilot-prompt-engineering.md \ No newline at end of file diff --git a/.opencode/skills/ios-swift-answering/SKILL.md b/.opencode/skills/ios-swift-answering/SKILL.md deleted file mode 100644 index 33e2678..0000000 --- a/.opencode/skills/ios-swift-answering/SKILL.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: ios-swift-answering -description: Answer Swift, SwiftUI, and iOS programming questions using current Apple guidance while adapting recommendations to Fidelity/XFlow project constraints. -compatibility: opencode ---- - -## When To Use - -Use this skill for Swift, SwiftUI, iOS architecture, concurrency, testing, or debugging questions. - -## Workflow - -1. Identify whether the question is general Swift/iOS or Fidelity-specific. -2. Read `project-knowledge/03-context/ios/current-practices.md` for currentness rules. -3. Read `project-knowledge/03-context/ios/project-swift-guidance.md` when the answer may affect XFlow, Fid4, XFlowViewMaker, FTFrameworks, feature flags, or consumer validation. -4. If the answer depends on current Apple APIs, Xcode versions, dependency tooling, package-manager behavior, testing frameworks, or migration guidance, verify with official/primary documentation before making strong claims. -5. Separate: - - current best practice - - project-safe recommendation - - assumptions to confirm - -## Output Rules - -- Be direct and senior-engineer practical. -- Avoid generic architecture advice when project constraints matter. -- Do not assume deployment target, Xcode version, or framework migration status. -- Do not characterize CocoaPods, SPM, podspec repos, trunk/CDN behavior, CI/build behavior, or testing framework practices as good or bad practice without corroborating current primary docs when the recommendation matters. -- Mention tradeoffs and validation path when relevant. diff --git a/.opencode/skills/ios-swift-answering/SKILL.md b/.opencode/skills/ios-swift-answering/SKILL.md new file mode 120000 index 0000000..a6d2413 --- /dev/null +++ b/.opencode/skills/ios-swift-answering/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/ios-swift-answering.md \ No newline at end of file diff --git a/.opencode/skills/ios-testing-strategy/SKILL.md b/.opencode/skills/ios-testing-strategy/SKILL.md deleted file mode 100644 index 5f017f1..0000000 --- a/.opencode/skills/ios-testing-strategy/SKILL.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: ios-testing-strategy -description: Recommend iOS testing approaches for Swift, SwiftUI, XFlow, Fid4, and REST migration work while respecting existing XCTest/Swift Testing/project constraints. -compatibility: opencode ---- - -## When To Use - -Use this skill for unit tests, UI tests, integration tests, regression coverage, XFlow flow validation, or REST/GraphQL migration testing questions. - -## Workflow - -1. Identify the behavior under test. -2. Classify the test level: - - unit - - integration - - UI / consumer flow - - exploratory validation -3. Check whether the behavior depends on backend configuration, auth state, entry point, feature flags, or Fid4 integration. -4. Prefer the test framework already used by the project unless the user asks about migration. -5. If suggesting Swift Testing, confirm Xcode/project support first and do not mix APIs inside the same test. - -## Project-Specific Guidance - -- XFlow behavior may require exploratory validation beyond unit tests. -- AO/Discourse issues often need auth-state and entry-point coverage. -- REST migration tests must distinguish REST path from GraphQL fallback. -- Consumer-facing changes may require Fid4 validation even when SDK tests pass. - -## Output Rules - -- Recommend the smallest useful test strategy. -- Include what cannot be proven by that test layer. -- Mention manual/exploratory validation when code-level tests are insufficient. diff --git a/.opencode/skills/ios-testing-strategy/SKILL.md b/.opencode/skills/ios-testing-strategy/SKILL.md new file mode 120000 index 0000000..5296b3d --- /dev/null +++ b/.opencode/skills/ios-testing-strategy/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/ios-testing-strategy.md \ No newline at end of file diff --git a/.opencode/skills/professional-communication/SKILL.md b/.opencode/skills/professional-communication/SKILL.md deleted file mode 100644 index f8e1b9e..0000000 --- a/.opencode/skills/professional-communication/SKILL.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: professional-communication -description: Rewrite rough technical notes into clear, concise, stakeholder-ready professional English while preserving scope and technical meaning. -compatibility: opencode ---- - -## When To Use - -Use this skill for manager updates, stakeholder messages, translations, issue clarification, Jira comments, and communication polishing. - -## Workflow - -1. Identify audience, purpose, scope, and requested action. -2. Preserve technical meaning and uncertainty. -3. Make ownership, reproducibility, environment, and next action explicit when relevant. -4. Use Context, Observation, Action when it improves readability. -5. Avoid vague comparisons and generic progress language. - -## Output Rules - -- Write natural professional US English. -- Keep messages concise enough for workplace chat unless the user asks for a longer document. -- Do not invent facts, evidence, or commitments. - diff --git a/.opencode/skills/professional-communication/SKILL.md b/.opencode/skills/professional-communication/SKILL.md new file mode 120000 index 0000000..5466268 --- /dev/null +++ b/.opencode/skills/professional-communication/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/professional-communication.md \ No newline at end of file diff --git a/.opencode/skills/status-reporting/SKILL.md b/.opencode/skills/status-reporting/SKILL.md deleted file mode 100644 index 5c52abe..0000000 --- a/.opencode/skills/status-reporting/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: status-reporting -description: Generate work-item-aware standups and status summaries from current workspace memory, recent logs, and communication evidence. -compatibility: opencode ---- - -## When To Use - -Use this skill for standups, daily scrum updates, end-of-day summaries, and short progress reports. - -## Workflow - -1. Read current state, active work items, recent logs, and latest communication evidence. -2. Use the previous workday as the default source for "Yesterday" style updates. -3. Group updates by work item when possible. -4. If one work item has multiple concrete updates, use one top-level work-item bullet with indented markdown sub-bullets. -5. Exclude side chatter unless it changed work scope, priority, risk, or blockers. - -## Output Rules - -- Use explicit work-item ID and title when available. -- Keep the report concise and ready to send. -- Do not mention internal evidence sources unless the user asks. -- Use `Blockers: None` only when no blocker is visible in current memory. - diff --git a/.opencode/skills/status-reporting/SKILL.md b/.opencode/skills/status-reporting/SKILL.md new file mode 120000 index 0000000..76c2b2f --- /dev/null +++ b/.opencode/skills/status-reporting/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/status-reporting.md \ No newline at end of file diff --git a/.opencode/skills/swiftui-xflow-review/SKILL.md b/.opencode/skills/swiftui-xflow-review/SKILL.md deleted file mode 100644 index 125038d..0000000 --- a/.opencode/skills/swiftui-xflow-review/SKILL.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -name: swiftui-xflow-review -description: Review or reason about SwiftUI code in XFlow/Fidelity contexts, especially lifecycle, modal presentation, navigation, backend-driven UI, and UIKit bridge removal. -compatibility: opencode ---- - -## When To Use - -Use this skill when a SwiftUI question touches XFlow, Fid4, XFlowViewMaker, modal presentation, dismissal sequencing, navigation, `UIHostingController`, or backend-driven UI behavior. - -## Review Heuristics - -- Check whether behavior is driven by backend configuration before blaming local SwiftUI code. -- Identify data ownership and view lifecycle boundaries. -- Treat dismissal sequencing as high risk when delegate callbacks, `onDisappear`, or upstream state changes are involved. -- Treat UIKit bridge removal as rollout-sensitive, not just cleanup. -- Separate SwiftUI best practice from Fidelity-safe migration strategy. - -## Fidelity-Specific Checks - -- Does the change preserve UIKit/SwiftUI parity? -- Does it require a feature flag? -- Does it need validation in Fid4 or only XFlowSDK? -- Could XFlowViewMaker or FTFrameworks block consumer visibility? -- Is the issue external behavior, existing behavior, or a regression? - -## Output Rules - -- Provide a clear recommendation. -- Include risks and validation path. -- Avoid recommending a pure SwiftUI approach without noting rollout and consumer validation impact. diff --git a/.opencode/skills/swiftui-xflow-review/SKILL.md b/.opencode/skills/swiftui-xflow-review/SKILL.md new file mode 120000 index 0000000..5d97d7d --- /dev/null +++ b/.opencode/skills/swiftui-xflow-review/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/swiftui-xflow-review.md \ No newline at end of file diff --git a/.opencode/skills/workspace-memory-curation/SKILL.md b/.opencode/skills/workspace-memory-curation/SKILL.md deleted file mode 100644 index 1fcbbef..0000000 --- a/.opencode/skills/workspace-memory-curation/SKILL.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: workspace-memory-curation -description: Maintain file-based operational memory by deciding what to log, promote, correct, or route into tool behavior across reusable AI workspaces. -compatibility: opencode ---- - -## When To Use - -Use this skill when new information may change workspace memory, project state, work-item context, people context, decisions, or reusable agent/tool behavior. - -## Workflow - -1. Read `core/memory/operational-memory.md`. -2. Classify the information as daily, state, work-item, stable-context, people, decision, or tooling-behavior. -3. Update the smallest correct canonical file. -4. If new information corrects older memory, replace or refine the stale statement instead of appending a contradiction. -5. If a correction affects future output, update the command, prompt, agent, skill, or knowledge file that controls that behavior. -6. Keep imported evidence separate from promoted memory. - -## Output Rules - -- Report updated files and the memory change. -- Preserve uncertainty when confidence is mixed. -- Do not promote tool failures, sync noise, or generic chat chatter as project facts. - diff --git a/.opencode/skills/workspace-memory-curation/SKILL.md b/.opencode/skills/workspace-memory-curation/SKILL.md new file mode 120000 index 0000000..0f6af23 --- /dev/null +++ b/.opencode/skills/workspace-memory-curation/SKILL.md @@ -0,0 +1 @@ +../../../.agents/rules/workspace-memory-curation.md \ No newline at end of file diff --git a/agent-memory/behavior/agent-behavior.md b/agent-memory/behavior/agent-behavior.md index bfed79e..19a3a28 100644 --- a/agent-memory/behavior/agent-behavior.md +++ b/agent-memory/behavior/agent-behavior.md @@ -124,9 +124,9 @@ If a correction applies to a command, prompt, skill, agent, or reusable rule, up Examples: -- A standup formatting correction should update `prompts/standup.md` and `.opencode/commands/standup.md`. +- A standup formatting correction should update `prompts/standup.md` and `.agents/workflows/standup.md`. - A Mattermost freshness correction should update the Mattermost command/plugin instructions. -- A Copilot prompt-structure correction should update `prompts/copilot-prompt.md`, `.opencode/commands/copilot-prompt.md`, or the Copilot skill. +- A Copilot prompt-structure correction should update `prompts/copilot-prompt.md`, `.agents/workflows/copilot-prompt.md`, or the Copilot skill. - A Swift answer-quality correction should update the relevant iOS skill or `project-knowledge/03-context/ios/` guidance. Keep the daily log as evidence of what happened, but make the reusable behavior live in the file that controls that behavior. @@ -193,7 +193,7 @@ When the role is not explicit, store: Use for explicit confirmed decisions with ongoing impact. -### `.opencode/commands/`, `prompts/`, `.opencode/agents/`, `.opencode/skills/`, and `agent-memory/` +### `.agents/workflows/`, `.agents/rules/`, `prompts/`, and `agent-memory/` Use these when the new information changes how the workspace should operate: