Skip to content

docs(ds-slack): document 11 new parameters and correct six statements, all seven languages - #512

Open
marevol wants to merge 4 commits into
masterfrom
docs/ds-slack-15.9-update
Open

docs(ds-slack): document 11 new parameters and correct six statements, all seven languages#512
marevol wants to merge 4 commits into
masterfrom
docs/ds-slack-15.9-update

Conversation

@marevol

@marevol marevol commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Bring the Slack data store page in line with the plugin. It documented 20 parameters where the code reads 31, and six of its statements contradicted the implementation.

All seven languages, 15.9 only. Japanese was written first and the rest translated from it, per the convention this repo's own history establishes.

The most damaging gap: team:read was missing

team.info is called unconditionally on every crawl. Without the scope it does not fail — it degrades: the permalink path falls back to one chat.getPermalink call per message, multiplying API usage enormously against a rate-limited endpoint. The scope was absent from the list in every language and every version. It is now listed as always required.

The one silent behaviour change

ignore_system_events defaults to true. An existing installation that upgrades and changes nothing will index fewer documents, because channel_join, channel_leave and fourteen other channel-administration subtypes are now dropped. This has a .. note:: at the point of configuration and again in troubleshooting, in all seven languages.

Eleven new parameters

connection_timeout, read_timeout, max_retry_count, retry_interval, executor_timeout, exclude_archived, ignore_system_events, read_interval, max_content_length, permission_sync, default_permissions — in a new "Advanced Parameters" table following ds-csv.rst's shape. Every default was traced to the constant that defines it rather than copied from a summary.

max_filesize and max_content_length are documented as what they are: a transfer bound checked before download, and an extraction bound on how much text Tika produces. Neither substitutes for the other.

Permission sync needs three things said plainly

permission_sync computes roles; it does not apply them. A script must map role=message.roles or the feature costs its fail-closed skips and restricts nothing. It needs users:read.email. And the Fess principal name must equal the Slack email — Fess builds search-time roles from the login name, so a mismatch means private content silently returns nothing for everyone.

Those are two opposite failure modes — unrestricted content versus empty results — and they are stated separately in every language rather than merged.

Six corrections

Was Is
"verify the channel is not archived" Backwards. exclude_archived defaults to false, so archived channels are crawled
"crawl succeeds but finds 0 messages" attributed to missing scopes missing_scope is now fatal and fails the job; that silent-partial-success mode was deliberately removed
rate_limited ratelimited, no underscore — and it now fails the crawl rather than skipping, after bounded retries honouring Retry-After
Tier 3 and Tier 4 listed Tier 2 added — conversations.list and users.list are the binding ones, called at the start of every crawl
No mention of Slack's 2025 rate-limit change Now stated, including that it does not apply to internal apps, which is what a Fess installation uses
"consider settings to exclude old messages" Deleted. No such setting exists. Incremental crawling is not part of this work, so nothing was invented to replace it

Also added

Thread replies are indexed — the word "thread" did not appear on the page at all. DM and group DM are out of scope. Huddle transcripts and Clips cannot be crawled; Slack has no API for them. And the error-handling contract: fatal and transient errors fail the job, channel-scoped errors warn and skip that channel.

Incidental repairs

  • ko: five heading underlines were one column too short. The linter cannot see this — it only compares an H1's overline against its own underline — so they had gone unnoticed.
  • es / fr: the 15.9 tree still carried unaccented text (Descripcion, envio, a ete envoye). A previous repair covered only 15.7 and 15.8. Fixed file-wide, not just in new prose.

Verification

  • All seven files parse under docutils at halt_level=5 with no warnings. This is what actually validates CJK heading widths and inline-literal escaping; tools/check_headings.py exits 1 at baseline from 150 pre-existing warnings in unrelated files, and this change adds none.
  • Parameter names are byte-identical across all seven languages (md5 of the extracted literal set matches).
  • list-table and :: block counts match across all seven; heading structure is identical (41 headings, same H1/H2/H3 sequence).
  • Only the three :widths: values that exist in this tree are used.
  • 15.5–15.8 untouched.

… update

Bring ds-slack.rst up to date with fess-ds-slack's Phase 0-3 changes
(20 -> 31 documented parameters, plus six behaviours that no longer
match the implementation).

- Add the 11 new parameters (advanced parameter table): connection
  timeout/retry tuning, exclude_archived, ignore_system_events,
  read_interval, max_content_length, and the new permission_sync /
  default_permissions ACL feature, with defaults verified against the
  plugin source.
- Add team:read to the required OAuth scopes in every scope list; it
  was missing everywhere, and its absence silently multiplies API
  calls via a per-message chat.getPermalink fallback.
- Flag ignore_system_events defaulting to true with a .. note:: since
  it silently reduces indexed document counts on upgrade.
- Add a new "Permission Synchronization (ACL)" section covering
  fail-closed behaviour, the required users:read.email scope, and the
  Fess-login-name-must-match-Slack-email requirement.
- Correct six inaccurate statements: archived-channel handling was
  backwards, the "0 messages" section described a silent-partial-
  success mode that was removed, the rate limit error code is
  `ratelimited` (not `rate_limited`) and now fails the crawl, the tier
  list omitted Tier 2 (conversations.list/users.list), and the
  2025-05-29 Slack rate limit change does not apply to internal apps.
- Delete the "exclude old messages" troubleshooting advice, since no
  such setting exists and incremental crawling was out of scope for
  this effort.
- Document thread replies, system-event exclusion, DM/group-DM being
  out of scope, and Huddle/Clips having no crawlable API.

Japanese is source; English is a translation with byte-identical
parameter names, defaults, and code samples per this repo's
convention. Only the 15.9 (development) tree is touched; 15.5-15.8
are unchanged, as are the other five languages (handled separately).
- Add the missing blank line after ".. note::" in the role=message.roles
  reminder, matching the other four new note blocks in this change and
  the ds-csv.rst convention.
- Qualify the files.info entry in the Tier 4 list: the plugin's crawl
  path never calls files.info (only SlackClient exposes it, exercised
  by a unit test), so leaving it unqualified next to
  conversations.members's "(only when permission_sync=true)" wrongly
  implies normal crawling exercises Tier 4 via this method.
- Add the companion fact to "Other Notes": disabling permission_sync
  does not retroactively remove roles already applied to previously
  indexed documents, mirroring the existing statement that enabling it
  does not retroactively secure already-indexed content.
Bring ds-slack.rst up to date in the five remaining languages, matching
the ja/en page from the previous two commits (20 -> 31 documented
parameters plus six behaviour corrections).

- Add the Advanced Parameters table (connection/retry tuning,
  exclude_archived, ignore_system_events, read_interval,
  max_content_length, permission_sync, default_permissions) with a
  note that ignore_system_events now defaults to true.
- Add team:read to every required-scopes list and restructure the
  OAuth scopes section into "always required" base scopes plus
  additive blocks per optional feature, matching the corrected en
  structure.
- Add the new "Permission Synchronization (ACL)" section: fail-closed
  behaviour, the required users:read.email scope, and the
  Fess-login-name-must-match-Slack-email requirement.
- Correct the same six inaccuracies fixed in ja/en: archived-channel
  handling, the removed silent-partial-success crawl mode, the
  ratelimited (not rate_limited) error code now failing the crawl, the
  Tier 2 gap in the API tier list, and the 2025-05-29 Slack rate limit
  change not applying to internal apps.
- Drop the "exclude old messages" troubleshooting advice (no such
  setting exists).
- Document thread replies, system-event exclusion, and the DM/Huddle/
  Clips scope exclusions.

Per-language fixes:
- ko: corrected five section-heading underlines that were one display
  column short (title/underline width mismatch pre-dating this
  change).
- es/fr: wrote correct accents throughout, including in untouched
  neighbouring headings that had lost them.
- zh-cn: used full-width punctuation and the rst escaped space ("\ ")
  wherever an inline literal meets CJK text, consistent with the rest
  of the zh-cn tree.

Parameter names, defaults, error codes, scope names, and every code
sample remain byte-identical to ja/en, per this repo's translation
convention. Only the 15.9 (development) tree is touched.
Commit 539d5c7 added a blank line after ".. note::" in the "forgot
role=message.roles" reminder for ja/en consistency, but the same
block was written as new content in the five-language translation
(a8b9ad9) without it. Add the blank line there too so all seven
languages format this note block the same way.

Checked all six note blocks in each of the five languages against ja;
this was the only one that diverged.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant