Skip to content

Foundation scoping matches the immediate parent only — five more endpoints under-report the same way #2382

Description

@manishdixitlfx

Summary

#2378 found the Formations queue returning 3 rows instead of 126 because foundation scoping matches a project's immediate parent rather than its ancestry, and the LF root's direct children are 3 of 126.

#2380 fixed that one endpoint. While doing so it found the same shape on five others sharing ProjectService.getFoundationProjectUids:

  • /api/committees/my-committees
  • /api/user/meetings
  • /api/user/past-meetings
  • /api/user/latest-past-meetings
  • the public foundation directory

Several also lack the param validation #2369 added for foundation_uid on the queue.

Why it matters beyond the formations queue

The failure is silent in exactly the same way. A foundation with intermediate projects under it under-reports, and nothing on the page says so — the user sees a shorter list and has no reason to doubt it.

The formations queue made it obvious only because the root is the extreme case: 123 of 126 hidden. Elsewhere the gap will be smaller and therefore harder to notice, which does not make it less wrong. Production has 33 distinct parents across 126 formations, so intermediate nesting is the norm, not an edge case.

/api/committees/my-committees is worth looking at first: #2369 cited it as the naming precedent for the foundation_uid param, so it is the endpoint most likely to share the queue's exact assumptions.

What is not being claimed

I have not measured the under-report on any of these five. #2380 identified them by shared code path, not by observation. Someone should check each against production before deciding how urgent it is — the shape is the same but the impact depends on how many rows sit under intermediate parents in each case, and for some of them the answer may be none.

That measurement is the first task here, not the fix.

Relationship to the other two

If #2368 lands, most of this dissolves. If it does not land soon, each of these five needs its own decision, and the root special-case is the pattern to copy.

Worth deciding that at the top rather than per-endpoint — five copies of a workaround is how a workaround becomes the architecture.

Also

While in here: the missing foundation_uid validation on most of these. #2369 added validateFoundationUidParameter for the queue specifically because silently widening a filter the caller asked to narrow is the wrong failure direction. The same argument applies to every endpoint taking the param.

Refs #2378, #2380, #2368, #2369.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions