You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**Descriptions must add value**: `"Session identifier."` is a label, not a description. Instead: `"The \`user\` identifier provided in API requests."`.
144
144
-**Nullable/conditional fields**: Explain when present or `null`.
145
145
146
+
#### Endpoint vs parameter descriptions
147
+
148
+
| Field | Scope |
149
+
|---|---|
150
+
| Endpoint `description`| What the endpoint does, plus any whole-API surprise (cascading delete, long-poll duration). One sentence when possible. |
151
+
| Parameter `description`| Field meaning, valid values, deprecation, normalization, and rules about when to use it vs an alternative. |
152
+
153
+
If the endpoint description explains a parameter, move it down.
154
+
155
+
❌ "Remove one or more tag bindings from a knowledge base. Provide tag IDs in `tag_ids`. The legacy `tag_id` field is still accepted for single-tag requests and is normalized into `tag_ids` server-side; supply at least one of the two."
156
+
157
+
✅ Endpoint: "Remove one or more tags from a knowledge base."
158
+
`tag_ids`: "Tag IDs to unbind. Required unless the legacy `tag_id` is provided."
159
+
`tag_id`: "Legacy single-tag form. Normalized into `tag_ids` server-side. Use `tag_ids` for new integrations."
160
+
146
161
### Cross-API Links
147
162
148
163
When a description mentions another endpoint, add a markdown link. Pattern: `/api-reference/{category}/{endpoint-name}` (kebab-case from endpoint summary).
The verifier reads both. Pass `--env-example docker/.env.example --env-example docker/envs` (the second arg is a directory; the verifier globs `**/*.env.example` recursively).
23
28
24
29
| Var location | Action |
25
30
|---|---|
26
-
| In `.env.example`, uncommented | Document. |
27
-
| In `.env.example`, commented (`#FOO=bar`) | Document; add to **Verifier false positives** in `ignored-vars.md` (the verifier can't parse defaults from comments). |
28
-
| Only in `api/configs/` Pydantic, not in `.env.example`|**Don't document.** Upstream-deferred; file a PR adding it to `.env.example` first. |
31
+
| In any `.env.example` file, uncommented | Document. |
32
+
| In any `.env.example` file, commented (`#FOO=bar`) | Document; add to **Verifier false positives** in `ignored-vars.md` (the verifier can't parse defaults from comments). |
33
+
| Only in `api/configs/` Pydantic, not in any `.env.example`|**Don't document.** Upstream-deferred; file a PR adding it to the appropriate `.env.example` file first. |
34
+
| Removed from `.env.example` because the code no longer reads it |**Remove from docs.** Documenting unreferenced vars implies they still take effect. Discoverability for upgraders belongs in upstream Dify release notes, not this docs site. |
29
35
30
36
The verifier's "extra in docs" signal is not an escape hatch. Never suppress it for Pydantic-only vars via `ignored-vars.md`.
This captures every change between the two versions, regardless of whether PRs were tagged to a milestone.
55
55
56
+
**Do not pre-filter the diff to a hand-picked path list.** Run `git diff --stat` over the full change set, then categorize in 1.2. Pre-filtering hides files like new `docker/dify-compose*` scripts, `docker/.env.default`, `docker/README.md`, or root `README.md` that drive deployment-doc updates.
57
+
58
+
### 1.1a Cross-check existing docs PRs
59
+
60
+
Before generating the report, check whether dify-docs already has open or recently-merged PRs covering the same source PRs. This prevents duplicate work and reveals doc paths you might miss:
61
+
62
+
```bash
63
+
# Search by source-PR number(s) you plan to flag
64
+
gh pr list --repo langgenius/dify-docs --state all --search "#<dify-PR-number>" \
65
+
--json number,title,state,files
66
+
# Or scan recent docs PRs for the release window
67
+
gh pr list --repo langgenius/dify-docs --state all --limit 30 \
68
+
--json number,title,state,mergedAt,files
69
+
```
70
+
71
+
If a docs PR already covers an item, mark it **Already addressed (PR #N)** in the report and exclude it from execution.
72
+
56
73
For context on specific changes, fetch the relevant PR details:
57
74
```bash
58
75
# Extract PR numbers from commit messages
@@ -110,8 +127,8 @@ Read the PR description for context. Map changed source paths to likely doc area
| dify |`docker/.env.example`, `docker/docker-compose.yaml`, `docker/docker-compose-template.yaml`, `api/configs/`|`en/self-host/configuration/environments.mdx` (env var docs)|
131
+
| dify |`docker/README.md`, `docker/dify-compose*`, `docker/.env.default`, root `README.md`, any new file under `docker/`|`en/self-host/quick-start/docker-compose.mdx` and `en/self-host/quick-start/faqs.mdx` (deployment workflow docs)|
@@ -296,3 +313,6 @@ For each affected variable group, use `dify-docs-env-vars` skill:
296
313
| Skipping Pydantic model changes | A model change may affect multiple endpoints — trace which controllers use it |
297
314
| Forgetting to checkout target version | Audit against the target release code, not whatever is currently checked out |
298
315
| Manually translating after EN fixes | Translation is automatic on PR push — never run manual translation scripts. **Exception**: `environments.mdx` is in the ignore list and must be translated manually. |
316
+
| Pre-filtering the diff to a hand-picked path list | Run the full `git diff --stat` first; categorize after. Pre-filtering hides deployment scripts, new docker files, and root README changes. |
317
+
| Trusting the `chore:` / `fix:` prefix as a no-doc-impact signal | Read the PR title and body. "chore: easier and simpler deploy" is a deployment workflow change. Prefix is not a category. |
318
+
| Skipping the dify-docs PR cross-check | Always run `gh pr list --repo langgenius/dify-docs` against the source PR numbers before reporting. Avoids duplicate work and surfaces doc paths the heuristic mapping missed. |
Copy file name to clipboardExpand all lines: en/api-reference/openapi_knowledge.json
+88-3Lines changed: 88 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -4544,7 +4544,7 @@
4544
4544
"Tags"
4545
4545
],
4546
4546
"summary": "Delete Tag Binding",
4547
-
"description": "Remove a tag binding from a knowledge base.",
4547
+
"description": "Remove one or more tags from a knowledge base.",
4548
4548
"operationId": "unbindTagFromDataset",
4549
4549
"requestBody": {
4550
4550
"required": true,
@@ -4553,13 +4553,21 @@
4553
4553
"schema": {
4554
4554
"type": "object",
4555
4555
"required": [
4556
-
"tag_id",
4557
4556
"target_id"
4558
4557
],
4559
4558
"properties": {
4559
+
"tag_ids": {
4560
+
"type": "array",
4561
+
"items": {
4562
+
"type": "string"
4563
+
},
4564
+
"minItems": 1,
4565
+
"description": "Tag IDs to unbind. Required unless the legacy `tag_id` is provided."
4566
+
},
4560
4567
"tag_id": {
4561
4568
"type": "string",
4562
-
"description": "Tag ID to unbind."
4569
+
"deprecated": true,
4570
+
"description": "Legacy single-tag form. Normalized into `tag_ids` server-side. Use `tag_ids` for new integrations."
4563
4571
},
4564
4572
"target_id": {
4565
4573
"type": "string",
@@ -6871,6 +6879,83 @@
6871
6879
}
6872
6880
}
6873
6881
}
6882
+
},
6883
+
"metadata_filtering_conditions": {
6884
+
"type": "object",
6885
+
"nullable": true,
6886
+
"description": "Restrict retrieval to chunks whose document metadata matches the given conditions. Conditions are evaluated server-side against document metadata fields.",
6887
+
"properties": {
6888
+
"logical_operator": {
6889
+
"type": "string",
6890
+
"enum": [
6891
+
"and",
6892
+
"or"
6893
+
],
6894
+
"default": "and",
6895
+
"nullable": true,
6896
+
"description": "How to combine multiple conditions."
6897
+
},
6898
+
"conditions": {
6899
+
"type": "array",
6900
+
"nullable": true,
6901
+
"description": "List of metadata conditions to evaluate.",
6902
+
"items": {
6903
+
"type": "object",
6904
+
"required": [
6905
+
"name",
6906
+
"comparison_operator"
6907
+
],
6908
+
"properties": {
6909
+
"name": {
6910
+
"type": "string",
6911
+
"description": "Metadata field name to compare against."
6912
+
},
6913
+
"comparison_operator": {
6914
+
"type": "string",
6915
+
"description": "Comparison to apply. String operators (`contains`, `not contains`, `start with`, `end with`, `is`, `is not`, `empty`, `not empty`, `in`, `not in`) act on string or array metadata. Numeric operators (`=`, `≠`, `>`, `<`, `≥`, `≤`) act on numeric metadata. Time operators (`before`, `after`) act on time metadata.",
6916
+
"enum": [
6917
+
"contains",
6918
+
"not contains",
6919
+
"start with",
6920
+
"end with",
6921
+
"is",
6922
+
"is not",
6923
+
"empty",
6924
+
"not empty",
6925
+
"in",
6926
+
"not in",
6927
+
"=",
6928
+
"≠",
6929
+
">",
6930
+
"<",
6931
+
"≥",
6932
+
"≤",
6933
+
"before",
6934
+
"after"
6935
+
]
6936
+
},
6937
+
"value": {
6938
+
"nullable": true,
6939
+
"description": "Value to compare against. Type depends on `comparison_operator`: string for most string operators, array of strings for `in` and `not in`, number for numeric operators, and omitted for `empty` and `not empty`.",
0 commit comments