|
| 1 | +# Repository Health Review — 2026-08-04 |
| 2 | + |
| 3 | +**Repo:** [IntersectMBO/developer-experience](https://github.com/IntersectMBO/developer-experience) |
| 4 | +**Branch:** `chore/repo-health-review` |
| 5 | +**Reviewer:** Dan Baruka |
| 6 | +**Scope:** CI/CD, dependencies, backlog |
| 7 | + |
| 8 | +--- |
| 9 | + |
| 10 | +## Executive summary |
| 11 | + |
| 12 | +| Area | Status | Notes | |
| 13 | +| --- | --- | --- | |
| 14 | +| CI/CD | Needs improvement | Deploy works on `main`, but two overlapping Pages workflows and no PR build check | |
| 15 | +| Dependencies | Critical | `npm audit` on `main`: **174** vulns (1 critical, 51 high); 58 open Dependabot alerts | |
| 16 | +| Backlog | Needs triage | 12 open issues + 14 open PRs; several stale; branch count high (~34) | |
| 17 | +| Branch protection | Unverified / likely weak | API returned 404 for protection rules (may mean none configured for this token/role) | |
| 18 | + |
| 19 | +**Immediate priorities** |
| 20 | + |
| 21 | +1. Merge (or land equivalent of) security dependency fix — see [#259](https://github.com/IntersectMBO/developer-experience/issues/259) / [#260](https://github.com/IntersectMBO/developer-experience/pull/260) |
| 22 | +2. Deduplicate GitHub Pages deploy workflows |
| 23 | +3. Add a `pull_request` CI job that runs `npm ci` + `npm run build` in `website/` |
| 24 | +4. Triage stale PRs and run branch cleanup ([#135](https://github.com/IntersectMBO/developer-experience/issues/135)) |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## 1. CI/CD |
| 29 | + |
| 30 | +### What exists |
| 31 | + |
| 32 | +| Workflow | Trigger | Role | |
| 33 | +| --- | --- | --- | |
| 34 | +| `.github/workflows/deploy.yml` | `push` to `main`, `workflow_dispatch` | Build (`npm ci` + `npm run build`) then deploy Pages | |
| 35 | +| `.github/workflows/static.yml` | `push` to `main` when `website/**` changes, `workflow_dispatch` | Second full build + deploy to the same Pages environment | |
| 36 | +| `.github/workflows/changelog.yml` | version tags | Soft-check that `CHANGELOG.md` mentions the tag | |
| 37 | + |
| 38 | +Recent deploy runs on `main` (e.g. after PR #251) completed **successfully**. Dependabot update jobs also succeed. |
| 39 | + |
| 40 | +### Findings |
| 41 | + |
| 42 | +1. **Duplicate Pages deploy pipelines** |
| 43 | + Both `deploy.yml` and `static.yml` build and deploy to `github-pages` on pushes to `main`. That doubles CI minutes, can race on the same environment, and makes failures harder to reason about. |
| 44 | + **Recommendation:** Keep one workflow (prefer `deploy.yml` with `npm ci` + artifact upload). Delete or disable `static.yml`. |
| 45 | + |
| 46 | +2. **No pull-request CI** |
| 47 | + Docs/site PRs are not built until merge to `main`. Broken links (`onBrokenLinks: throw`) and build failures only surface post-merge. |
| 48 | + **Recommendation:** Add a lightweight `ci.yml` on `pull_request` paths `website/**` that runs: |
| 49 | + |
| 50 | + ```bash |
| 51 | + cd website && npm ci && npm run build |
| 52 | + ``` |
| 53 | + |
| 54 | +3. **Changelog workflow likely incomplete at repo root** |
| 55 | + `changelog.yml` runs `npm ci` at repository root, but there is no root `package.json`. The job mostly echoes a warning and does not regenerate the changelog. |
| 56 | + **Recommendation:** Point install/build at `website/` if needed, or replace with a docs-only check / release script that matches how versions are actually cut. |
| 57 | + |
| 58 | +4. **Action version drift** |
| 59 | + Open Dependabot PRs bump `actions/checkout` and `actions/setup-node` to v7 while workflows still pin v6. Fine to batch with a single CI PR after deduplicating workflows. |
| 60 | + |
| 61 | +5. **Branch protection** |
| 62 | + Could not read protection rules via API (404). Confirm in GitHub settings that `main` requires PR reviews and status checks once PR CI exists. |
| 63 | + |
| 64 | +### Suggested CI target state |
| 65 | + |
| 66 | +```text |
| 67 | +pull_request (website/**) → npm ci + build |
| 68 | +push main → single Pages deploy workflow |
| 69 | +tags v* → changelog/release check (optional, fixed paths) |
| 70 | +``` |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## 2. Dependencies |
| 75 | + |
| 76 | +### Audit snapshot (`website/` on `main`, 2026-08-04) |
| 77 | + |
| 78 | +```text |
| 79 | +npm audit: 174 vulnerabilities |
| 80 | + critical: 1 |
| 81 | + high: 51 |
| 82 | + moderate: 119 |
| 83 | + low: 3 |
| 84 | +``` |
| 85 | + |
| 86 | +### Open Dependabot alerts (org repo) |
| 87 | + |
| 88 | +| Severity | Count | |
| 89 | +| --- | --- | |
| 90 | +| critical | 2 | |
| 91 | +| high | 28 | |
| 92 | +| medium | 20 | |
| 93 | +| low | 8 | |
| 94 | +| **total** | **58** | |
| 95 | + |
| 96 | +**Packages involved (unique):** |
| 97 | +`body-parser`, `brace-expansion`, `dompurify`, `fast-uri`, `http-proxy-middleware`, `js-yaml`, `postcss`, `shell-quote`, `svgo`, `undici`, `webpack-dev-server`, `websocket-driver` |
| 98 | + |
| 99 | +### Mitigations already in flight |
| 100 | + |
| 101 | +- Issue [#259](https://github.com/IntersectMBO/developer-experience/issues/259) and PR [#260](https://github.com/IntersectMBO/developer-experience/pull/260) refresh `overrides` / `resolutions` and report **0** audit findings when applied. |
| 102 | +- `website/package.json` already uses overrides, but several pins on `main` remain inside vulnerable ranges until #260 lands. |
| 103 | +- Dependabot is configured weekly for npm (`/website`) and GitHub Actions, with grouping for Docusaurus/babel/webpack. |
| 104 | + |
| 105 | +### Quality notes |
| 106 | + |
| 107 | +- Both `package-lock.json` and `yarn.lock` exist under `website/` while `packageManager` declares Yarn and CI uses **npm**. Prefer one package manager in CI and docs to avoid drift. |
| 108 | +- `gray-matter` patch via `patch-package` is required for js-yaml 4 compatibility; keep until upstream/Docusaurus removes the need. |
| 109 | +- Open Dependabot PRs (#255–#258, #253, #245, #235) should be rebased/merged after the security override PR to reduce conflict churn. |
| 110 | + |
| 111 | +### Recommendations |
| 112 | + |
| 113 | +1. Merge security fix PR (#260) or equivalent as soon as reviewed. |
| 114 | +2. After merge, confirm Dependabot alerts close; close superseded Dependabot PRs. |
| 115 | +3. Standardize on **npm** for `website/` (match CI) or migrate CI to Yarn — do not keep both as first-class without a written policy. |
| 116 | +4. Add `npm run audit:ci` (`--audit-level=high`) as a non-blocking or blocking check in PR CI once baseline is clean. |
| 117 | + |
| 118 | +--- |
| 119 | + |
| 120 | +## 3. Backlog |
| 121 | + |
| 122 | +### Open issues (12) |
| 123 | + |
| 124 | +| # | Age (opened) | Labels | Title | Suggested action | |
| 125 | +| --- | --- | --- | --- | --- | |
| 126 | +| 259 | 2026-08-03 | Security, High | Fix security/quality deps | Merge paired PR #260 | |
| 127 | +| 232 | 2026-05-20 | High, good first issue | Session widget wrong link | Good candidate for next fix sprint | |
| 128 | +| 217 | 2026-04-16 | — | Duplicate home CTA buttons | Overlaps PR #218; triage together | |
| 129 | +| 201 | 2026-03-25 | — | Core contributor pathway gaps | Content; larger than a drive-by | |
| 130 | +| 192 | 2026-03-17 | enhancement | Website Audit | Umbrella; close or turn into checklist after #191 | |
| 131 | +| 191 | 2026-03-17 | documentation | Redundant empty pages | PR #261 in review | |
| 132 | +| 185 | 2026-03-16 | Medium, good first issue | Menu click area | Keep as GFI | |
| 133 | +| 150 | 2026-02-09 | good first issue | IntersectMBO page updates | Confirm still relevant | |
| 134 | +| 135 | 2026-01-06 | Medium | Branch cleanup | Still valid (~34 branches) | |
| 135 | +| 115 | 2025-11-24 | documentation | Missing tutorials content | Partially mitigated; still only one tutorial | |
| 136 | +| 100 | 2025-10-30 | enhancement | Recording descriptions | Ongoing as sessions publish | |
| 137 | +| 55 | 2025-05-21 | — | Linux-ARM releases | Likely off-scope for this docs site; close or transfer | |
| 138 | + |
| 139 | +### Open pull requests (14) |
| 140 | + |
| 141 | +| Bucket | PRs | Notes | |
| 142 | +| --- | --- | --- | |
| 143 | +| Security / deps (human) | #260 | Highest priority | |
| 144 | +| Docs cleanup | #261 | Closes #191 | |
| 145 | +| Dependabot | #258, #257, #256, #255, #253, #245, #235 | Rebase after #260 | |
| 146 | +| Docs / changelog | #242, #236, #196 | Review or refresh | |
| 147 | +| Feature / layout | #226, #218 | May need design review; #218 tied to #217 | |
| 148 | + |
| 149 | +Several PRs are **>30–90 days** old. Without triage they will keep conflicting with `main`. |
| 150 | + |
| 151 | +### Branches |
| 152 | + |
| 153 | +About **34** remote branches including many Dependabot and one-off session branches. Aligns with open issue [#135](https://github.com/IntersectMBO/developer-experience/issues/135). |
| 154 | + |
| 155 | +**Recommendation:** After merging current critical PRs, delete merged branches and archive abandoned ones (Dependabot recreates as needed). |
| 156 | + |
| 157 | +--- |
| 158 | + |
| 159 | +## 4. Action checklist |
| 160 | + |
| 161 | +### This week |
| 162 | + |
| 163 | +- [ ] Review/merge [#260](https://github.com/IntersectMBO/developer-experience/pull/260) (security deps) |
| 164 | +- [ ] Review/merge [#261](https://github.com/IntersectMBO/developer-experience/pull/261) (redundant pages) |
| 165 | +- [ ] Remove or disable duplicate `static.yml` Pages workflow |
| 166 | +- [ ] Add `pull_request` build workflow for `website/` |
| 167 | + |
| 168 | +### This month |
| 169 | + |
| 170 | +- [ ] Triage Dependabot PRs post-#260 |
| 171 | +- [ ] Branch cleanup pass (#135) |
| 172 | +- [ ] Decide npm vs Yarn for `website/` |
| 173 | +- [ ] Confirm `main` branch protection + required checks |
| 174 | +- [ ] Close or re-scope #55 if not applicable to this repo |
| 175 | +- [ ] Fix remaining content gaps (#115, #201) or split into smaller issues |
| 176 | + |
| 177 | +### Hygiene metrics to track |
| 178 | + |
| 179 | +| Metric | Baseline (2026-08-04) | Target | |
| 180 | +| --- | --- | --- | |
| 181 | +| `npm audit` high+critical | 52 | 0 | |
| 182 | +| Open Dependabot alerts | 58 | <5 | |
| 183 | +| Duplicate deploy workflows | 2 | 1 | |
| 184 | +| PR CI on website changes | No | Yes | |
| 185 | +| Open PRs older than 60 days | Several | 0 without owner comment | |
| 186 | +| Remote branches | ~34 | <15 active | |
| 187 | + |
| 188 | +--- |
| 189 | + |
| 190 | +## 5. Out of scope for this document |
| 191 | + |
| 192 | +- Implementing the CI/workflow code changes (follow-up PR recommended) |
| 193 | +- Rewriting tutorial/pathway content |
| 194 | +- Closing third-party Dependabot PRs without maintainer approval |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +*Generated as a maintainer health snapshot for Intersect DevEx. Update after #260/#261 land.* |
0 commit comments