Skip to content

Commit 197f291

Browse files
committed
docs: consolidate public project documentation
1 parent 4f3fa90 commit 197f291

20 files changed

Lines changed: 167 additions & 186 deletions

CHANGELOG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ include migration notes.
77

88
## Unreleased
99

10+
- Consolidated public integration, compatibility, release, and async-security documentation;
11+
removed the speculative roadmap and pinned upstream evidence to certified versions.
12+
- Corrected HS256 guidance to distinguish the 32-character validation boundary from required key
13+
entropy, and clarified that concurrent reset-token completion must be serialized by the
14+
application or shared storage.
15+
1016
## 7.2.0 - 2026-07-12
1117

1218
- Added stateless Spring MVC async and streaming support based on a request-attribute
@@ -23,8 +29,8 @@ include migration notes.
2329

2430
## 7.0.0 - 2026-06-23
2531

26-
- Certified Vigil for Spring Boot 4.1.x, Spring Framework 7.x, Spring Security
27-
7.1.x, Java 25, Gradle 9.1.x, and Jackson 3.
32+
- Certified Vigil for Spring Boot 4.1.0, Spring Framework 7.0.8, Spring Security
33+
7.1.0, Java 25, Gradle 9.1.x, and Jackson 3.
2834
- Updated build tooling to Spring Boot 4.1.0, Java 25 toolchains, Gradle 9.1.0,
2935
JaCoCo 0.8.14, Checkstyle 13.6.0, and google-java-format 1.28.0.
3036
- Added starter auto-configuration compatibility tests that prove Vigil core

CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Contributions are welcome when they keep Vigil small, explicit, tested, and secu
55
## Development Requirements
66

77
- Java 25.
8-
- Spring Boot 4.1.x compatibility.
8+
- Use the exact platform versions in the [compatibility reference](docs/reference/compatibility.md).
99
- Use the Gradle wrapper, not a system Gradle requirement.
1010

1111
## Quality Gates
@@ -33,6 +33,8 @@ gradlew.bat build --no-daemon
3333
- Security-sensitive errors must not expose secrets, raw tokens, or parser internals.
3434
- Configuration should fail fast at startup when required security inputs are missing.
3535
- Architecture changes should update the relevant public docs in the same change.
36+
- Completed user-visible work belongs in `CHANGELOG.md`; speculative features belong in GitHub
37+
Issues or Projects, not the active documentation tree.
3638

3739
## Scope Rules
3840

README.md

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ JWT authentication infrastructure for Spring Boot applications.
44

55
[![Maven Central](https://img.shields.io/maven-central/v/io.github.sequelcore/vigil-spring-boot-starter.svg)](https://central.sonatype.com/artifact/io.github.sequelcore/vigil-spring-boot-starter)
66

7-
Vigil provides JWT lifecycle, request authentication, cookie helpers, tenant consistency, revocation, reset tokens, and reusable step-up credential verification. Applications retain ownership of users, login routes, credentials, recovery delivery, and business authorization.
7+
Vigil provides JWT lifecycle, request authentication, cookie helpers, tenant consistency,
8+
revocation, reset tokens, and reusable step-up credential verification. Applications retain
9+
ownership of users and business authorization; the complete boundary is documented in
10+
[system boundaries](docs/architecture/system-boundaries.md).
811

912
## Compatibility
1013

11-
Vigil `7.2.x` is certified with Java 25, Spring Boot 4.1.0, Spring Framework 7.0.8,
12-
Spring Security 7.1.0, Gradle 9.6.x, and Jackson 3. Later dependency patches are not claimed as
13-
certified until they pass Vigil's complete gate. Vigil `6.0.x` was the final Java 21 / Spring Boot
14-
3.5 line.
14+
Vigil `7.2.0` is certified with Java 25 and Spring Boot 4.1.0. See the
15+
[compatibility reference](docs/reference/compatibility.md) for the complete tested combination.
1516

1617
`7.2.0` is the current release line. Public consumers should pin an exact version and review the release notes before upgrading.
1718

@@ -35,26 +36,17 @@ vigil:
3536
audience: my-api
3637
```
3738
38-
```java
39-
http.addFilterBefore(vigilAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
40-
```
41-
42-
The application must still configure route authorization. `ignored-paths` skips Vigil processing; it does not grant anonymous access.
39+
Follow the complete [authentication guide](docs/guides/authentication.md) to install the filter,
40+
request-scoped security repository, stateless session policy, and application authorization rules.
41+
`ignored-paths` skips Vigil processing; it does not grant anonymous access.
4342

4443
## Documentation
4544

46-
Start at the [documentation index](docs/README.md).
45+
Start at the [documentation index](docs/README.md). The primary integration references are:
4746

4847
- [Authentication guide](docs/guides/authentication.md)
4948
- [Async and streaming security](docs/guides/async-streaming-security.md)
5049
- [Configuration reference](docs/reference/configuration.md)
51-
- [System boundaries](docs/architecture/system-boundaries.md)
52-
- [Security model](docs/security/security-model.md)
53-
- [Step-up authorization](docs/security/step-up-authorization.md)
54-
- [Deployment and operations](docs/operations/deployment.md)
55-
- [Java API contract](docs/api/java-api.md)
56-
- [Testing and verification](docs/development/testing.md)
57-
- [Release policy](docs/releases/release-policy.md)
5850

5951
## Verification
6052

SECURITY.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
## Supported Versions
44

5-
Until a stable public support policy is adopted, only the current `main` branch receives security fixes.
5+
Vigil 7.2.x and the current `main` branch receive security fixes. Older release lines are
6+
unsupported unless a security advisory states otherwise. See the
7+
[compatibility reference](docs/reference/compatibility.md).
68

79
## Reporting A Vulnerability
810

docs/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# Vigil documentation
22

3-
Vigil is a Spring Boot starter for application-owned JWT authentication. It provides token lifecycle, request authentication, cookie helpers, tenant consistency, revocation, reset tokens, and step-up credential verification. It does not own users, product authorization, or identity-delivery flows.
3+
Vigil is a Spring Boot starter for application-owned JWT authentication. Read
4+
[system boundaries](architecture/system-boundaries.md) before integrating it into an application.
45

56
## Start here
67

7-
- [Async and streaming security](guides/async-streaming-security.md) — preserve stateless authentication across MVC redispatches.
8-
98
- [Authentication guide](guides/authentication.md) — configure JWTs, cookies, Spring Security, tenants, and reset tokens.
9+
- [Async and streaming security](guides/async-streaming-security.md) — preserve stateless authentication across MVC redispatches.
1010
- [Configuration reference](reference/configuration.md) — every `vigil.*` property and its defaults.
11+
- [Compatibility reference](reference/compatibility.md) — certified platform and dependency versions.
1112
- [System boundaries](architecture/system-boundaries.md) — understand ownership and extension points before integrating.
1213
- [Java API contract](api/java-api.md) — public services, SPIs, and compatibility expectations.
1314
- [Step-up proof decision](adr/0001-step-up-opaque-one-time-proofs.md) — why approvals are opaque and server-consumed.
@@ -22,6 +23,5 @@ Vigil is a Spring Boot starter for application-owned JWT authentication. It prov
2223

2324
- [Testing and verification](development/testing.md) — local gates and integration coverage.
2425
- [Release policy](releases/release-policy.md) — compatibility, versioning, and publication controls.
25-
- [Roadmap](roadmap.md) — supported scope and deliberately deferred work.
2626

2727
The root [README](../README.md) is the concise package landing page. This index is the canonical navigation surface for repository documentation.

docs/api/java-api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ This guide names Vigil's public integration contracts. It is not generated Javad
88
| --- | --- |
99
| `VigilAuthService` | Validate application credentials before issuing, refreshing, or revoking tokens. |
1010
| `VigilTokenService` | Use only when a lower-level token integration is genuinely needed. |
11-
| `VigilResetTokenService` | Deliver the reset token and update the user's password after successful consumption. |
11+
| `VigilResetTokenService` | Deliver the token, serialize concurrent completion in application/shared storage, and update the password only after successful consumption. See the [security model](../security/security-model.md). |
1212
| `VigilPasswordService` | Store its returned hash; own password policy and user persistence. |
1313
| `VigilTenantContext` | Read the validated request tenant. |
1414

docs/research/async-streaming-security-sources.md renamed to docs/architecture/async-streaming-evidence.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Async and streaming security research
1+
# Async and streaming security evidence
22

33
Research cutoff: 2026-07-12. Primary specifications, official documentation, upstream source,
44
tests, and issue discussions take precedence over secondary guidance.
@@ -10,26 +10,26 @@ tests, and issue discussions take precedence over secondary guidance.
1010
| [Servlet 6.1 specification](https://jakarta.ee/specifications/servlet/6.1/jakarta-servlet-spec-6.1.pdf), [AsyncContext](https://jakarta.ee/specifications/servlet/6.1/apidocs/jakarta.servlet/jakarta/servlet/asynccontext), [AsyncListener](https://jakarta.ee/specifications/servlet/6.1/apidocs/jakarta.servlet/jakarta/servlet/asynclistener) | `startAsync` lets the filter/servlet chain return while the same response remains open. Async error and timeout notifications belong to the container lifecycle; a new async cycle requires listener registration again. | Preserve security evidence on the servlet request. Do not replay credentials, manually complete an emitter after failed send, or equate return from the initial chain with request completion. |
1111
| [DispatcherType](https://jakarta.ee/specifications/servlet/6.1/apidocs/jakarta.servlet/jakarta/servlet/dispatchertype), [ServletRequest.getDispatcherType](https://jakarta.ee/specifications/servlet/6.1/apidocs/jakarta.servlet/jakarta/servlet/servletrequest#getDispatcherType()) | `REQUEST`, `ASYNC`, and `ERROR` are distinct filter-chain invocations. `ASYNC` is produced by `AsyncContext.dispatch`; `ERROR` is container error handling. | Authenticate credentials only during the initial request. Continue authorization on redispatch using saved request evidence. A dispatch without that evidence fails closed. |
1212
| [ServletResponse](https://jakarta.ee/specifications/servlet/6.1/apidocs/jakarta.servlet/jakarta/servlet/servletresponse) | Flushing commits status and headers; reset after commit is illegal and later status/header changes cannot repair the response. | Prevent the secondary authorization failure. Do not attempt to render a new 401/403 over committed SSE output. |
13-
| [Spring MVC async processing](https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-ann-async.html), [ResponseBodyEmitter](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.html), [SseEmitter](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.html) | `DeferredResult` and streaming return types finish through an `ASYNC` dispatch. An emitter `IOException` caused by client disconnect must be left to the container and MVC, which perform error notification, final dispatch, exception resolution, and completion. | Broken pipe remains an expected network event. Vigil preserves authentication for the final dispatch instead of catching or suppressing the `IOException`. |
14-
| [OncePerRequestFilter](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/OncePerRequestFilter.html) | Async and error dispatch participation is opt-in; both can run on different threads. | Vigil keeps the authentication filter out of redispatch. JWT validation, blacklist lookup, tenant extraction, hooks, and context populators execute once. |
13+
| [Spring MVC async processing](https://docs.spring.io/spring-framework/reference/7.0/web/webmvc/mvc-ann-async.html), [ResponseBodyEmitter 7.0.8](https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.html), [SseEmitter 7.0.8](https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.html) | `DeferredResult` and streaming return types finish through an `ASYNC` dispatch. An emitter `IOException` caused by client disconnect must be left to the container and MVC, which perform error notification, final dispatch, exception resolution, and completion. | Broken pipe remains an expected network event. Vigil preserves authentication for the final dispatch instead of catching or suppressing the `IOException`. |
14+
| [OncePerRequestFilter 7.0.8](https://docs.spring.io/spring-framework/docs/7.0.8/javadoc-api/org/springframework/web/filter/OncePerRequestFilter.html) | Async and error dispatch participation is opt-in; both can run on different threads. | Vigil keeps the authentication filter out of redispatch. JWT validation, blacklist lookup, tenant extraction, hooks, and context populators execute once. |
1515
| [Spring Security context persistence](https://docs.spring.io/spring-security/reference/7.0/servlet/authentication/persistence.html), [RequestAttributeSecurityContextRepository API](https://docs.spring.io/spring-security/reference/7.1/api/java/org/springframework/security/web/context/RequestAttributeSecurityContextRepository.html) | Custom authentication must explicitly save. The request-attribute repository restores one request across dispatch types and never persists to later requests. `SecurityContextHolderFilter` loads and clears the holder. | Save the authenticated context explicitly to a request-attribute repository configured in the application chain. This is stateless and creates no `HttpSession`. |
1616
| [Servlet authorization](https://docs.spring.io/spring-security/reference/7.0/servlet/authorization/authorize-http-requests.html), [Servlet async integration](https://docs.spring.io/spring-security/reference/7.0/servlet/integrations/servlet-api.html) | Authorization applies to dispatcher types by default. Async task propagation and redispatch persistence are related but distinct mechanisms. | Vigil does not install dispatcher `permitAll` rules. The application continues to own HTTP authorization, including any narrow error-rendering exception. |
1717

1818
## Upstream implementation and test evidence
1919

20-
- Spring Framework 7.0.x:
21-
- [`ResponseBodyEmitterReturnValueHandler`](https://github.com/spring-projects/spring-framework/blob/7.0.x/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java)
22-
- [`DeferredResultMethodReturnValueHandler`](https://github.com/spring-projects/spring-framework/blob/7.0.x/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java)
23-
- [`ResponseBodyEmitterReturnValueHandlerTests`](https://github.com/spring-projects/spring-framework/blob/7.0.x/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java)
24-
- [`StreamingResponseBodyReturnValueHandlerTests`](https://github.com/spring-projects/spring-framework/blob/7.0.x/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandlerTests.java)
25-
- Spring Security 7.0.x:
26-
- [`RequestAttributeSecurityContextRepository`](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/main/java/org/springframework/security/web/context/RequestAttributeSecurityContextRepository.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/test/java/org/springframework/security/web/context/RequestAttributeSecurityContextRepositoryTests.java)
27-
- [`SecurityContextHolderFilter`](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/main/java/org/springframework/security/web/context/SecurityContextHolderFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/test/java/org/springframework/security/web/context/SecurityContextHolderFilterTests.java)
28-
- [`AuthorizationFilter`](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/main/java/org/springframework/security/web/access/intercept/AuthorizationFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/test/java/org/springframework/security/web/access/intercept/AuthorizationFilterTests.java)
29-
- [`ExceptionTranslationFilter`](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/main/java/org/springframework/security/web/access/ExceptionTranslationFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.0.x/web/src/test/java/org/springframework/security/web/access/ExceptionTranslationFilterTests.java)
30-
- Spring Boot 4.1.x:
31-
- [`SecurityFilterAutoConfiguration`](https://github.com/spring-projects/spring-boot/blob/main/module/spring-boot-security/src/main/java/org/springframework/boot/security/autoconfigure/web/servlet/SecurityFilterAutoConfiguration.java)
32-
- [`SecurityFilterAutoConfigurationTests`](https://github.com/spring-projects/spring-boot/blob/main/module/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/web/servlet/SecurityFilterAutoConfigurationTests.java)
20+
- Spring Framework 7.0.8:
21+
- [`ResponseBodyEmitterReturnValueHandler`](https://github.com/spring-projects/spring-framework/blob/v7.0.8/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandler.java)
22+
- [`DeferredResultMethodReturnValueHandler`](https://github.com/spring-projects/spring-framework/blob/v7.0.8/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/DeferredResultMethodReturnValueHandler.java)
23+
- [`ResponseBodyEmitterReturnValueHandlerTests`](https://github.com/spring-projects/spring-framework/blob/v7.0.8/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitterReturnValueHandlerTests.java)
24+
- [`StreamingResponseBodyReturnValueHandlerTests`](https://github.com/spring-projects/spring-framework/blob/v7.0.8/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBodyReturnValueHandlerTests.java)
25+
- Spring Security 7.1.0:
26+
- [`RequestAttributeSecurityContextRepository`](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/main/java/org/springframework/security/web/context/RequestAttributeSecurityContextRepository.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/test/java/org/springframework/security/web/context/RequestAttributeSecurityContextRepositoryTests.java)
27+
- [`SecurityContextHolderFilter`](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/main/java/org/springframework/security/web/context/SecurityContextHolderFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/test/java/org/springframework/security/web/context/SecurityContextHolderFilterTests.java)
28+
- [`AuthorizationFilter`](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/main/java/org/springframework/security/web/access/intercept/AuthorizationFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/test/java/org/springframework/security/web/access/intercept/AuthorizationFilterTests.java)
29+
- [`ExceptionTranslationFilter`](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/main/java/org/springframework/security/web/access/ExceptionTranslationFilter.java) and [tests](https://github.com/spring-projects/spring-security/blob/7.1.0/web/src/test/java/org/springframework/security/web/access/ExceptionTranslationFilterTests.java)
30+
- Spring Boot 4.1.0:
31+
- [`SecurityFilterAutoConfiguration`](https://github.com/spring-projects/spring-boot/blob/v4.1.0/module/spring-boot-security/src/main/java/org/springframework/boot/security/autoconfigure/web/servlet/SecurityFilterAutoConfiguration.java)
32+
- [`SecurityFilterAutoConfigurationTests`](https://github.com/spring-projects/spring-boot/blob/v4.1.0/module/spring-boot-security/src/test/java/org/springframework/boot/security/autoconfigure/web/servlet/SecurityFilterAutoConfigurationTests.java)
3333

3434
The local executable baseline resolves Spring Boot 4.1.0, Spring Framework MVC 7.0.8, Spring
3535
Security Web 7.1.0, Tomcat 11.0.22, and Servlet 6.1. Vigil does not claim unexecuted version ranges.

0 commit comments

Comments
 (0)