docs(tiktok): teach the skill which settings actually apply (posting-method + media-type axes) - #10
docs(tiktok): teach the skill which settings actually apply (posting-method + media-type axes)#10giladresisi wants to merge 2 commits into
Conversation
UPLOAD sends the media to the user's TikTok app inbox (SEND_TO_USER_INBOX), where it must be finished manually within 24h or it is discarded. The API still reports the post as successful, so an agent that picks UPLOAD - the natural choice when a user says "upload this video" - silently never posts. PROVIDER_SETTINGS.md listed the enum with no explanation, and it is what an agent following this skill actually reads. Spell out the consequence and name DIRECT_POST as the default. Also stop the integrations:settings example from discarding .output.rules, so provider guidance written upstream reaches skill users. Mirrors gitroomhq/postiz-app#1687 and the parallel gitroomhq/postiz-docs fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A user ticked "Video made with AI" on an UPLOAD post and the label was silently dropped: TikTok's inbox endpoint accepts no post_info, and within DIRECT_POST duet/stitch/video_made_with_ai are video-only while autoAddMusic is photo-only. postiz-app PR #1728 fixed the app side; this catches the skill docs up. - PROVIDER_SETTINGS.md: spell out the two axes and tag every TikTok setting (DIRECT_POST-only; video-only / photo-only / both); stop presenting autoAddMusic as generally required and drop it from the video example. - SKILL.md: add generic Rule 4 — fetch integrations:settings before scheduling and honor the returned rules + per-field descriptions; fix the example's wrong "privacy" key to privacy_level. - README.md: same key fix; complete the settings table row. - PROVIDER_SETTINGS_SUMMARY.md: complete the TikTok row (was missing content_posting_method, video_made_with_ai, brand toggles); remove autoAddMusic from the video example. - INTEGRATION_SETTINGS_DISCOVERY.md: one behavioral line per axis; autoAddMusic no longer listed as required. - examples/tiktok-video.json: drop photo-only autoAddMusic from the video post. Extends a557cd5 (UPLOAD never publishes) with the media-type axis. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Contribution-checker quality warning Heuristics that flagged:
If this is a genuine contribution, please add detail to your PR description and tighten the diff scope before reviewers look at it. |
📝 WalkthroughWalkthroughTikTok settings documentation, examples, and agent guidance now describe ChangesTikTok settings alignment
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@PROVIDER_SETTINGS_SUMMARY.md`:
- Line 18: Update the TikTok quick-reference entries in
PROVIDER_SETTINGS_SUMMARY.md (line 18) and README.md (line 738) to explicitly
label privacy_level, comment, brand_content_toggle, and brand_organic_toggle as
“(video + photo)”; leave the existing video-only and photo-only annotations
unchanged.
In `@SKILL.md`:
- Around line 410-421: Update the settings-discovery example around
SETTINGS_JSON to enable fail-closed shell behavior with set -euo pipefail and
validate that postiz integrations:settings succeeds and returns usable JSON
before reading MAX_LENGTH, rules, or settings. Ensure failures stop execution
rather than allowing empty or null discovery values to continue.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: d4adf905-ce5b-43e0-a8a7-a24e0a840092
📒 Files selected for processing (6)
INTEGRATION_SETTINGS_DISCOVERY.mdPROVIDER_SETTINGS.mdPROVIDER_SETTINGS_SUMMARY.mdREADME.mdSKILL.mdexamples/tiktok-video.json
💤 Files with no reviewable changes (1)
- examples/tiktok-video.json
| | **LinkedIn** | `linkedin` | post_as_images_carousel, carousel_name | | ||
| | **Instagram** | `instagram` | post_type (post/story), collaborators | | ||
| | **TikTok** | `tiktok` | title, privacy_level, duet, stitch, comment, autoAddMusic | | ||
| | **TikTok** | `tiktok` | content_posting_method (use DIRECT_POST), title, privacy_level, comment, brand_content_toggle, brand_organic_toggle, duet/stitch/video_made_with_ai (video only), autoAddMusic (photo only) | |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Make shared TikTok settings explicitly media-agnostic.
Both quick-reference tables identify video-only and photo-only fields but leave the shared fields unscoped, which weakens the PR’s central applicability guidance.
PROVIDER_SETTINGS_SUMMARY.md#L18-L18: markprivacy_level,comment, and both brand toggles as(video + photo).README.md#L738-L738: markprivacy_level,comment, and both brand toggles as(video + photo).
🧰 Tools
🪛 LanguageTool
[uncategorized] ~18-~18: Did you mean “TikTok” (= social networking app)?
Context: .../story), collaborators | | TikTok | tiktok | content_posting_method (use DIRECT_P...
(TIK_TOK)
📍 Affects 2 files
PROVIDER_SETTINGS_SUMMARY.md#L18-L18(this comment)README.md#L738-L738
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@PROVIDER_SETTINGS_SUMMARY.md` at line 18, Update the TikTok quick-reference
entries in PROVIDER_SETTINGS_SUMMARY.md (line 18) and README.md (line 738) to
explicitly label privacy_level, comment, brand_content_toggle, and
brand_organic_toggle as “(video + photo)”; leave the existing video-only and
photo-only annotations unchanged.
| # Get integration settings | ||
| SETTINGS_JSON=$(postiz integrations:settings "$INTEGRATION_ID") | ||
| MAX_LENGTH=$(echo "$SETTINGS_JSON" | jq '.output.maxLength') | ||
|
|
||
| # Provider-specific guidance written for agents. Read it and follow it — it explains | ||
| # what the settings values actually do (e.g. which enum value publishes vs. silently | ||
| # does not). Do not skip this because a field name looks self-explanatory. | ||
| echo "$SETTINGS_JSON" | jq -r '.output.rules // empty' | ||
|
|
||
| # The settings JSON schema. Property `description` fields carry the same guidance | ||
| # per-field; check them before choosing a value. | ||
| echo "$SETTINGS_JSON" | jq '.output.settings' |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
Fail closed when settings discovery fails.
This bash example does not enable set -euo pipefail or validate the response before using it. If postiz integrations:settings fails, the script can continue with empty/null rules and MAX_LENGTH, undermining the new mandatory discovery step.
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 774: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
[warning] 790: [MP2] Context Window Stuffing: Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
Remediation: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
(Memory Poisoning (MP2))
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@SKILL.md` around lines 410 - 421, Update the settings-discovery example
around SETTINGS_JSON to enable fail-closed shell behavior with set -euo pipefail
and validate that postiz integrations:settings succeeds and returns usable JSON
before reading MAX_LENGTH, rules, or settings. Ensure failures stop execution
rather than allowing empty or null discovery values to continue.
|
Closing in favor of two stacked PRs: the posting-method change and the settings/media-type change are being split into separate PRs. |
Why
A production user ticked "Video made with AI" on a TikTok post that used the UPLOAD content-posting method, and the label was silently dropped. TikTok's Upload Video (inbox) endpoint accepts no
post_info, so every setting except the title/content is discarded — and the API still reports success.The app side was fixed in gitroomhq/postiz-app#1728 (hides DIRECT_POST-only settings on UPLOAD, adds
@JSONSchemadescriptions and provider@Rules). But an agent following this skill reads the static docs in this repo, not the postiz-app source — and those docs still contradicted the fixed behavior. This branch catches the skill docs up.Two independent axes (verified against TikTok's API reference and postiz-app's
buildTikokPostInfoBody)titlerequirescontent_posting_method: "DIRECT_POST". With"UPLOAD", only the title/content survives.duet,stitch,video_made_with_aiautoAddMusicprivacy_level,comment,brand_content_toggle,brand_organic_toggleChanges (docs/markdown only)
autoAddMusicis no longer presented as generally required and is dropped from the video example (it's photo-only).integrations:settingsbefore scheduling and honor the returnedrules+ per-fielddescriptions (inapplicable settings are silently discarded, not rejected). Fix the example's wrong"privacy"key →privacy_level."privacy"→privacy_levelfix; complete the settings-table row.content_posting_method,video_made_with_ai, brand toggles); dropautoAddMusicfrom the video example.autoAddMusicno longer listed as required.autoAddMusicfrom the video post.Includes the earlier commit
a557cd5(UPLOAD never publishes — axis 1); this PR adds the media-type axis on top.Related
🤖 Generated with Claude Code
Summary by CodeRabbit