Foy is the Jakarta Servlet 6.1 implementation of the Vidocq ecosystem. It grafts onto the Chappe HTTP transport and pulls its optional CDI from Vauban. Honour the Servlet contract without paying its historical weight: no classpath, no runtime scan, no hot-path reflection.

Origin of the name

Vincent-Louis-Alphonse Foy (1796-1888), French senior civil servant, director of the French telegraph service from 1833 to 1853. Successor (through Pierre-François Marchal) of the Chappe brothers at the head of the Administration centrale de la télégraphie established by royal ordinance on 24 August 1833. Co-inventor of the Foy-Breguet telegraph (1840s), which reused the Chappe code over electric lines. See French Wikipedia.

The metaphor is direct: Foy inherits the Chappe transport. Just as Alphonse Foy in 1833 took over the Chappe brothers' infrastructure to evolve it without throwing away its codes, the Foy module takes over the Chappe HTTP engine to graft the Servlet 6.1 layer on top — same protocol on the surface, redesigned engineering underneath.

At a glance

Implemented spec

Jakarta Servlet 6.1

Repo

https://codefloe.com/Vidocq/foy

Java

25 (LTS), virtual threads

Java modules

io.vidocq.foy.api, io.vidocq.foy.core, io.vidocq.foy.chappe, io.vidocq.foy.cdi.vauban

Runtime dependencies

jakarta.servlet-api, jakarta.cdi-api (static), https://codefloe.com/Vidocq/chappe (transport), https://codefloe.com/Vidocq/vauban (CDI)

TCK

⚠️ baseline — 95.6 % of the official Jakarta Servlet 6.1 TCK on the api.* family (core engine), 53.7 % raw over the full suite. 81 % of the remaining errors come from a single missing feature: web-fragment scanning. Details here.

Position in the ecosystem

Foy is the servlet layer: it turns a Chappe HTTP connection into Servlet/Filter/Listener execution and exposes the Vauban BeanManager to application beans.

Diagram

Foy shares the Chappe runtime with Cassini (REST 4.0). The same JVM can serve legacy Servlets (Foy) and JAX-RS resources (Cassini) on the same Chappe connector.

Bugs and benchmarks

  • BUG.md — reproducible bugs, hypotheses, status.

  • TCK.md — full TCK measurement report (per-family tallies, root causes).

  • Benchmarks: no numbers recorded yet — a BENCH.md will be created with the first measured run (workspace convention). No performance numbers inline in this doc.