View all documentations

Team Members Configuration

Wizard uses a team members list to map GitHub users to personal HR repositories, track onboarding dates, and enforce PR time tracking rules.

File Location

The canonical file lives in the holdex/hr-internal repository (HR access only).

For production deployments, the file is fetched at build time via the TEAM_MEMBERS_SOURCE environment variable and bundled into the server — it is never committed to this repository.

For local development and preview deployments, TEAM_MEMBERS_SOURCE can be left unset. Wizard then reads config/team-members.json from your working tree. That file is gitignored and not in the repository — copy config/team-members.json.example to config/team-members.json to get started locally.

To add or update a team member, edit the file in holdex/hr-internal. Changes take effect on the next production deployment.

File Format

The file is a JSON object with an hr_team key and a members array. Each entry in members follows the structure documented in config/team-members.json.example:

{
  "hr_team": "org/hr-admins",
  "members": [
    {
      "repo": "org/hr-member-firstname-lastname",
      "username": "github-username",
      "issue": 1,
      "salaryIssue": 2,
      "agreement": "https://github.com/org/hr-member-firstname-lastname/blob/main/AGREEMENT.md",
      "startDate": "2024-01-01",
      "skipDailyReminder": false,
      "isMandatory": true,
      "isManager": false,
      "billingManager": false
    }
  ]
}

The legacy flat-array shape (just the members list, no hr_team) is still accepted for backward compatibility.

Top-Level Fields

Field Required Description
hr_team No GitHub team in org/slug format, tagged on monthly invoice comments for visibility.
members Yes Array of team member entries, documented below.

Member Fields

Field Required Description
repo Yes Personal HR repository in owner/repo format.
username Yes GitHub login for the team member.
issue Yes Issue number of the member's main HR issue in their HR repo.
salaryIssue No Issue number of the HR: Salary sub-issue, if created.
agreement No URL to the member's agreement document.
startDate No Agreement signing date (YYYY-MM-DD). Used for leave accrual when leave.yaml is missing.
skipDailyReminder No When true, skips daily PR reminder sub-issues for this member. Defaults to false.
isMandatory No When true, the member must submit PR time even if their organization is whitelisted. See Whitelist.
isManager No When true, promotes the member to product-owner responsibilities (Goals, leave approval, restricted commands where applicable). Defaults to false.
billingManager No When true, grants access to view all contractors' invoices and team-wide Cost Breakdown reports (/stats/costs). All team members can access /stats/costs for their own data only. isManager does not grant billing access on its own. Defaults to false.
  • Mandatory users referenced in Whitelist are defined here via isMandatory.
  • Leave accrual uses startDate when a member's leave.yaml is not yet present.
  • HR sub-issues (daily reminders, bug reports, salary) are created against the repo and issue fields.
  • hr_team is read by the monthly billing task to tag a team on invoice comments.
  • billingManager members can run on-demand cost allocation reports for any contributor or the whole team; see Cost Breakdown. All team members can run reports for their own data.