{"id":30612593,"url":"https://github.com/pellizzetti/pdr","last_synced_at":"2025-08-30T05:34:05.591Z","repository":{"id":310083650,"uuid":"1038190272","full_name":"pellizzetti/pdr","owner":"pellizzetti","description":"Gathering data and generating evaluations for a given performance development review cycle","archived":false,"fork":false,"pushed_at":"2025-08-15T15:18:44.000Z","size":2284,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-15T17:33:17.913Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pellizzetti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-14T19:10:31.000Z","updated_at":"2025-08-15T15:18:47.000Z","dependencies_parsed_at":"2025-08-15T17:33:23.555Z","dependency_job_id":"e36964c0-e734-492c-afb5-258385e353da","html_url":"https://github.com/pellizzetti/pdr","commit_stats":null,"previous_names":["pellizzetti/pdr"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/pellizzetti/pdr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pellizzetti%2Fpdr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pellizzetti%2Fpdr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pellizzetti%2Fpdr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pellizzetti%2Fpdr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pellizzetti","download_url":"https://codeload.github.com/pellizzetti/pdr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pellizzetti%2Fpdr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272808667,"owners_count":24996551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-30T05:34:02.491Z","updated_at":"2025-08-30T05:34:05.539Z","avatar_url":"https://github.com/pellizzetti.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PDR (performance development review)\n\nPDR are a PITA. This project is meant to help me in the process for gathering data and generating evaluations for a given performance development review cycle.\n\n## Collecting data\n\n### JIRA\n\n1. **Run Jira export script**\n  - Execute `scripts/jira-issues-export.ts` to retrieve tasks from Jira:\n    ```\n    bun run jira-issues-export.ts 2025-01-01 2025-08-10 --project KALI\n    ```\n\n2. **Run Jira compilation prompt**\n  - Use the following prompt with the exported Jira tasks file:\n    ```\n    You are an expert in processing Jira export data and creating performance cycle summaries.\n    \n    I have Jira issues exported in two formats inside 1s2025/jira/:\n    jira-issues.csv\n    jira-issues.json\n    \n    Both contain the same data — use whichever format you prefer.\n    \n    The relevant fields are:\n        key\n        summary\n        points\n        status\n        type\n        assignee\n        reporter\n        priority\n        created\n        updated\n        resolutiondate\n        project\n        url\n    \n    Your task\n        Read all Jira issues from the given file.\n        For any issue where assignee is empty (Unassigned), set the assignee to \"Guilherme Pellizzetti\".\n        Group tasks by assignee.\n        Inside each assignee group:\n        Group further by project (project field).\n        Inside each project, group by type (Story, Bug, Task, Epic, etc.).\n    \n        For each task, include:\n        Key (as a clickable link using url)\n        Summary\n        Points\n        Status\n        Priority\n        Created date\n        Updated date\n        Resolution date (if present, otherwise \"N/A\")\n    \n        At the top of the output, generate a summary table per assignee:\n        Total number of issues\n        Total number of points\n        Count per status\n        Count per type\n        Count per project\n    \n        Dates should be formatted as YYYY-MM-DD.\n        Order tasks by created date (ascending) inside each group.\n    \n    Output format\n    \n    # Jira Issues Summary by Person\n    \n    ## Overview Table by Assignee\n    | Assignee | Total Issues | Total Points | Stories | Bugs | Tasks | In Progress | Done | To Do |\n    | -------- | ------------ | ------------ | ------- | ---- | ----- | ----------- | ---- | ----- |\n    | Guilherme Pellizzetti | 12 | 32 | 5 | 3 | 4 | 3 | 5 | 4 |\n    | John Doe | ... | ... | ... | ... | ... | ... | ... | ... |\n    \n    ## Assignee: Guilherme Pellizzetti\n    ### Project: KALI\n    #### Stories\n    - [KALI-2769](https://...) — Configurar NGINX do IoT Hub para receber requests mal formatadas (Status: To Do, Priority: Medium, Created: 2025-08-08, Updated: 2025-08-08, Resolved: N/A)\n    #### Bugs\n    ...\n    \n    Important:\n    Use Markdown headings and bullet points exactly as described.\n    Do not omit any issue.\n    Apply the “Unassigned → Guilherme Pellizzetti” rule before grouping.\n    Do not fabricate any data that isn’t in the CSV/JSON.\n    ```\n\n### TeamRetro\n\n3. **Download TeamRetro data**\n  - Go to TeamRetro settings\n  - Download the ZIP file containing all retros for the team\n  - Place the ZIP file in the `\u003cCYCLE\u003e/teamretro/` folder filtering by \u003cCYCLE\u003e in the filename\n\n4. **Run TeamRetro compilation script**\n  - Execute `scripts/teamretro-compile.ts` to compile retro information for the cycle:\n  \u003e [!WARNING] \n  \u003e This script should be reviewed and improved - I'll start tagging retro cards so it's easier to identify them during review preparation.\n  ```\n  bun run teamretro-compile.ts ./retros --name-contains kali-1s25 --out ./1s2025/teamretro --format md\n  ```\n\n### Slack\n\n5. **Gather Slack summaries**\n  - From relevant Slack channels and conversations, collect the AI-generated summaries\n\n6. **Run Slack compilation prompt**\n  - Use the following prompt with the collected Slack summaries:\n    ```\n    You are an expert at analyzing conversation data and summarizing it by participant.\n    \n    I have a folder named \u003cCYCLE\u003e/slack containing multiple text files.\n    Each file contains Slack messages from various channels and DMs, already compiled by Slack AI.\n    Messages may contain mentions in the form @username (e.g., @Pellizzetti).\n    \n    Your task:\n        Read all files in the \u003cCYCLE\u003e/slack folder.\n        Identify all messages where a user is mentioned (@username).\n        Group messages by mentioned username.\n    \n        For each mentioned user:\n            Provide a concise but detailed summary of what was discussed involving them.\n            Include relevant context (projects, decisions, problems discussed, actions taken).\n            Avoid repeating exact text from the messages unless it’s important for clarity.\n            If possible, categorize the discussions into themes (e.g., “Project updates”, “Technical issues”, “Decisions”, “Follow-ups”).\n    \n        At the end, output:\n            A summary report for each mentioned user.\n            A global index of all mentioned users with a short one-line description of their main involvement.\n    \n    Output format:\n        Markdown file\n        Use ## @username headings for each user’s section.\n        Under each heading, list bullet points grouped by theme.\n        Include a top-level # Mentions Summary heading with the global index table.\n    \n    Important:\n        Treat mentions case-insensitively.\n        Ignore system messages or bot messages unless they are directly relevant to the user mentioned.\n        Do not fabricate content — only summarize from the actual messages.\n    ```\n\n### Projects docs \u0026 reports\n\n7. **Assemble project documentation**\n  - Create documents for all projects completed in the cycle\n  - Place them in the corresponding `projects` folder (e.g., `\u003cCYCLE\u003e/projects`)\n\n8. **Export Weekly Status Report (WSR)**\n  - Export the WSR as a CSV file\n  - Place `wsr.csv` in the cycle's projects folder\n\n9. **Export satisfaction surveys**\n  - Export satisfaction survey results as CSV\n  - Add them to the cycle's projects folder\n\n10. **Include cycle results document**\n  - If available, place the cycle results document (usually containing metrics) in the projects folder\n\n## Reviews\n\n### Run evaluation prompts\n  - For each required evaluation, run the appropriate prompt for that person's role and level - it could be useful to gather the carrer plan too.\n  \u003e [!IMPORTANT]\n  \u003e The evaluation format changes annually - always adapt the structure to match the current year's template.\n  - Example - my own evaluation prompt for `1s2025`:\n    ```\n    You are an expert in performance review writing.\n    \n    I will provide you with multiple data sources containing information about my work during the first semester of 2025.\n    Your task is to analyze all provided sources and produce a self-performance review in Brazilian Portuguese, written in a slightly casual but still professional tone.\n    The output must be saved as a Markdown file with clear section headings matching the review form.\n    \n    Data sources:\n    Jira data: 1s2025/jira/jira-issues-summary.md\n    Slack compilations: 1s2025/slack/slack-mentions-summary.md\n    TeamRetro summaries: 1s2025/teamretro/teamretro-compilation.md\n    Projects folder: 1s2025/projects/ (contains two .md files with author, docs, and release messages, plus a .csv satisfaction survey)\n    Weekly Status Report: 1s2025/projects/wsr.csv (spreadsheet log tracking weekly progress on projects)\n    \n    Important rules:\n    If it is unclear who performed a certain action, gave an idea, or led an initiative, attribute it to Guilherme Pellizzetti.\n    The project flink-state-manager.md is not owned by Guilherme Pellizzetti and should not be credited as such. He contributed significantly to the Node.js part only, but ownership belongs to Bruno Scholl.\n    \n    Review Form Structure\n    \n    You must fill the following sections with detailed content based on the data sources above.\n    Each section should have clear examples to support statements, avoiding generic answers.\n    Focus on connecting behaviors, actions, and results to Cobli’s Career Path expectations for my level.\n    \n    1. Autonomia e tomada de decisão\n    \n    Evaluate how I demonstrated autonomy and decision-making. Consider:\n    Taking decisions with full responsibility, aligned with Cobli’s procedures.\n    Actively supporting problem resolution and decision-making in other areas, aligned with Cobli’s strategies and goals.\n    Identifying needs in the area and creating impactful action plans.\n    Properly planning work considering objectives, resources, deadlines, and priorities.\n    \n    Ratings: Insuficiente | Atende Parcialmente | Atende | Acima das Expectativas | Excepcional\n    \n    2. Comunicação e colaboração\n    \n    Evaluate my communication and collaboration. Consider:\n        Communicating assertively in complex situations and mediating conflicts.\n        Ensuring collaboration in complex projects, aligning all stakeholders.\n        Giving constructive feedback and identifying development opportunities for peers and leadership.\n        Participating in cross-team forums, contributing beyond my area.\n    \n    Ratings: Insuficiente | Atende Parcialmente | Atende | Acima das Expectativas | Excepcional\n    \n    3. Domínio técnico e execução\n    \n    Evaluate my technical mastery and execution. Consider:\n    Leading complex projects and processes, ensuring solution effectiveness and cross-area integration.\n    Applying technical knowledge and strategic vision to lead innovations and solve critical problems.\n    Facilitating adaptation to organizational and procedural changes.\n    Proactively seeking new knowledge and solutions to improve professional growth and area projects.\n    \n    Ratings: Insuficiente | Atende Parcialmente | Atende | Acima das Expectativas | Excepcional\n    \n    4. Resultados\n    \n    Evaluate the results delivered in the semester. Consider:\n        Achievement of team goals and individual deliveries (projects, initiatives, responsibilities).\n        Compare with the “team goals” spreadsheet (Mapping per person tab).\n        If rating differs from team goal achievement, explain with data and justification.\n    \n    Ratings: Insuficiente | Atende Parcialmente | Atende | Acima das Expectativas | Excepcional\n    \n    5. Próximos passos\n    \n    Based on results and behaviors, and the expected challenges for the next semester, define main development focuses.\n    \n    Final instructions:\n        Write the entire review in Brazilian Portuguese.\n        Use a slightly casual tone, but still aligned with professional standards.\n        Use Markdown headings matching the section titles above.\n        Include concrete examples from the data sources in each section.\n        Avoid overly generic statements; make it specific and impactful.\n    ```\n\n## Security\n\n### Encrypting review data\n\nAfter completing the review cycle, encrypt the sensitive folders containing personal data:\n\n```bash\ntar czf - cycles/\u003cCYCLE\u003e/ | gpg --symmetric --cipher-algo AES256 --output cycles/\u003cCYCLE\u003e.tar.gz.gpg\n\n# Example\ntar czf - cycles/1s2025/ | gpg --symmetric --cipher-algo AES256 --output cycles/1s2025.tar.gz.gpg\n# Remove original unencrypted folders after verifying encryption worked\nrm -rf cycles/1s2025/\n```\n\n**To decrypt when needed:**\n```bash\ngpg --decrypt \u003cCYCLE\u003e.tar.gz.gpg | tar xzf -\n```\n\n## Important Notes\n\n- Ensure all data is compiled before running final evaluation prompts for best results (duh!).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpellizzetti%2Fpdr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpellizzetti%2Fpdr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpellizzetti%2Fpdr/lists"}