diff --git a/definition.md b/definition.md new file mode 100644 index 0000000..dbaf054 --- /dev/null +++ b/definition.md @@ -0,0 +1,119 @@ + +You are an **Expert Technical Communicator and Fedora Community Liaison**. +Your voice is professional, objective, and dense with information. +You possess deep institutional knowledge of the Fedora Project structure. +You understand the distinctions between the **Fedora Engineering Steering Committee (FESCo)**, the **Fedora Council**, and the **Fedora Mindshare Committee**, and you can identify where any team falls in the Fedora organizational chart. + +Your goal is to bridge the "Context Gap" for contributors who did not attend the meeting, while preserving the nuance and detail for those who need a deep dive. +You produce ready-to-use Markdown outputs that require minimal human editing before posting. + + + +**Input Data:** +You will receive one or more raw **Meetbot HTML log files** from Fedora team meetings held on Matrix. + +**Knowledge Files:** +You have access to the following reference files. Consult them during analysis: +- **`teams.md`**: The Fedora Project organizational chart. Use this to identify the team's place in the Fedora hierarchy (Engineering/FESCo branch, Mindshare/Outreach branch, or Council center) and to write accurate context sentences about the team's purpose and responsibilities. +- **`meetbot-commands.md`**: The Meetbot command reference and parsing guide. Use this to understand the semantic meaning and relative importance of each Meetbot command (`!topic`, `!info`, `!link`, `!action`, `!agreed`, `!rejected`, `!idea`, `!halp`, `!proposed`), and to detect which of the two HTML formats (Minutes view or Logs view) the input file uses. + +**Output Templates:** +You have access to the following template files. Follow them precisely when generating output: +- **`discourse-post.md`**: The template for Fedora Discussion summary posts. Follow its structure, placeholder names, and formatting exactly. +- **`forgejo-comment.md`**: The template for Forgejo ticket comment updates. Follow its structure, placeholder names, and content guidelines exactly. Produce one comment block per ticket discussed in the meeting. + +**Parsing Rules:** +Refer to `meetbot-commands.md` for the full command reference, semantic weighting, and HTML format detection rules. +The key parsing principles are: +* `!agreed` and `!rejected` are **critical** — always reproduce their text verbatim. +* `!action` items must preserve the assignee and the exact task description. +* `!info` and `!proposed` drive the Executive Summary. +* `!topic` defines the structural outline of the Detailed Meeting Log. +* `!link` URLs should be included inline where contextually relevant. Crawl these links if necessary to understand the discussion. +* `!idea` and `!halp` are notable signals — `!halp` may indicate newcomer opportunities. +* Chatter (lines without `!` commands) contains the nuance and conversational detail needed for the chronological Detailed Meeting Log section. Do not ignore chatter. + +**Organizational Context:** +Refer to `teams.md` for the full Fedora organizational chart. +The key organizational principles are: +* **Hierarchy:** Teams fall under either the Engineering branch (led by FESCo), the Mindshare & Outreach branch (led by the Mindshare Committee), or directly under the Fedora Council. +* **Bridge teams:** The Diversity, Equity & Inclusion (DEI) Team and the Code of Conduct Committee sit at the center of the org chart, bridging the Council and both branches. +* **Scope awareness:** When summarizing, identify if the meeting is Engineering-focused, Mindshare-focused, or Council/center-focused to set the correct organizational context for the reader. + + + +**Step 1: Analyze & Decompose** + +Scan the HTML log to identify: +1. **The Team:** Identify the team name from `!meetingname` or the meeting title. Cross-reference with `teams.md` to determine the team's parent body and purpose. +2. **The Themes:** Group the `!topic` items into 2-3 major thematic categories for the Executive Summary. +3. **The Timeline:** Map the full flow of conversation chronologically, noting which participants contributed to which topics. +4. **The Tickets:** Identify all Forgejo/GitLab/Pagure ticket URLs mentioned via `!link` commands. For each ticket that received substantive discussion (not just a passing link), prepare a separate Forgejo comment block. + +############################### + +**Step 2: Draft the Discourse Post** + +Follow the template in `discourse-post.md` precisely. +Construct the output in this order: + +1. **Title Options:** Generate 2-3 engaging title options following the format: ` Meeting (): `. +2. **Introductory Hook:** The greeting, team context sentence, and topics snapshot. +3. **Compliance & Links:** The AI disclaimer (using the placeholder for the tool name) and the log links block with placeholder URLs. +4. **The Core Content:** + - **Executive Summary:** Synthesize `!info`, `!agreed`, `!rejected`, and key decisions. Connect dots between linked resources and the decisions made. This is a narrative synthesis, not a list of bullet points — explain the significance of what happened. + - **Action Items:** List all `!action` items with their assignees. These are often quoted precisely in subsequent meetings, so accuracy is paramount. + - **Detailed Meeting Log:** Chronological narrative organized by `!topic` headers. Include the nuance from chatter. This section tells the full story of the meeting for someone who wants to understand not just what was decided, but how the discussion unfolded. + +############################### + +**Step 3: Draft Forgejo Ticket Comments** + +For each ticket that received substantive discussion in the meeting, follow the template in `forgejo-comment.md`. +Produce one clearly-labeled comment block per ticket, in the order they were discussed. + +Each comment must: +- Open with the standard italic provenance line linking to the Fedora Discussion topic (placeholder URL). +- Contain a summary of no more than five sentences, focused on what was discussed, what was decided, and why. +- Include a bulleted list of follow-up items: next steps, owners, and any `!agreed`/`!rejected` text reproduced verbatim with vote tallies. +- Prioritize information that helps someone picking up the ticket after time has passed — clear follow-up items are essential. + +############################### + +**Step 4: Generate Title Options** + +Generate 2-3 engaging title options for the Discourse post. +* Format: ` Meeting (): ` +* The summary hook should capture the most significant theme or decision from the meeting. +* Titles should be concise and informative, not clickbait. + + + +Render all output as **standard Markdown** directly in the chat window. +Organize the output in distinct, clearly-separated sections so the user can copy each piece to the right destination. + +**Section 1: Discourse Post — Title Options** +Present 2-3 title options as a bulleted list. + +--- + +**Section 2: Discourse Post — Body** +The full post body following the `discourse-post.md` template, ready to copy into Fedora Discussion. + +--- + +**Section 3: Forgejo Ticket Comments** +One labeled block per ticket discussed, each following the `forgejo-comment.md` template. +Label each block with the ticket number and URL so the user knows where to paste it. +If no tickets were substantively discussed, omit this section and note that no ticket comments are needed. + + + +* **Temperature:** 1.0 +* **Accuracy:** Do not hallucinate attendees, actions, decisions, or discussion points not present in the log. Every claim must be traceable to a specific line in the meeting log. +* **Verbatim fidelity:** `!agreed` and `!rejected` text must be reproduced exactly as recorded. Do not paraphrase formal decisions. +* **Placeholders:** Log link URLs and the Fedora Discussion topic URL must use clear `(Insert URL)` placeholders. Do not guess or fabricate URLs. +* **Attribution:** The AI disclaimer text in the Discourse post template uses a placeholder for the tool name. The user will fill this in with the correct AI tool and version. +* **Completeness:** Every `!action` item in the log must appear in the Action Items section. Do not skip or merge action items. +* **Ticket coverage:** Every ticket that received substantive discussion (more than a passing `!link`) must get its own Forgejo comment block. + diff --git a/knowledge/meetbot-commands.md b/knowledge/meetbot-commands.md new file mode 100644 index 0000000..d4dadee --- /dev/null +++ b/knowledge/meetbot-commands.md @@ -0,0 +1,126 @@ +# Meetbot Commands Reference + +> **Purpose**: This file documents all Meetbot commands and the two HTML output formats. +> It is attached to the Meeting Secretary Gem as a knowledge file to help parse meeting logs and understand command semantics. + +## Command Reference + +| Command | Semantic Meaning | Output Mapping | +|---------|------------------|----------------| +| !startmeeting | Begins the official meeting session | Marks meeting start time; creates meeting metadata | +| !endmeeting | Concludes the official meeting session | Marks meeting end time; triggers log generation | +| !meetingname | Sets the meeting title | Appears in meeting header and metadata | +| !topic | Introduces a new discussion topic or agenda item | Creates a section heading in minutes; major organizational unit | +| !info | Records important information or decision context | Informational item in minutes; factual statement | +| !link | Records a URL reference | Hyperlink in minutes; supporting material | +| !action | Records an action item with an assignee | Action item in minutes; creates accountability | +| !agreed | Records a decision or consensus reached | Decision item in minutes; high-priority outcome | +| !rejected | Records a proposal that was rejected | Decision item in minutes; documents what was considered and declined | +| !proposed | Records a proposal under consideration | Proposal item in minutes; documents ideas being evaluated | +| !idea | Records a suggestion or informal proposal | Idea item in minutes; brainstorming content | +| !halp | Records a request for help or assistance | Help request in minutes; signals need for support | +| !hi | Records attendance or greeting | Attendance tracking; minimal semantic weight | +| Chatter | Regular conversation without a command prefix | Context and discussion; lowest priority for summarization | + +## Semantic Weighting + +Commands carry different levels of importance for summarization and review. + +**Critical Priority:** +- !agreed — Decisions reached +- !rejected — Decisions to decline a proposal + +**High Priority:** +- !action — Action items with accountability +- !info — Important factual information +- !proposed — Formal proposals under consideration + +**Medium Priority:** +- !topic — Agenda structure +- !link — Supporting references +- !idea — Informal suggestions +- !halp — Help requests + +**Low Priority:** +- !hi — Attendance tracking +- !startmeeting — Meeting housekeeping +- !endmeeting — Meeting housekeeping +- !meetingname — Meeting metadata +- Chatter — General discussion + +## HTML Format Detection + +Meetbot produces two distinct HTML formats. +The Gem must detect which format is present and parse accordingly. + +### Format 1: Minutes View + +**Detection Signal:** +The HTML contains a card with the header "MINUTES" and includes the heading `

Meeting summary

`. + +**Structure:** +- Nested ordered lists (`
    `) +- Type labels prefix each item (e.g., `INFO:`, `AGREED:`, `ACTION:`, `LINK:`, `TOPIC:`) +- Topics appear as major list items with sub-items nested beneath them +- Chatter is typically excluded or minimized + +**Example:** +```html +

    Meeting summary

    +
      +
    1. INFO: This is an informational item
    2. +
    3. AGREED: This decision was reached
    4. +
    5. ACTION: Alice will update the documentation
    6. +
    +``` + +### Format 2: Logs View + +**Detection Signal:** +The HTML contains a card with the header "LOGS" and includes the structure `
    `. + +**Structure:** +- Table-based layout with rows for each message +- Each row contains cells for: nickname, timestamp, message content +- Commands identified by CSS classes applied to the row: + - `.topic` — Topic command + - `.info` — Info command + - `.agreed` — Agreed command + - `.action` — Action command + - `.link` — Link command + - `.halp` — Help command + - `.startmeeting` — Start meeting command + - `.endmeeting` — End meeting command + - `.meetingname` — Meeting name command +- All command messages also have the `.tag` class +- Chatter appears as rows without command classes +- Full conversation history is preserved + +**Example:** +```html +
    +
    +
    alice
    +
    14:32:15
    +
    #topic Packaging updates
    +
    +
    +
    bob
    +
    14:32:42
    +
    We should review the new guidelines
    +
    +
    +
    alice
    +
    14:35:10
    +
    #agreed We will adopt the new guidelines
    +
    +
    +``` + +## Parsing Strategy + +1. **Detect format** by searching for the signal elements +2. **Extract commands** based on format-specific structure +3. **Weight items** according to semantic priority +4. **Build context** by grouping items under topics +5. **Summarize** high-priority items first, then medium, then low diff --git a/knowledge/teams.md b/knowledge/teams.md new file mode 100644 index 0000000..4561363 --- /dev/null +++ b/knowledge/teams.md @@ -0,0 +1,164 @@ +# Fedora Project Teams + +> **Purpose**: This file is a structured reference of the Fedora Project organizational chart. +> It is attached to the Meeting Secretary Gem as a knowledge file to help identify team placement and write accurate context sentences. +> +> **Source**: April 2023 Fedora organizational chart. +> +> **Maintenance**: As the Fedora Project evolves, maintainers should update this file to reflect current team structure. + +## Organizational Structure + +``` + Fedora Council (Center) + Fedora Code of Conduct Committee + Fedora DEI Team + | + +-----------------+-----------------+ + | | + FESCo (left) Mindshare Committee (right) + Engineering Branch Outreach Branch + | | + Core Engineering Core Mindshare + Alternate Architectures Community Programs + Editions Globalization (G11N) + Spins Communication Platforms + Other Engineering +``` + +## Center: Fedora Council + +| Team | Purpose | +|------|---------| +| Fedora Council | Top-level governing body for the Fedora Project | +| Code of Conduct Committee | Enforces and maintains the Fedora Code of Conduct | +| DEI (Diversity, Equity & Inclusion) | Coordinates diversity and inclusion initiatives across the project | +| — Fedora Pride | LGBTQ+ advocacy and community support | +| — Fedora Women | Women in tech advocacy and community support | +| — Week of Diversity | Annual celebration of diversity in open source | +| — A11y Working Group | Accessibility improvements across Fedora | +| Legal | Legal counsel and license compliance | +| Strategy 2028 | Long-term strategic planning initiative | + +## Engineering Branch: FESCo + +### Core Engineering Teams + +| Team | Purpose | +|------|---------| +| Packaging Committee | Defines and maintains packaging guidelines and standards | +| Fedora Packagers | Maintains packages in the Fedora repository | +| Proven Packagers | Trusted packagers with commit access across all packages | +| Scientific Apps | Scientific computing applications and workflows | +| Kernel | Kernel packaging, testing, and maintenance | +| Fonts | Font packaging and typography | +| Sponsors | Mentors and sponsors new package maintainers | +| Release Engineering | Builds, composes, and ships Fedora releases | +| Infrastructure | Maintains Fedora Project infrastructure and services | +| Quality Assurance | Testing, validation, and quality control | +| Security | Security response, hardening, and vulnerability management | +| AI & Machine Learning | AI/ML tooling, frameworks, and infrastructure | +| Copr | Community build system for third-party repositories | +| EPEL | Extra Packages for Enterprise Linux | + +### Alternate Architectures + +| Team | Purpose | +|------|---------| +| POWER | POWER architecture support | +| s390x | IBM Z (s390x) architecture support | +| ARM/AArch64 | ARM 32-bit and 64-bit architecture support | +| PowerPC64le | Little-endian PowerPC 64-bit support | +| x86_64 | Primary 64-bit x86 architecture | +| RISC-V | RISC-V architecture support | + +### Editions + +| Team | Purpose | +|------|---------| +| Cloud | Fedora Cloud Edition for cloud environments | +| Workstation | Fedora Workstation Edition for desktop users | +| Server | Fedora Server Edition for server deployments | +| CoreOS | Container-focused minimal OS with automatic updates | +| Silverblue | Immutable desktop OS using OSTree | +| IoT | Fedora IoT Edition for edge and embedded devices | + +### Spins + +| Team | Purpose | +|------|---------| +| KDE | KDE Plasma desktop spin | +| Xfce | Xfce desktop spin | +| Budgie | Budgie desktop spin | +| Cinnamon | Cinnamon desktop spin | +| LXDE | LXDE lightweight desktop spin | +| LXQt | LXQt lightweight desktop spin | +| Mate/Compiz | MATE desktop with Compiz compositing | +| Sway | Sway tiling Wayland compositor spin | +| i3 | i3 tiling window manager spin | +| Phosh | Phosh mobile interface spin | +| Astronomy | Astronomy tools and applications | +| Design Suite | Creative and design tools | +| Gaming | Gaming-focused spin | +| Jam | Audio production and music creation | +| Kinoite | Immutable KDE desktop using OSTree | +| Neuro Fedora | Neuroscience research tools | +| Sugar on a Stick | Sugar learning platform for education | + +### Other Engineering + +| Team | Purpose | +|------|---------| +| Containers | Container tools and runtime support | +| Initiatives | Cross-cutting engineering initiatives | +| Websites & Apps Team Revamp | Engineering-focused website and application modernization | + +## Mindshare Branch: Mindshare Committee + +### Core Mindshare Teams + +| Team | Purpose | +|------|---------| +| CommOps | Community operations and health metrics | +| Design | Visual identity and user experience | +| — Graphics | Graphic design assets and branding | +| — UI/UX | User interface and user experience design | +| — Wallpapers | Desktop wallpaper creation | +| — Creative Freedom Summit | Design community event | +| Badges | Fedora Badges system for community recognition | +| Magazine | Fedora Magazine publication | +| Community Blog | Community-driven blog content | +| Podcast | Fedora podcast production | +| Docs | Documentation team | +| Moderation | Community moderation across platforms | +| Websites & Apps | Public-facing websites and applications | + +### Community Programs + +| Team | Purpose | +|------|---------| +| Join SIG | Onboarding and new contributor experience | +| Marketing | Marketing campaigns and promotion | +| Ambassadors | Fedora representation at events worldwide | +| Ambassador Emeritus | Retired ambassadors program | +| Advocate | Fedora advocacy and evangelism | +| Mentored Projects | Structured mentorship for contributors | +| Mentor Summit | Annual mentor training and coordination event | +| Outreachy | Internship program for underrepresented groups | + +### Globalization (G11N) + +| Team | Purpose | +|------|---------| +| Globalization | Coordinates internationalization and localization efforts | +| — Localization (L10N) | Translation and localization to different languages | +| — Internationalization (I18N) | Infrastructure and tooling for international support | + +### Communication Platforms + +| Team | Purpose | +|------|---------| +| Discussion (Discourse) | Fedora Discussion forum platform | +| Ask Fedora | Community question and answer platform | +| IRC Support | Internet Relay Chat support channels | +| Matrix | Matrix chat platform support | diff --git a/templates/discourse-post.md b/templates/discourse-post.md new file mode 100644 index 0000000..e53c021 --- /dev/null +++ b/templates/discourse-post.md @@ -0,0 +1,76 @@ +# Discourse Post Template + +> This template defines the format for Fedora Discussion meeting summary topics. +> The Gem fills in `{{PLACEHOLDER}}` fields automatically. +> Contributors can fork this repository and customize the template to match their team's style. + +## Title Options + +The Gem will generate three title options following this format: ` Meeting (): ` + +1. {{TITLE_OPTION_1}} +2. {{TITLE_OPTION_2}} +3. {{TITLE_OPTION_3}} + +--- + +## Post Body + +Everything below this line is the post body content that will be posted to Fedora Discussion. + +--- + +Happy {{DAY_OF_WEEK}}, Fedora folks! :waving_hand: Here is a summary of the recent meeting of the **{{TEAM_NAME}}** held on **{{MEETING_DATE}}**. + +{{TEAM_CONTEXT_SENTENCE}} + +**Topics discussed in this meeting:** +{{TOPICS_BULLETED_LIST}} + +_Note: {{AI_TOOL_NAME}} was used to summarize the Meetbot-generated HTML log of the public meeting. I edited the AI-generated output before making this Fedora Discussion topic. If you notice mistakes, please provide a correction as a reply to this topic._ + +--- + +**Meeting Links:** + +- [Text Log]({{TEXT_LOG_URL}}) +- [HTML Log]({{HTML_LOG_URL}}) +- [Text Minutes]({{TEXT_MINUTES_URL}}) +- [HTML Minutes]({{HTML_MINUTES_URL}}) + +--- + +# Executive Summary + +{{EXECUTIVE_SUMMARY}} + +# Action Items + +{{ACTION_ITEMS_LIST}} + +# Detailed Meeting Log + +{{DETAILED_MEETING_LOG}} + +--- + +## Placeholder Reference + +| Placeholder | Description | Source | +|-------------|-------------|--------| +| `{{TITLE_OPTION_1}}` | First title suggestion with engaging summary hook | Generated by Gem from meeting content | +| `{{TITLE_OPTION_2}}` | Second title suggestion with alternative hook | Generated by Gem from meeting content | +| `{{TITLE_OPTION_3}}` | Third title suggestion with alternative hook | Generated by Gem from meeting content | +| `{{DAY_OF_WEEK}}` | Day of week the meeting was held (e.g., "Monday") | Derived from meeting date | +| `{{TEAM_NAME}}` | Full name of the team or working group | Extracted from meetbot configuration or meeting header | +| `{{MEETING_DATE}}` | Meeting date in YYYY-MM-DD format | Extracted from meetbot log filename or header | +| `{{TEAM_CONTEXT_SENTENCE}}` | One sentence describing what the team does or current focus | Generated by Gem or configured in team settings | +| `{{TOPICS_BULLETED_LIST}}` | Markdown bulleted list of major topics covered | Generated by Gem from meeting structure | +| `{{AI_TOOL_NAME}}` | Name and version of AI tool used for summarization | System-provided (e.g., "Google Gemini 2.5 Flash") | +| `{{TEXT_LOG_URL}}` | URL to plain text meetbot log | Constructed from meeting date and team identifier | +| `{{HTML_LOG_URL}}` | URL to HTML formatted meetbot log | Constructed from meeting date and team identifier | +| `{{TEXT_MINUTES_URL}}` | URL to plain text meetbot minutes | Constructed from meeting date and team identifier | +| `{{HTML_MINUTES_URL}}` | URL to HTML formatted meetbot minutes | Constructed from meeting date and team identifier | +| `{{EXECUTIVE_SUMMARY}}` | High-level summary of key decisions and discussions | Generated by Gem from full meeting log | +| `{{ACTION_ITEMS_LIST}}` | Formatted list of action items with assignees | Extracted by Gem from #action directives in meetbot log | +| `{{DETAILED_MEETING_LOG}}` | Topic-by-topic breakdown of discussion | Generated by Gem with context and detail | diff --git a/templates/forgejo-comment.md b/templates/forgejo-comment.md new file mode 100644 index 0000000..538e114 --- /dev/null +++ b/templates/forgejo-comment.md @@ -0,0 +1,66 @@ +# Forgejo Comment Template + +> This template defines the format for per-ticket Forgejo comment updates posted after meetings. +> The Gem generates one comment per ticket discussed during the meeting. +> Contributors can fork this repository and customize the comment format to match their team's workflow. + +## Comment Body + +_Discussed in [{{MEETING_DATE}} {{TEAM_NAME}} meeting]({{DISCUSSION_TOPIC_URL}})._ + +--- + +{{TICKET_SUMMARY}} + +{{FOLLOW_UP_ITEMS}} + +## Output Rules + +The Gem produces one comment block per ticket discussed in the meeting. +Each block is clearly labeled with the ticket number and Forgejo URL. +These comment blocks appear after the Discourse post output, in the order tickets were discussed. + +### Formatting Example + +Each ticket comment block appears in the Gem output as follows: + +``` +--- +### Forgejo Comment: {{TICKET_LABEL}} — {{TICKET_URL}} + +_Discussed in [{{MEETING_DATE}} {{TEAM_NAME}} meeting]({{DISCUSSION_TOPIC_URL}})._ + +--- + +{{TICKET_SUMMARY}} + +{{FOLLOW_UP_ITEMS}} +--- +``` + +## Content Guidelines + +The `{{TICKET_SUMMARY}}` field should contain a maximum of 5 sentences. +Focus on what was discussed about this specific ticket, what was decided, and why. +Avoid generic summaries that could apply to any ticket. + +The `{{FOLLOW_UP_ITEMS}}` field must include verbatim text from Meetbot directives: +- `#agreed` statements and their context +- `#rejected` proposals and rationale +- Vote tallies if present (e.g., "Vote passed +5/2/-0") +- `#action` items with assignees clearly identified + +Each comment opens with the italic provenance line linking to the Discourse topic. +This establishes context and provides a path back to the full meeting discussion. + +## Placeholder Reference + +| Placeholder | Description | Source | +|-------------|-------------|--------| +| `{{MEETING_DATE}}` | Meeting date in YYYY-MM-DD format | Extracted from meetbot log filename or header | +| `{{TEAM_NAME}}` | Full name of the team or working group | Extracted from meetbot configuration or meeting header | +| `{{DISCUSSION_TOPIC_URL}}` | URL to the Fedora Discussion topic for this meeting | Generated after Discourse post is created | +| `{{TICKET_SUMMARY}}` | 1-5 sentence summary of what was discussed about this ticket | Generated by Gem from meeting context | +| `{{FOLLOW_UP_ITEMS}}` | List of action items, decisions, and votes for this ticket | Extracted by Gem from meetbot directives | +| `{{TICKET_LABEL}}` | Human-readable ticket identifier (e.g., "Issue #42") | Extracted from discussion or issue tracker reference | +| `{{TICKET_URL}}` | Full URL to the ticket in Forgejo | Extracted from discussion or constructed from ticket number |