Skip to content

docs(configs): Generate settings.md from ConfigLexicon - #20034

Merged
nickvergessen merged 9 commits into
mainfrom
feat/noid/generate-settings-md
Oct 29, 2026
Merged

nickvergessen merged 9 commits into
mainfrom
feat/noid/generate-settings-md

Conversation

@nickvergessen

Copy link
Copy Markdown
Member

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not possible
  • πŸ“˜ API documentation in docs/ has been updated or is not required
  • πŸ”– Capability is added or not needed

@nickvergessen nickvergessen self-assigned this Oct 28, 2026
@nickvergessen nickvergessen added feature: settings βš™οΈ Settings and config related issues feature: api πŸ› οΈ OCS API for conversations, chats and participants labels Oct 28, 2026
@nextcloud-command nextcloud-command added the AI assisted This PR contains AI-assisted commits label Oct 28, 2026
@nickvergessen

Copy link
Copy Markdown
Member Author

@coderabbitai review whether the old description from settings.md is mostly kept

@coderabbitai

coderabbitai Bot commented Oct 28, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
gh pr view 20034 --repo nextcloud/spreed --json baseRefOid,headRefOid,files
fd -HI '^(settings\.md|ConfigLexicon\.php|AGENTS\.md)$' . -E .git
git status --short

Length of output: 1412


🏁 Script executed:

#!/bin/bash
set -euo pipefail
cat AGENTS.md
git diff 538db6ab7cc744dc6f4b5028d4df44c7619ed745 HEAD -- docs/settings.md
printf '\n--- CURRENT DOCUMENTATION ---\n'
nl -ba docs/settings.md
printf '\n--- SOURCE OUTLINES ---\n'
ast-grep outline lib/ConfigLexicon.php
ast-grep outline lib/Command/Developer/UpdateDocs.php
printf '\n--- PREVIOUS DOCUMENTATION ---\n'
git show 538db6ab7cc744dc6f4b5028d4df44c7619ed745:docs/settings.md

Length of output: 121869


🏁 Script executed:

#!/bin/bash
set -euo pipefail
printf '\n--- LEXICON ENTRIES ---\n'
rg -n -C5 "'(backgrounds_default_for_users|backgrounds_upload_users|signaling_token_alg|conversations_list_style|chat_style|federation_allowed_groups|call_recording_summary|stun_servers|turn_servers)'" lib/ConfigLexicon.php
printf '\n--- GENERATOR ---\n'
nl -ba lib/Command/Developer/UpdateDocs.php | sed -n '25,205p'
printf '\n--- ENTRY DEFINITION ---\n'
ast-grep outline lib/Config/AppConfigEntry.php
nl -ba lib/Config/AppConfigEntry.php | sed -n '1,120p'
printf '\n--- ROW COMPARISON ---\n'
python - <<'PY'
import subprocess, pathlib, re, collections
old = subprocess.check_output(['git','show','538db6ab7cc744dc6f4b5028d4df44c7619ed745:docs/settings.md'],text=True)
new = pathlib.Path('docs/settings.md').read_text()
def rows(text):
    section=text.split('## App configuration\n')[1].split('## Experiments\n')[0]
    result=collections.defaultdict(list)
    for line in section.splitlines():
        if line.startswith('| `'):
            cols=[x.strip() for x in line.strip('|').split('|')]
            result[cols[0]].append(cols)
    return result
a,b=rows(old),rows(new)
print('Old rows:',sum(map(len,a.values())),'Old unique keys:',len(a),'New unique keys:',len(b))
print('Missing keys:',sorted(a.keys()-b.keys()))
print('Added keys:',sorted(b.keys()-a.keys()))
print('Changed descriptions (literal comparison):')
for key, entries in a.items():
    for entry in entries:
        if key in b and entry[-1] != b[key][0][-1]:
            print(key, '\n OLD:',entry[-1],'\n NEW:',b[key][0][-1])
PY

Length of output: 1934


🏁 Script executed:

#!/bin/bash
set -eu
printf '\n--- LEXICON ENTRIES ---\n'
rg -ni -C5 'backgrounds_default_for_users|backgrounds_upload_users|signaling_token_alg|conversations_list_style|chat_style|federation_allowed_groups|call_recording_summary|stun_servers|turn_servers' lib/ConfigLexicon.php || true
printf '\n--- GENERATOR ---\n'
nl -ba lib/Command/Developer/UpdateDocs.php | sed -n '25,205p'
printf '\n--- ENTRY DEFINITION ---\n'
ast-grep outline lib/Config/AppConfigEntry.php
nl -ba lib/Config/AppConfigEntry.php | sed -n '1,120p'
printf '\n--- ROW COMPARISON ---\n'
python - <<'PY'
import subprocess, pathlib, collections
old = subprocess.check_output(['git','show','538db6ab7cc744dc6f4b5028d4df44c7619ed745:docs/settings.md'],text=True)
new = pathlib.Path('docs/settings.md').read_text()
def rows(text):
    section=text.split('## App configuration\n')[1].split('## Experiments\n')[0]
    result=collections.defaultdict(list)
    for line in section.splitlines():
        if line.startswith('| `'):
            cols=[x.strip() for x in line.strip('|').split('|')]
            result[cols[0]].append(cols)
    return result
a,b=rows(old),rows(new)
print('Old rows:',sum(map(len,a.values())),'Old unique keys:',len(a),'New unique keys:',len(b))
print('Missing keys:',sorted(a.keys()-b.keys()))
print('Added keys:',sorted(b.keys()-a.keys()))
print('Changed descriptions (literal comparison):')
for key, entries in a.items():
    for entry in entries:
        if key in b and entry[-1] != b[key][0][-1]:
            print(key, '\n OLD:',entry[-1],'\n NEW:',b[key][0][-1])
PY

Length of output: 23865


@nickvergessen Yesβ€”the old descriptions are mostly preserved, but some useful information is lost.

I compared docs/settings.md with the PR base:

  • All 75 unique app-config keys remain. The new table adds nine keys and removes the duplicate federation_allowed_groups row.
  • Important details remain, including the max_call_duration cron warning, start_calls_groups restrictions, retention units, and the breakout-room limitation.
  • The user-settings, SIP API, and experiments sections are unchanged.

Information to restore

Location Lost information
docs/settings.md, Line 87, Line 91, and Line 139 Allowed values: chat_style: split / unified; conversations_list_style: two-lines / compact; signaling_token_alg: ES256, ES384, RS256, RS384, RS512, EdDSA.
docs/settings.md, Line 107 The retained federation_allowed_groups description omits β€œeveryone when empty” from the removed duplicate.
docs/settings.md, Line 75–76 Both background settings now have blank defaults instead of the previously documented true. Their lexicon entries omit an explicit default.

Restore this information in lib/ConfigLexicon.php, then regenerate the table.

Two smaller wording changes:

  • call_recording_summary now says β€œa transcription summary provider” instead of β€œa transcription and summary provider” (Line 81). Restore β€œand” to preserve the old meaning.
  • nit: The STUN/TURN descriptions omit the UI/OCC recommendation. The introduction and option icons still provide that guidance.

This was a source and documentation comparison. I did not run the generator or tests.

You are interacting with an AI system.

@coderabbitai

coderabbitai Bot commented Oct 28, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
gh pr view 20034 --repo nextcloud/spreed --json baseRefOid,headRefOid,files
fd -HI '^(settings\.md|AGENTS\.md|ConfigLexicon\.php)$' . -E .git
if [ -f AGENTS.md ]; then cat AGENTS.md; fi
base=$(gh pr view 20034 --repo nextcloud/spreed --json baseRefOid --jq .baseRefOid)
git diff "$base" HEAD -- docs/settings.md
printf '\n--- CURRENT DOCUMENTATION ---\n'
nl -ba docs/settings.md

Length of output: 83974


🏁 Script executed:

#!/bin/bash
set -euo pipefail
ast-grep outline lib/ConfigLexicon.php
ast-grep outline lib/Command/Developer/UpdateDocs.php
ast-grep outline lib/Config/AppConfigEntry.php
printf '\n--- RELEVANT LEXICON ENTRIES ---\n'
rg -ni -C7 'backgrounds_default_for_users|backgrounds_upload_users|signaling_token_alg|conversations_list_style|chat_style|federation_allowed_groups|call_recording_summary' lib/ConfigLexicon.php
printf '\n--- GENERATOR ---\n'
rg -n -C8 'description|AppConfigEntry|settings.md|defaultValue' lib/Command/Developer/UpdateDocs.php lib/Config/AppConfigEntry.php
printf '\n--- TABLE COMPARISON ---\n'
python - <<'PY'
import subprocess, pathlib, collections
old = subprocess.check_output(['git','show','538db6ab7cc744dc6f4b5028d4df44c7619ed745:docs/settings.md'],text=True)
new = pathlib.Path('docs/settings.md').read_text()
def rows(text):
    section=text.split('## App configuration\n')[1].split('## Experiments\n')[0]
    result=collections.defaultdict(list)
    for line in section.splitlines():
        if line.startswith('| `'):
            cols=[x.strip() for x in line.strip('|').split('|')]
            result[cols[0]].append(cols)
    return result
a,b=rows(old),rows(new)
print('Old rows:',sum(map(len,a.values())),'Old unique keys:',len(a),'New unique keys:',len(b))
print('Missing keys:',sorted(a.keys()-b.keys()))
print('Added keys:',sorted(b.keys()-a.keys()))
print('Changed descriptions:')
for key, entries in a.items():
    for entry in entries:
        if key in b and entry[-1] != b[key][0][-1]:
            print(key, '\n OLD:',entry[-1],'\n NEW:',b[key][0][-1])
PY

Length of output: 23992


@nickvergessen Yesβ€”the old descriptions are mostly kept, but a few useful details are lost.

I compared the current docs/settings.md with the PR base:

  • All 75 existing app-config keys remain. The table adds nine keys and removes one duplicate row.
  • The call-duration cron warning, call-start restrictions, retention units, and breakout-room limitation remain.
  • The user-settings, SIP API, and experiments sections are unchanged.

Details to restore

Locations below refer to docs/settings.md.

Location Missing information
Line 87 chat_style: allowed values split and unified.
Line 91 conversations_list_style: allowed values two-lines and compact.
Line 139 signaling_token_alg: allowed values ES256, ES384, RS256, RS384, RS512, and EdDSA.
Line 107 federation_allowed_groups: β€œeveryone when empty” was lost when the duplicate row was removed.
Line 81 call_recording_summary: β€œtranscription and summary provider” became β€œtranscription summary provider”. Restore β€œand” to keep the previous meaning.

Separately, Line 75 and Line 76 now have blank defaults for backgrounds_default_for_users and backgrounds_upload_users. Both previously documented true. Their lexicon entries omit an explicit default.

Restore these details in lib/ConfigLexicon.php, then regenerate the table.

nit: The STUN/TURN descriptions no longer recommend UI/OCC configuration. The introduction and option icons still provide that guidance, so this does not need repeated text.

This was a source and documentation comparison. I did not run the generator or tests.

You are interacting with an AI system.

…nto the lexicon

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Signed-off-by: Joas Schilling <coding@schilljs.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Joas Schilling <coding@schilljs.com>
Signed-off-by: Joas Schilling <coding@schilljs.com>
Signed-off-by: Joas Schilling <coding@schilljs.com>
@nickvergessen
nickvergessen force-pushed the feat/noid/generate-settings-md branch from 322ded6 to 0eff4b6 Compare October 29, 2026 13:49
@nickvergessen
nickvergessen merged commit 55403fa into main Oct 29, 2026
74 checks passed
@nickvergessen
nickvergessen deleted the feat/noid/generate-settings-md branch October 29, 2026 13:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI assisted This PR contains AI-assisted commits feature: api πŸ› οΈ OCS API for conversations, chats and participants feature: settings βš™οΈ Settings and config related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants