Commit 76275ee
fix(navigation): show formation-stage projects in lens dropdown (#616)
* fix(navigation): show formation-stage projects in lens
Three independent blockers prevented Formation - Engaged
projects from appearing in the project lens dropdown for
executive directors:
1. LENS_PERSONA_MAP excluded executive-director from the
project lens, so EDs never entered eligibleUids.
2. buildQuery used filters: ['stage:Active'], which excluded
Formation - Engaged projects upstream.
3. fetchSelectedItem rejected any project whose stage was
not 'Active', so UID-based injection also failed.
Fix: add executive-director to LENS_PERSONA_MAP.project,
switch the project lens to filters_or for stage matching,
and allow Formation - Engaged in fetchSelectedItem.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* fix(review): address PR #616 review feedback
Address review comment from coderabbitai[bot]:
- navigation.service.ts: scope Formation - Engaged allowance in
fetchSelectedItem to the project lens only, keeping the foundation
lens strictly Active to prevent formation-stage foundations from
being re-injected via selectedUid (per coderabbitai[bot])
Resolves 1 review thread.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* fix(navigation): show formation foundations in lens
A foundation goes Funded+Membership BEFORE going Active.
During that window the foundation lens excluded it (upstream
query required stage:Active) while filterPageResources also
rejected it (computeIsFoundation requires Active). The project
appeared only in the project lens, not the foundation lens.
Fix by splitting "is a live foundation" (computeIsFoundation,
unchanged) from "eligible for the foundation nav dropdown"
(new computeIsFoundationEligible, allows Formation - Engaged).
The foundation lens buildQuery now uses filters_or for stage
(Active OR Formation - Engaged) combined with AND filters for
funding/membership. filterPageResources and fetchSelectedItem
for the foundation lens use the new helper.
Also add ProjectStage enum mirroring the upstream Goa DSL in
lfx-v2-project-service (ProjectStageAttribute) and replace
bare string literals throughout.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* refactor(navigation): consolidate to single computeIsFoundation
Remove computeIsFoundationEligible. Extend computeIsFoundation
to include Formation - Engaged + Membership projects so there
is a single source of truth for what constitutes a foundation.
Also remove the 'SFDC' reference from ProjectStage enum JSDoc.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* docs(navigation): document filters vs filters_or semantics
Add inline JSDoc to LensItemsQuery clarifying that filters is
AND logic and filters_or is OR logic, combined with AND between
them — matching the upstream query-service contract.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* fix(navigation): include Formation - Exploratory in project lens
Exploratory-stage projects should be visible to persona-eligible
users in the project dropdown, same as Engaged.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* docs(interfaces): remove misleading JSDoc from stage
The `stage` field is required (no `?`), so the "optional to
tolerate pre-rollout records" comment was misleading. The
`| string` union already handles non-enum values.
Fixes copypastedfrom funding? JSDoc on required field.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Issue: LFXV2-2344
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
* refactor(navigation): extract PROJECT_LENS_ALLOWED_STAGES
Extract the project-lens stage allowlist into a shared module-level
constant to eliminate duplication between fetchSelectedItem and
buildQuery, and fix the comment to accurately describe all three
included stages.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Issue: LFXV2-3162
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
---------
Signed-off-by: Trevor Bramwell <tbramwell@linuxfoundation.org>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent d0069b4 commit 76275ee
7 files changed
Lines changed: 52 additions & 9 deletions
File tree
- apps/lfx-one/src/server/services
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
25 | 28 | | |
26 | 29 | | |
27 | 30 | | |
| |||
168 | 171 | | |
169 | 172 | | |
170 | 173 | | |
171 | | - | |
172 | | - | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
173 | 179 | | |
174 | 180 | | |
175 | 181 | | |
| |||
191 | 197 | | |
192 | 198 | | |
193 | 199 | | |
194 | | - | |
195 | | - | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
196 | 211 | | |
197 | 212 | | |
198 | 213 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
| 55 | + | |
55 | 56 | | |
| 57 | + | |
| 58 | + | |
56 | 59 | | |
57 | 60 | | |
58 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
15 | | - | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
38 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
39 | 44 | | |
40 | 45 | | |
41 | 46 | | |
| |||
46 | 51 | | |
47 | 52 | | |
48 | 53 | | |
49 | | - | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
0 commit comments