• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dcdpr / jp / 28528159995
69%

Build:
DEFAULT BRANCH: main
Ran 01 Jul 2026 03:27PM UTC
Jobs 1
Files 423
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

01 Jul 2026 03:18PM UTC coverage: 67.827% (+0.2%) from 67.58%
28528159995

push

github

web-flow
feat(config, cli): Implement RFD 081 `enable` decomposition (#819)

The tool `enable` field is decomposed from a flat enum (`On`, `Off`,
`Explicit`, `Always`) into a two-field struct with a boolean `state` and
an `allow_toggle` policy (`any`, `never`, `if_named`,
`if_named_or_group`). The resolved form (`Enable`) is produced on
demand; config files, `base_config.json`, and `config_delta` events all
store and load the partial form (`PartialEnableConfig`).

Config accepts a bool shorthand, a legacy string (`"on"`, `"off"`,
`"explicit"`, `"always"`), or a table:

```toml
enable = true                                     # freely toggleable
enable = { state = false, allow_toggle = "if_named" }
enable = { state = true, allow_toggle = "never" } # locked-on
```

The directive engine in `apply_enable_tools` now consults
`Enable::accepts(scope)` before flipping a tool's state. Bulk directives
(`-t` / `-T` with no argument) silently skip tools whose policy forbids
a bulk flip; named directives that name a locked tool return a
user-visible error (`cannot disable \`describe_tools\`: this tool is
configured as locked-on`). The `describe_tools` builtin is registered as
`PartialEnableConfig::LOCKED_ON`.

The config validator now rejects `assistant.tool_choice = "<tool>"` when
the named tool resolves to locked-off — a locked-off tool is never sent
to the assistant, so forcing it would silently reference a tool that
does not exist in the tool list. `tool_definitions()` in `jp_llm`
enforces the same: locked-off tools are dropped even when named by
`forced_tool`.

`deep_merge_toml` is widened to recurse into inline tables so that a
nested key assignment like `conversation.tools.foo.enable.state` merges
the subfield instead of replacing the whole inline table.

Legacy string values normalize to the table form on the first
write-back, the same shorthand-to-table normalization `ModelIdConfig`
already performs.

RFD 081 status updated to Implemented. RFDs 055, 056, 057, and... (continued)

197 of 216 new or added lines in 8 files covered. (91.2%)

5 existing lines in 4 files now uncovered.

37867 of 55829 relevant lines covered (67.83%)

689.0 hits per line

Uncovered Changes

Lines Coverage ∆ File
11
75.04
8.71% crates/jp_config/src/conversation/tool.rs
4
46.3
3.15% crates/jp_cli/src/cmd/query.rs
3
93.82
-0.39% crates/jp_config/src/assignment.rs
1
88.46
0.44% crates/jp_config/src/lib.rs

Coverage Regressions

Lines Coverage ∆ File
2
46.3
3.15% crates/jp_cli/src/cmd/query.rs
1
80.0
2.35% crates/jp_cli/src/ctx.rs
1
93.82
-0.39% crates/jp_config/src/assignment.rs
1
75.04
8.71% crates/jp_config/src/conversation/tool.rs
Jobs
ID Job ID Ran Files Coverage
1 28528159995.1 01 Jul 2026 03:27PM UTC 423
67.83
GitHub Action Run
Source Files on build 28528159995
  • Tree
  • List 423
  • Changed 8
  • Source Changed 8
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #28528159995
  • 9e67e559 on github
  • Prev Build on main (#28521956381)
  • Next Build on main (#28538696237)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc