Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
b0e3062
Removed unused permissions & added header comments
lisa-tarbo Aug 26, 2026
4b4724e
Refactor to use env for release_tag for consistency & added header co…
lisa-tarbo Aug 26, 2026
f916605
ci.yml corrected comment about no concurrency
lisa-tarbo Aug 26, 2026
2c0dd83
update-confluence.yml - generating random string for Delimiter
lisa-tarbo Sep 2, 2026
df2578c
3 workflows: adding persist-credentials: false as afterwards no jobs …
lisa-tarbo Sep 2, 2026
a892f38
2 Fixes from PR review
lisa-tarbo Sep 4, 2026
91dedab
update changelog and docs from OCS PR #4361
github-actions[bot] Sep 4, 2026
2e0f400
Merge branch 'main' into tighten-workflow-permissions
lisa-tarbo Sep 4, 2026
7207006
Progressive disclosure and duplication ->2 checklists(page type & rev…
lisa-tarbo Sep 4, 2026
7d79b5c
Page Type table consistent on AGENTS & checklist. AGENTS tidy up (sim…
lisa-tarbo Sep 5, 2026
19af3cf
Accuracy of examples in frontmatter description for doc pr reviewer a…
lisa-tarbo Sep 5, 2026
5b385ff
Order of what to do first in Doc review checklist
lisa-tarbo Sep 5, 2026
d59d55a
PR reviewer: Add README section as different type of docs.
lisa-tarbo Sep 5, 2026
21aaf85
Small tidy ups
lisa-tarbo Sep 5, 2026
84172ca
Order of review steps important to do structure and then formating
lisa-tarbo Sep 5, 2026
9aa575f
Bump pymdown-extensions from 11.0 to 11.0.1
dependabot[bot] Sep 6, 2026
7a34630
ignore markdown lint cleck of CLAUDE.md files
lisa-tarbo Sep 6, 2026
05c36a1
Line length now < 650 for markdown check. Fixed changelog files with …
lisa-tarbo Sep 6, 2026
7da55c8
Apply the AGENTS.md files' prompt-linting override consistently with …
lisa-tarbo Sep 6, 2026
d472fdf
MarkdownLint Comments that now cover new checklists which are also pa…
lisa-tarbo Sep 6, 2026
f61b8ed
AGENTS.md - Summary table of page type end users match checklist page…
lisa-tarbo Sep 6, 2026
43b2128
ignore all CLAUDE.md files from markdown linting
lisa-tarbo Sep 6, 2026
c086704
Fix: add back "extends: ./.markdownlint.yaml" that deleted incorrectl…
lisa-tarbo Sep 6, 2026
999420d
Clarity on want semantic linefeeds for markdown - when written and wh…
lisa-tarbo Sep 6, 2026
56faf62
Fix: Doc-pr-reviewer needs link to OCS code, changelog categorisation…
lisa-tarbo Sep 6, 2026
0669763
Reviewer Agent: limit tools for security & removed check for external…
lisa-tarbo Sep 6, 2026
c108f65
Review fix- Simplified the AGENTS page-type conventions by removing "…
lisa-tarbo Sep 6, 2026
9b587ed
Clarity of validation rules improved based on review comments
lisa-tarbo Sep 6, 2026
29a3104
Extended allowed tools for Workflow, command and reveiw agent to gran…
lisa-tarbo Sep 6, 2026
293bff1
Fix: wording
lisa-tarbo Sep 6, 2026
63b84ab
Phase 1- Team Settings home page into. Removed links to providers for…
lisa-tarbo Sep 6, 2026
a66ce30
New Integrations Pg: Links to existing provider pages. Update steps o…
lisa-tarbo Sep 6, 2026
ee670f8
Kept removed internal links as a see also on Team Settings pg. Update…
lisa-tarbo Sep 6, 2026
460bcf1
Rename nav section to Team Settings
lisa-tarbo Sep 6, 2026
1b650da
Merge pull request #732 from dimagi/tighten-workflow-permissions
snopoke Sep 7, 2026
5caf30d
Merge pull request #789 from dimagi/disable-markdown-lint
snopoke Sep 7, 2026
435cf78
Merge pull request #790 from dimagi/team-settings-phase-1-and-2
snopoke Sep 7, 2026
f87ffed
Merge pull request #784 from dimagi/changelog-pr-4361-288
snopoke Sep 7, 2026
d21a874
Merge pull request #787 from dimagi/dependabot/uv/pymdown-extensions-…
snopoke Sep 7, 2026
bc1bd82
update changelog and docs from OCS PR #4312
github-actions[bot] Sep 7, 2026
527fc79
Merge pull request #793 from dimagi/changelog-pr-4312-291
snopoke Sep 7, 2026
d0a5f30
Merge pull request #786 from dimagi/doc-pr-review-agent
lisa-tarbo Sep 7, 2026
fb85511
update changelog and docs from OCS PR #4429
github-actions[bot] Sep 7, 2026
3037c11
Merge pull request #794 from dimagi/changelog-pr-4429-293
SmittieC Sep 7, 2026
51beb33
Line length now < 650 for markdown check. Fixed changelog files with …
lisa-tarbo Sep 6, 2026
a355192
Apply the AGENTS.md files' prompt-linting override consistently with …
lisa-tarbo Sep 6, 2026
acb4be7
Merge branch 'markdown-lint-fix' of https://github.com/dimagi/open-ch…
lisa-tarbo Sep 7, 2026
b7997ce
fixed wrong merge
lisa-tarbo Sep 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .markdownlint-cli2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,21 @@ ignores:
- site/**
- .venv/**

# CLAUDE.md is just an @-include pointing at AGENTS.md, so it fails MD041 (no H1)
# CLAUDE.md files are just an @-include pointing at AGENTS.md, so they fail MD041 (no H1)
- CLAUDE.md
- .github/workflows/CLAUDE.md

# Generated from the OCS OpenAPI schema by the update-api-docs workflow; not hand-edited
- docs/api/**

# AGENTS.md files are read by Claude Code as system-context instructions, not rendered as
# docs — same trust model as .claude/agents/*.md and .github/templates/*.md. They share a
# directory with human-facing docs (README.md, README-*.md), so scope this to the exact
# files rather than a directory cascade.
overrides:
- filter:
- AGENTS.md
- .github/workflows/AGENTS.md
config:
extends: ./.markdownlint-prompts.yaml
combine: replace
Comment on lines +17 to +26

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please verify this block actually takes effect — I think it may be a silent no-op, for two independent reasons.

  1. overrides / filter / combine don't appear in the documented markdownlint-cli2 config properties I could check (config, customRules, fix, frontMatter, gitignore, globs, ignores, markdownItPlugins, modulePaths, noBanner, noInlineConfig, noProgress, outputFormatters, showFound). combine: replace in particular reads like ESLint/Prettier syntax rather than cli2's. If cli2 ignores unknown top-level keys, this parses fine and does nothing.
  2. Even if it is supported, it fights this file's own header comment: "a plain .markdownlint.* file in the same directory overrides this file's config property". Root .markdownlint.yaml sits beside this file, so for root-level AGENTS.md the discovered config should win over anything rule-related declared here. .github/workflows/AGENTS.md has no directory config, so it also resolves to the root .markdownlint.yaml.

Cheap way to settle it: temporarily add a ```python fence to AGENTS.md and run uv run prek run markdownlint-cli2 --all-files. If MD040 doesn't fire, the override is inert. (I couldn't run the linter in my sandbox — no node/network — so this is unverified either way.)

If it turns out not to work, the per-file mechanism that's known-good at any cli2 version is an inline configure comment at the top of each AGENTS.md:


Downside is it duplicates the vocabulary instead of sharing .markdownlint-prompts.yaml, which loses the "adding a language is a trust decision made in one place" property. Worth the tradeoff discussion in the PR rather than picking silently.

2 changes: 1 addition & 1 deletion .markdownlint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ MD007: false

# Line length — reduce progressively after long lines are fixed
MD013:
line_length: 750
line_length: 650

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ratchet needs a matching change on the producer side or it'll un-ratchet itself. docs/changelog.md is the file that keeps forcing this limit up, and most of its entries are written by the update-changelog workflow from .github/templates/changelog-instructions.md — which has no line-length guidance in its "General Changelog Guidelines" section. So the next automated changelog PR will land another single-line >650-char entry.

The PR description says "will use doc writer agents to keep lengths <650 in future", but the automation path doesn't go through those agents. One line in the template ("Wrap entries at sentence boundaries; keep each source line under 650 characters") would close it. Fine as a follow-up if you want to keep this PR small, but it's worth an issue rather than nothing.

code_blocks: false
tables: false
headings: false
Expand Down
9 changes: 6 additions & 3 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ hide:
* **NEW** Macro-enabled Excel workbooks (`.xlsm`) can now be attached to a chat and uploaded to a [collection](concepts/collections/index.md). They were previously rejected as an unsupported file type. As with other documents, the file is never executed — only its extracted text is sent to the LLM.
* **NEW** The notifications list now has toggle buttons for filtering by level (Info, Warning, Error) and, if you belong to fewer than three teams, by team — alongside the existing filter panel. A notification that has occurred more than once shows a count of how many times it recurred (`×3`), and the notification detail page now names the team in its breadcrumb.
* **NEW** You can now sample the traces sent to Langfuse instead of sending every conversation turn, using a team-wide **Sample rate** on the Langfuse tracing provider and a per-chatbot **Trace sample rate** override that inherits the team default when left blank. Setting a chatbot's rate to `0.0` stops its Langfuse traces entirely. Builtin tracing is unaffected and still records every turn, and rate changes take effect on the next turn. The `trace_sample_rate` field is also available on the v2 chatbots write API. See [Configure Langfuse Trace Sampling](how-to/configure_langfuse_trace_sampling.md).
* **NEW** A chatbot's consent form can now be collected through the [Chat API](api/v1/index.md) rather than the separate web page. Starting or polling a session returns a `consent` block saying whether consent is still needed and what the form says, a new `POST /api/chat/{session_id}/consent/` endpoint records that the participant accepted it, and sending a message or uploading a file is refused until they have. Republishing the chatbot with an edited consent form asks the participant again. This applies only to chat widgets on version 0.13.0 or later, which will carry the consent panel — existing embeds are unaffected, as are API key and OAuth callers. See [Consent Forms](concepts/consent.md).
* **NEW** A chatbot's consent form can now be collected through the [Chat API](api/v1/index.md) rather than the separate web page. Starting or polling a session returns a `consent` block saying whether consent is still needed and what the form says, a new `POST /api/chat/{session_id}/consent/` endpoint records that the participant accepted it, and sending a message or uploading a file is refused until they have.
Republishing the chatbot with an edited consent form asks the participant again. This applies only to chat widgets on version 0.13.0 or later, which will carry the consent panel — existing embeds are unaffected, as are API key and OAuth callers. See [Consent Forms](concepts/consent.md).
* **CHANGE** The chatbot inspect API (`GET /api/v2/chatbots/{id}/inspect/`) no longer returns an `assistant` key on a pipeline node, and the `AssistantNodeParams` schema has been removed. Only clients inspecting pipelines that contain an assistant node are affected — those nodes are still listed, with their type reported as before and their stored settings returned in the generic node params shape (minus the internal assistant id). See the [Chatbots API reference](api/v2/chatbots.txt).
* **BUG** Publishing a version of a chatbot now keeps a copy of its consent form as it read at that moment. Previously every published version pointed at the current working form, so editing that form also changed the wording shown by versions published before the edit. Versions published before this fix keep using the working form until the chatbot is published again.

## Sep 2, 2026
* **CHANGE** The OpenAI Assistants pages have been removed. The **Assistants** entry is gone from the sidebar, and assistants can no longer be created, viewed, edited or archived in Open Chat Studio — the assistant URLs now return a "not found" error. Assistants no longer appear in the delete-team confirmation, no longer block deleting an LLM provider or a custom action, and no longer appear in deprecated-model reporting, and the file-upload controls that assistants added to the chat input bar are gone. File links in historical chat messages now show as plain text instead of downloads. Chatbots and pipelines that use an assistant node still open and still run as before. See [Migrate Assistants](how-to/assistants_migration.md).
* **CHANGE** The OpenAI Assistants pages have been removed. The **Assistants** entry is gone from the sidebar, and assistants can no longer be created, viewed, edited or archived in Open Chat Studio — the assistant URLs now return a "not found" error. Assistants no longer appear in the delete-team confirmation, no longer block deleting an LLM provider or a custom action, and no longer appear in deprecated-model reporting, and the file-upload controls that assistants added to the chat input bar are gone.
File links in historical chat messages now show as plain text instead of downloads. Chatbots and pipelines that use an assistant node still open and still run as before. See [Migrate Assistants](how-to/assistants_migration.md).

## Sep 1, 2026
* **NEW** An embedded widget channel can now require an **OAuth** token instead of its embed key, using the new **Credential mode** setting on the channel. In OAuth mode every request is validated against a token minted by your own backend, the embed snippet shown in Open Chat Studio includes a sample `authTokenProvider` implementation, and the widget must be on version 0.12.0 or later. Existing channels keep the embed-key mode they already have. Leaving the channel's allowed domains blank marks the channel as a server-only integration, so any request from a browser is refused. See [OAuth credential mode](chat_widget/reference.md#oauth-credential-mode).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line is still over the new limit — it's between 651 and 669 characters (matches ^.{651,}$, not ^.{670,}$), so MD013 will fail here after the drop to 650. It's the only remaining offender I found across all tracked markdown outside docs/api/; the one other >650 hit is .claude/agents/documentation-pr-reviewer.md:3, which is inside YAML front matter and therefore excluded by default.

Splitting it after ...mode they already have. matches the sentence-boundary style used for the other three entries in this PR.

Expand All @@ -54,7 +56,8 @@ hide:
* **BUG** Fixed an error raised by the code in a [Python node](tech-hub/python_node.md) causing the message to fail without a reply. The participant now receives a generic error response, and the error is recorded against the message so you can see what went wrong.

## Aug 20, 2026
* **CHANGE** Turning off a channel's **Enabled** toggle now stops new conversations and bot-initiated messages, where before it only stopped incoming ones. Previously a disabled channel still allowed new conversations to be started (from the chat widget, the public web chat link, Slack, or the chatbot management pages) and still sent out scheduled messages, event action messages and API-triggered messages. New sessions on a disabled channel are now refused, and bot-initiated messages to a disabled channel are no longer sent. Two API endpoints are still exceptions — see [Known limitations](how-to/disable_a_channel.md#known-limitations). See [Disabling a channel](concepts/channels.md#disabling-a-channel).
* **CHANGE** Turning off a channel's **Enabled** toggle now stops new conversations and bot-initiated messages, where before it only stopped incoming ones. Previously a disabled channel still allowed new conversations to be started (from the chat widget, the public web chat link, Slack, or the chatbot management pages) and still sent out scheduled messages, event action messages and API-triggered messages.
New sessions on a disabled channel are now refused, and bot-initiated messages to a disabled channel are no longer sent. Two API endpoints are still exceptions — see [Known limitations](how-to/disable_a_channel.md#known-limitations). See [Disabling a channel](concepts/channels.md#disabling-a-channel).

## Aug 18, 2026
* **CHANGE** When several branches merge into one node, that node now takes its input from the branch that arrived most recently, and `node_inputs` holds every input that has arrived so far instead of just one. Previously the input depended on the order the connections happened to be drawn, so the same graph could feed a merge node a different branch — any node with more than one incoming connection may now receive a different input than before. See [Which input a node receives](concepts/pipelines/parallel.md#which-input-a-node-receives).
Expand Down