Commit Graph
166 Commits
Author SHA1 Message Date
Gitea Actions 64f549ab35 Update manifest.json for latest build (2926740) 2026-07-31 07:19:53 +00:00
dtourolleandClaude Opus 5 2926740d03 JR-023: correct the missing-dependency logs, and test them
🏗️ Build Plugin / build (push) Successful in 29s
Latest Release / latest-release (push) Successful in 39s
🧪 Test Plugin / test (push) Successful in 26s
Both failure paths still told admins the overlay was "falling back to patching
index.html on disk". JR-021 deleted that fallback, so the message was false --
and it was false in the worst place, since an admin reads it precisely when
debugging a missing overlay and would go hunting for a patch that no longer
exists. They now name the install URL and say the overlay is disabled while
every other feature is unaffected. The not-found case is a Warning, not
Information: a headline feature being off should not sit among startup chatter.

UT-012..015 cover the branch. The File Transformation assembly is genuinely
absent from the test host, so TryRegister exercises its real not-found path
rather than a seam invented for the test. UT-015 pins that a null payload
returns empty rather than throwing -- this callback runs inside another
plugin's request path on every page served, so throwing would break the web
client itself, not just JRay's overlay.

Making those runnable needed the test project to reference Jellyfin.Controller
and Jellyfin.Model without the plugin's ExcludeAssets=runtime. My earlier claim
that DisableTransitiveFrameworkReferences alone sufficed was too narrow: it
drops the demand for the web *framework*, but ILogger and MediaBrowser.Common
live in the excluded assets, so anything past dependency-free logic failed at
run time with FileNotFoundException. Both settings are needed, and the register
now says so.

Second mutation check: downgrading the warning to Information fails UT-013 and
nothing else. Source restored and re-verified.

JR-023 reaches Done for the detection half. The config-page banner stays T4 --
verifiable only against a live server.

TRACES: UT-012, UT-013, UT-014, UT-015 | JR-023

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 09:18:40 +02:00
Gitea Actions 0fafa84158 Update manifest.json for latest build (cc973fd) 2026-07-31 07:11:48 +00:00
dtourolleandClaude Opus 5 cc973fd7c5 Make the test suite runnable without an ASP.NET Core runtime
🏗️ Build Plugin / build (push) Successful in 26s
Latest Release / latest-release (push) Successful in 37s
🧪 Test Plugin / test (push) Successful in 25s
The 11 tests built but could not execute: the plugin framework-references
Microsoft.AspNetCore.App through Jellyfin.Controller, that reference flows into
anything referencing the plugin, and the test host then demanded a web runtime
even for tests that touch no web type. This box has none at any version, and
Arch packages only 8 and 10 -- so "install the runtime" was neither available
here nor a clean answer.

DisableTransitiveFrameworkReferences drops the inherited reference. .NET
resolves assemblies lazily, so pure-logic types load without it. This is a
T1-tier decision rather than a workaround: requiring a web runtime to test
string and rule logic is incidental coupling. T2 -- controllers and
authorisation -- genuinely needs it, and belongs in a second project that keeps
the reference.

All 11 now pass. The suite was also checked to FAIL: removing the
newline-stripping from RemoveInjection fails UT-001 and nothing else, then the
source was restored and re-verified byte-identical. A suite that has only ever
passed is not evidence that it tests anything.

JR-016 and JR-022 therefore reach Done -- implemented and verified by tests
that execute. JR-023 stays In Progress: its detection branch has no test and
its config-page half is T4.

TRACES: JR-016, JR-022 | PR-003, PR-004

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 09:10:40 +02:00
Gitea Actions e16f903469 Update manifest.json for latest build (f4e8fb5) 2026-07-30 19:22:06 +00:00
dtourolleandClaude Opus 5 f4e8fb5dea Adopt the config-driven extractor
🏗️ Build Plugin / build (push) Successful in 28s
Latest Release / latest-release (push) Successful in 41s
🧪 Test Plugin / test (push) Successful in 25s
jray-project replaced the extractor's per-repo CLI flags with a traceability.toml
at each component root, so the invocation this repo documented -- --types,
--suffixes, --scan-roots -- no longer exists. Bumps the submodule to 17106f3 and
moves those settings into config.

The gate is now `extract_traces.py --root . --format coverage`, with nothing
per-repo on the command line to drift between a developer's shell and CI.

Two settings carry reasons worth keeping. Source roots are listed individually
rather than as "scripts", because the latter walks scripts/vendor and harvests
the AR-nnn examples in the extractor's own docstrings as orphan tags.
ci_executable_tiers omits T4: tiers are per-repo now, but T4 keeps the meaning
it has in scene-actor-extraction -- "no CI host can run this" -- so a tier
number reads the same across repos.

Drops the note about the tool expecting jRay to use UR/DR. Its example config
now names jRay: ["JR"], so the prefix is settled in all three repos.

Same numbers as before the change: 21 tags, 25/46, 0 orphans.

TRACES: JR-021 | PR-004

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 21:20:57 +02:00
Gitea Actions 2d043aeee3 Update manifest.json for latest build (5159692) 2026-07-30 17:13:49 +00:00
dtourolleandClaude Opus 5 5159692364 Test project: UT-001..011 for JR-016 and JR-022
🏗️ Build Plugin / build (push) Successful in 39s
Latest Release / latest-release (push) Successful in 38s
🧪 Test Plugin / test (push) Successful in 26s
The register defined 46 requirements and zero tests, so every Done in it rested
on inspection. This adds the T1 tier: an xUnit project in the solution,
covering the two units whose logic is pure enough to test without a Jellyfin
host.

JR-022 (UT-001..006) covers the cases where removal could reach too far --
another plugin's injection, and an unmarked look-alike script tag -- because
index.html is a file JRay shares. UT-001 pins the trailing newline to the tag,
without which every install cycle leaves another blank line behind.

JR-016 (UT-007..011) covers specificity resolution, including the prioritised
series inside an ignored genre that motivated the rule, and a Series rule
valued Guid.Empty, which would otherwise swallow every movie in the library.

RemoveInjection is reached through InternalsVisibleTo rather than being made
public: it is factored out for testability, not part of the surface.

The suite BUILDS but does not RUN here. Jellyfin.Controller framework-
references Microsoft.AspNetCore.App, so the test host demands it even for pure
logic, and this machine has no ASP.NET Core runtime at any version --
RollForward cannot substitute for a framework that is absent entirely. Fix is
to install aspnet-runtime, which the CI image needs for the same reason.

So every UT here is recorded as Written, not Passing, and no requirement is
promoted to Done on their strength. A test whose result nobody has seen is not
evidence.

TRACES: UT-001, UT-002, UT-003, UT-004, UT-005, UT-006 | JR-022
TRACES: UT-007, UT-008, UT-009, UT-010, UT-011 | JR-016

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 19:12:24 +02:00
Gitea Actions d786d56368 Update manifest.json for latest build (d9a38bb) 2026-07-30 17:03:45 +00:00
dtourolleandClaude Opus 5 d9a38bb7fb JR-021, JR-022, JR-023: File Transformation is a hard dependency
🏗️ Build Plugin / build (push) Successful in 59s
Latest Release / latest-release (push) Successful in 30s
🧪 Test Plugin / test (push) Successful in 22s
Deletes the on-disk index.html injection rather than leaving it switched off.
Plugin.cs had already stopped calling it, but an unreachable write path with a
live signature is the one a later refactor re-enables by accident, and it was
still the behaviour the README and the release changelog advertised.

Patching index.html on disk is destructive in ways a plugin cannot clean up
after: the patch outlives an uninstall, a web-client upgrade discards it
silently, and it races any other plugin touching the same file. It is also a
second code path, and the one nobody runs is the one that rots.

WebClientPatchService is now removal-only. The strip is factored out as
RemoveInjection so it is testable without a filesystem. Removal is the one
write JR-021 permits -- an earlier JRay did patch the file, and those users
must not be left with a stale injection pointing at endpoints that have since
changed. It keys on JRay's own marker, so it touches nothing another plugin
added.

JR-021 is a requirement to *not do* something, which no unit test can
demonstrate, so scripts/checks/no-index-injection.sh verifies it by absence.
The check was confirmed to fail on a reintroduced Apply() and on reintroduced
ReplaceLast injection -- a check that has only ever passed is not evidence.

Jellyfin has no plugin dependency mechanism, so nothing installs File
Transformation for the user and a log warning alone is one nobody reads.
GET /Plugins/JRay/Status/Dependencies reports whether the dependency is
satisfied, and the configuration page renders it with the repository URL and
what to do with it. Absent the plugin only the overlay is disabled; every
other feature works.

JR-022 and JR-023 stay In Progress rather than Done: neither has a test that
executes, and this repo has no test project yet.

TRACES: JR-021, JR-022, JR-023 | PR-004

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 18:58:12 +02:00
dtourolleandClaude Opus 5 3b24fe1b3c Requirements register, spec rewrite, and TRACES tags
jRay had no requirement IDs, so nothing in this repo could be traced to and
the CI gate had no denominator to read. The other two components had already
moved to registers; this brings the plugin level with them.

Adds docs/requirements.md with 46 permanent JR-nnn IDs, each carrying a parent
requirement, priority, status and verification tier, plus a per-requirement
verification plan. JR is flat rather than split by theme: the plugin is one
deployable with one audience, and JRay-public-server already ships UR/DR, so a
second repo using those prefixes would make UR-007 ambiguous across registers.

Rewrites SPEC.md as requirements prose with Current:/Gap: on every one. It had
drifted into a format-plus-API reference that documented schema_version 1 while
owning a format whose v2 shape was specified only in the other two repos, said
nothing about SR-002's scene-scoped semantics, and carried the manifest
exchange as a "planned" aside while its configuration classes were already
implemented. Plugin-side exchange obligations move here from the server's
spec, where they were an ownership inversion.

Adds JR-038..041 for PR-005, which had no software row in any repo -- it was
held structurally by SR-004 and GR-005 both being prohibitions, and a goal
preserved only by prohibitions is the kind that erodes unnoticed. jRay is the
component that actually opens a socket.

Tags 18 units with the requirements they satisfy. Tags name what the code
satisfies, so FileTransformationRegistration is not tagged JR-021: that
requirement is a prohibition and was still violated elsewhere when this was
written.

Vendors jray-project as a submodule for the system spec and shared gate.

TRACES: JR-001, JR-004, JR-005, JR-007, JR-008, JR-009, JR-010, JR-011
TRACES: JR-012, JR-013, JR-014, JR-015, JR-016, JR-017, JR-018, JR-019
TRACES: JR-020, JR-024, JR-025, JR-036, JR-038

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 18:57:48 +02:00
Gitea Actions 32f976e79f Update manifest.json for version 0.0.4 2026-07-04 19:47:05 +00:00
Gitea Actions 8e1679faed Update manifest.json for latest build (13471e2) 2026-07-04 19:44:35 +00:00
dtourolle 13471e21fb fix bug that causesd stale media (not on disk) to be suggested to workers
🏗️ Build Plugin / build (push) Successful in 20s
Latest Release / latest-release (push) Successful in 24s
🧪 Test Plugin / test (push) Successful in 19s
🚀 Release Plugin / build-and-release (push) Successful in 20s
v0.0.4
2026-07-04 21:42:43 +02:00
Gitea Actions 2ffbd2f50e Update manifest.json for version 0.0.3 2026-07-04 19:11:39 +00:00
Gitea Actions edb93e1028 Update manifest.json for latest build (f6762fc) 2026-07-04 19:10:48 +00:00
dtourolle f6762fcf29 feat: prioritise and blacklist media and overview in setting page of progress in adding info
🏗️ Build Plugin / build (push) Successful in 1m16s
Latest Release / latest-release (push) Successful in 27s
🧪 Test Plugin / test (push) Successful in 20s
🚀 Release Plugin / build-and-release (push) Successful in 24s
v0.0.3
2026-07-04 21:08:59 +02:00
dtourolle bb02c0f9b9 Enlarge actor overlay images and replace broken link with in-player popup
Clicking an actor card no longer navigates the SPA away from the player
(which lost playback position and often failed for person items). It now
opens a closeable in-player detail pop-up with a larger portrait and full
overview, dismissible via the close button, Back/Escape, the backdrop, or
by pressing play. On-screen card portraits enlarged from 80px to 120px.
2026-07-04 21:06:02 +02:00
dtourolle f11e5508ad update readme and spec for current release 2026-06-28 12:16:07 +02:00
Gitea Actions f5826084e0 Update manifest.json for version 0.0.2 2026-06-12 18:30:36 +00:00
Gitea Actions bea4d931c6 Update manifest.json for latest build (49c7077)
🚀 Release Plugin / build-and-release (push) Successful in 37s
v0.0.2
2026-06-12 18:26:36 +00:00
dtourolle 49c7077e23 bump server version
🏗️ Build Plugin / build (push) Successful in 33s
Latest Release / latest-release (push) Successful in 26s
🧪 Test Plugin / test (push) Successful in 18s
2026-06-12 20:25:32 +02:00
Gitea Actions ff339b681b Update manifest.json for latest build (0e6b03b) 2026-06-12 18:17:26 +00:00
dtourolle 0e6b03be15 fancier overlay
🏗️ Build Plugin / build (push) Successful in 21s
Latest Release / latest-release (push) Successful in 23s
🧪 Test Plugin / test (push) Successful in 18s
2026-06-12 20:16:39 +02:00
Gitea Actions 772babe9bc Update manifest.json for version 0.0.1 2026-06-12 18:11:18 +00:00
Gitea Actions f8365a5b58 Update manifest.json for latest build (4b3b64b) 2026-06-12 18:10:35 +00:00
dtourolle 4b3b64bd7e json copying
🏗️ Build Plugin / build (push) Successful in 22s
Latest Release / latest-release (push) Successful in 28s
🧪 Test Plugin / test (push) Successful in 17s
🚀 Release Plugin / build-and-release (push) Successful in 27s
debugging overlay
v0.0.1
2026-06-12 20:09:36 +02:00
Gitea Actions abad55788d Update manifest.json for version 0.0.0 2026-06-12 17:05:10 +00:00
Gitea Actions dea172d990 Update manifest.json for latest build (51a7365) 2026-06-12 17:04:27 +00:00
dtourolle 51a7365815 update spec
🏗️ Build Plugin / build (push) Successful in 22s
Latest Release / latest-release (push) Successful in 22s
🧪 Test Plugin / test (push) Successful in 18s
🚀 Release Plugin / build-and-release (push) Successful in 25s
v0.0.0
2026-06-12 19:03:39 +02:00
dtourolle f1cffa7dfa Added work remaining url for remote extraction client 2026-06-12 19:03:31 +02:00
Gitea Actions 4c637de442 Update manifest.json for latest build (a38122e) 2026-06-12 16:53:59 +00:00
dtourolle a38122e993 first commit
🏗️ Build Plugin / build (push) Successful in 1m13s
🧪 Test Plugin / test (push) Successful in 20s
Latest Release / latest-release (push) Successful in 25s
2026-06-12 18:16:47 +02:00
T-GanderandGitHub 7a9dbdafcc Update README for .NET SDK version and setup instructions (#85) 2025-11-23 11:26:03 -07:00
T-GanderandGitHub 6277846394 Fixed plugin template to build and copy correctly, allowing settings button to show and the plugin to register. (#84) 2025-11-23 06:19:48 -07:00
Bond-009andGitHub d544b71939 Merge pull request #79 from jakobkukla/patch-1
Fix vscode build task for NET 8
2025-03-11 09:33:59 +01:00
Jakob KuklaandGitHub 12988e127f Fix vscode build task for .NET 8 2025-03-04 00:55:32 +01:00
Anthony LavadoandGitHub e9312af2c2 Merge pull request #72 from jellyfin/renovate/jellyfin.controller-10.x 2024-10-05 11:42:18 -04:00
renovate[bot]andGitHub 4291891dfd Update dependency Jellyfin.Controller to 10.9.11 2024-10-05 15:20:24 +00:00
Anthony LavadoandGitHub e9c9f334cd Merge pull request #74 from Shadowghost/upgrade-template 2024-10-05 11:20:08 -04:00
Shadowghost 3afa1fc407 Upgrade template to 10.9.x and .NET 8 2024-10-05 17:06:23 +02:00
Anthony LavadoandGitHub 2c1143b49f Merge pull request #65 from mrnoname1000/master 2024-10-05 11:01:52 -04:00
Anthony LavadoandGitHub 74da0d2568 Merge pull request #54 from carif/linux 2024-10-05 11:01:16 -04:00
ErikandGitHub 2ddd08221d Updated to specify that you need to place the plugin DLL into a subfolder (#71) 2024-05-19 08:08:00 -06:00
Bond-009andGitHub 5f4229e0fd Merge pull request #66 from ReenigneArcher/patch-1
chore(deps): bump Jellyfin.Controller and Jellyfin.Model to 10.8.13
2024-01-12 22:38:00 +01:00
ReenigneArcherandGitHub 4c4b1e5a71 chore(deps): bump Jellyfin.Controller and Jellyfin.Model to 10.8.13 2023-12-12 23:14:20 -05:00
mrnoname1000andGitHub 7fe332f29c README.md: Fix sh UUID generator
And make call to head POSIX-compliant
2023-10-19 23:35:44 +00:00
Bond-009andGitHub 9052fe20be Merge pull request #64 from jellyfin/renovate/stylecop.analyzers-1.x
chore(deps): update dependency stylecop.analyzers to v1.2.0-beta.507
2023-08-16 18:50:53 +02:00
renovate[bot]andGitHub 3c3776cc60 chore(deps): update dependency stylecop.analyzers to v1.2.0-beta.507 2023-07-03 05:49:33 +00:00
Johannes KauffmannandGitHub 0cb471baa2 Fix typo in interface name (#61) 2023-06-30 18:23:54 -06:00