fix: library IDs stay hidden without library access (ruling P13)

Outline, node-get, write outlines, the render summary and replace-text's
opaque-node match name no library ID unless the library group is visible
and the user has divi_library; read-only still names them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-27 15:00:39 +02:00
co-authored by Claude Opus 5.5
parent 06f13799de
commit c7ce924e5a
19 changed files with 351 additions and 28 deletions
@@ -8,6 +8,8 @@ use LIT\MCP\Abilities\Rev;
use LIT\MCP\Integrations\Divi\BlockTree\NodeIndex;
use LIT\MCP\Integrations\Divi\BlockTree\Parser;
use LIT\MCP\Tests\Support\DiviFixtures;
use LIT\MCP\Tests\Support\DiviWriterFixture;
use LIT\MCP\Tests\Support\LibraryFixtures;
use WP_Error;
final class DiviUpdateAbilityTest extends DiviWriteAbilityTestCase
@@ -240,4 +242,24 @@ final class DiviUpdateAbilityTest extends DiviWriteAbilityTestCase
self::assertStringContainsString('nur im Divi-Builder', $client['fields']['changes[0].attrs.module.decoration.attributes']);
self::assertSame([], $this->saved);
}
/** Ruling P13: the outline of a write result names library IDs only with library access. */
public function testTheWriteOutlineNamesLibraryIdsOnlyWithLibraryAccess(): void
{
$content = DiviFixtures::markup('stage3/page--globale-instanzen.html');
$changes = [['id' => 's0.r0.c0.m0', 'set' => ['text' => 'Termin buchen']]];
$hidden = $this->updateOn($content, $changes);
$failures = [];
$this->writer = DiviWriterFixture::writer($this->saved, $failures, false, LibraryFixtures::loader());
$shown = $this->updateOn($content, $changes);
self::assertTrue($hidden['ok']);
self::assertStringContainsString('s0.r0.c0.g0 text', (string) $hidden['outline']);
self::assertStringContainsString('(nur lesbar)', (string) $hidden['outline']);
self::assertStringNotContainsString('1059', (string) json_encode($hidden));
self::assertStringNotContainsString('1058', (string) json_encode($hidden));
self::assertStringContainsString('[global 1059]', (string) $shown['outline']);
}
}