theonedev/onedev · error · ExplicitException

Cannot find issue board:

Error message

Cannot find issue board: 

What it means

IssueBoardsPage resolves the board by name from the URL parameter. It computes the board index via BoardSpec.getBoardIndex over the project's hierarchy boards; a return value of -1 means no board with that name exists, and the page throws ExplicitException('Cannot find issue board: ' + boardName).

Source

Thrown at server-core/src/main/java/io/onedev/server/web/page/project/issues/boards/IssueBoardsPage.java:178

		}
		query = IssueQuery.merge(baseQuery, query);
		var sort = new EntitySort();
		sort.setDirection(EntitySort.Direction.ASCENDING);
		sort.setField(NAME_BOARD_POSITION);
		query.getSorts().add(sort);
		return query;
	}
	
	public IssueBoardsPage(PageParameters params) {
		super(params);
		
		boards = getProject().getHierarchyBoards();
		
		String boardName = params.get(PARAM_BOARD).toString();
		if (StringUtils.isNotBlank(boardName)) {
			boardIndex = BoardSpec.getBoardIndex(boards, boardName);
			if (boardIndex == -1)
				throw new ExplicitException(_T("Cannot find issue board: ") + boardName);
		} else {
			boardIndex = 0;
		}

		var iterationParam = params.get(PARAM_ITERATION).toString();
		iterationSelectionModel = new LoadableDetachableModel<>() {
			
			private IterationSelection getCurrentIteration() {
				if (!getIterations().isEmpty()) {
					var iteration = getIterations().iterator().next();
					if (!iteration.isClosed())
						return new IterationSelection.Specified(iteration);
				}
				return new IterationSelection.Unscheduled();
			}
			
			@Override
			protected IterationSelection load() {

View on GitHub (pinned to d44925c47c)

Solutions

  1. Correct the 'board' URL parameter to an existing board name exactly as shown on the Issues page.
  2. If the board was renamed or deleted, recreate it or update the shared/bookmarked link.
  3. Omit the board parameter to fall back to the project's first board.
  4. Check hierarchy projects: the board must exist in the current project or one of its parents.

Example fix

// before
GET /projects/app/~issues?board=Sprint%20Backlog%202
// after
GET /projects/app/~issues?board=Sprint%20Backlog
Defensive patterns

Strategy: validation

Validate before calling

List<BoardSpec> boards = project.getHierarchyBoards();
if (boards.stream().noneMatch(b -> b.getName().equals(boardName))) {
    throw new IllegalArgumentException("Board not found: " + boardName);
}

Try / catch

try {
    // open issue boards page with board param
} catch (ExplicitException e) {
    // fall back to default board (omit board param)
}

Prevention

When it happens

Trigger: Visiting the issue boards page with PARAM_BOARD set to a name that does not match any board in the project (or its hierarchy), e.g. /~issues?board=OldBoard after the board was renamed/deleted.

Common situations: Bookmarked or shared links saved before a board rename; board deleted during housekeeping; URL parameter typed manually with wrong casing/spelling; switching projects where the board name differs.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/287b7fe004a94bf8. Report an issue: GitHub.