docs: bring the documentation up to the 5.4 alphas - #409
Open
pjdoland wants to merge 1 commit into
Open
Conversation
The changelog stopped at 5.1.0 with everything since sitting in an [Unreleased] block, and several documented behaviors had drifted from the code. This covers everything merged through 5.4.0-a2. CHANGELOG. The [Unreleased] block was exactly 5.2.0's content, so it is retitled and dated from the published release. Adds the four missing sections: 5.2.0, 5.2.1, 5.3.0, 5.3.1, and a 5.4.0 section for what the two alphas carry (ACP agent mode, the proxied Jupyter UI tools MCP server, the dependency floor raise, and three chat rendering and input fixes). Dates come from the PyPI and GitHub release records, not from commit dates. 5.3.0 gets a migration note for the ruleset frontmatter key it removed. Rulesets. Both frontmatter examples in the guide used scope.kernels, which 5.3.0 made a hard error, so following the documentation produced a ValueError naming the rule file. The frontmatter reference also listed `directories`, which the code has never read (it reads directory_patterns), so a rule scoped that way silently applied everywhere instead of where the author intended; documented the default priority as 100 when it is 0; and omitted languages, kernel_names, and cell_types entirely. Every frontmatter block in the file now parses, and the two claims added about directory_patterns are checked against the matcher. The management section described a Settings Rules tab that does not exist; replaced with what does (active: false in the file, and the three REST routes). Also notes that `apply` is parsed and reported but never consulted when selecting rules, which is the state of the code. Admin guide. New section for the proxied Jupyter UI tools MCP server with its five environment variables and the relay route, plus the route table row it was missing. Adds NBI_CLAUDE_INLINE_COMPLETION_MAX_TOKENS and NBI_ACP_AGENT_COMMAND, the two environment variables added since 5.1.0 that nothing documented. The version matrix stopped at 5.1.x and the pin example recommended mcp==1.27.*, which no longer satisfies the floor; the surrounding text also said mcp carries no upper bound, when it is capped below 2.0. Corrected the claim that NBI has no Python test suite: there are around 1,400 tests and CI has been running them. README. Documents the opt-in per-turn usage footer and why the cost figure is withheld off a first-party endpoint, the current Claude model defaults and the auto-complete output cap, multi-language and kernel-aware notebooks, and NBI_ACP_AGENT_COMMAND. Corrects the MCP support line: prompts are supported and have been since before 5.1.0, resources are not. CONTRIBUTING. Same test-suite correction, with the invocation. Every code-level claim was checked against the source; two changelog entries were rewritten after the check showed they described the wrong mechanism (plmbr#386 is a read-through-symlink confidentiality issue, not a glob enumeration one, and plmbr#387's containment check was never bypassed, the stat just happened before it).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The changelog stopped at 5.1.0, with everything since sitting in a single
[Unreleased]block, even though 5.2.0, 5.2.1, 5.3.0, and 5.3.1 have all shipped to PyPI and 5.4.0 has two alphas out. Along the way I checked the rest of the documentation against the code, and several documented behaviors had drifted far enough to be actively wrong. This brings everything current through5.4.0a2, on the assumption the alpha work lands as 5.4.0.Docs only. No code changes.
Changelog
The existing
[Unreleased]block turned out to be exactly 5.2.0's content, so it is retitled and dated rather than rewritten. Adds the four missing sections plus a 5.4.0 section for the alphas:[5.4.0] - unreleased[5.3.1] - 2026-07-29[5.3.0] - 2026-07-22[5.2.1] - 2026-06-26[5.2.0] - 2026-06-18[Unreleased]contentDates come from the PyPI upload records and the GitHub releases, not from commit dates. 5.3.0 gets a migration note for the ruleset frontmatter key it removed.
Corrections, not just additions
The audit turned up documentation that would mislead someone following it:
docs/rulesets.mddocumented frontmatter that raises. Both examples in the file usedscope.kernels, which 5.3.0 turned into a hardValueError. Copying either one out of the docs produced a rule that failed to load.directories:has never been a real key. The frontmatter reference listed it; the code readsdirectory_patterns. A rule scoped withdirectoriesparses fine and silently applies everywhere, which is worse than an error. The reference now also coverslanguages,kernel_names, andcell_types, none of which were documented, and corrects the stated defaultpriorityfrom 100 to 0.active: falsein the file, and the three REST routes the server does expose. I also noted thatapplyis parsed, validated, and reported by the rules API but never consulted when selecting rules, since documenting it as a control would be misleading.mcp==1.27.*, which no longer satisfies the floor. The surrounding text also saidmcpcarries no upper bound; it is capped below 2.0, because 2.x moved the FastMCP server out of the SDK and the extension fails to load against it.Additions
NBI_UI_TOOLS_*environment variables, and the/notebook-intelligence/ui-toolsroute (missing from the route table). PlusNBI_CLAUDE_INLINE_COMPLETION_MAX_TOKENSandNBI_ACP_AGENT_COMMAND, which were the only two environment variables added since 5.1.0 that nothing documented.Fact-checking
Every code-level claim in the new text was checked against the source rather than against commit subjects or PR titles. That changed the outcome twice:
search_filessandboxed only the search root and then opened each hit directly, so a workspace symlink pointing outside it let an agent read arbitrary host files throughcontent_patternmatches.is_dir(follow_symlinks=True)ran on the target before the check, so the probe itself reached past the boundary.Also verified by execution rather than reading: every frontmatter block now in
docs/rulesets.mdparses, and the two claims added aboutdirectory_patterns(fnmatch semantics, and that a bare path does not match its own children) were run through the matcher. All 16 issue and PR numbers cited resolve. All internal links and anchors across the doc set resolve.Checks:
pytest tests/1437 passed,jlpm test381 passed,prettier --checkclean on every markdown file.One thing I did not change
While verifying the MCP prompt syntax I was about to document,
parse_promptinai_service_manager.pyturned out to require a third colon (/mcp:server:prompt:input) before it recognizes an MCP prompt at all, while the chat input's autocomplete offers/mcp:server:promptand the function's own comment documents/mcp:server_name:prompt_name input. Typing input after the autocompleted form leavescommandempty and the whole string falls through as plain input. I left the code alone and kept the README to what I could verify (that prompts are supported and appear in the slash-command autocomplete), rather than documenting either form as working. Worth a look separately.