Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-023: Protocol RFC Compliance Scope

Status: Accepted. Date: 2026-04-20. Deciders: Architect + implementer.

Context

Kiseki exposes three protocol interfaces: S3 HTTP, NFSv3, NFSv4.2. ADR-013 (POSIX semantics) and ADR-014 (S3 API scope) define the functional subset but don’t reference specific RFC sections or define wire-format compliance testing.

Now that wire protocol implementations exist, we need to codify which RFC requirements are met and how compliance is verified.

Decision

Protocol scope

ProtocolStandardImplemented SubsetTotal in Standard
NFSv3RFC 18137 of 22 procedures22 procedures
NFSv4.2RFC 786210 of ~60 operations~60 operations
S3AWS S3 API5 of 40+ operations40+ operations

NFSv3 (RFC 1813) — implemented procedures

#ProcedureStatusNotes
0NULLImplementedPing/health check
1GETATTRImplementedFile/directory attributes
3LOOKUPImplementedName → file handle resolution
6READImplementedByte-range file read
7WRITEImplementedFile data write
8CREATEImplementedCreate new file + directory index entry
16READDIRImplementedDirectory listing with real filenames

Not implemented: SETATTR, ACCESS, READLINK, SYMLINK, MKNOD, REMOVE, RMDIR, RENAME, LINK, READDIRPLUS, FSSTAT, FSINFO, PATHCONF, COMMIT.

NFSv4.2 (RFC 7862) — implemented COMPOUND operations

OpNameStatusNotes
9GETATTRImplementedBitmap-selected attributes
10GETFHImplementedReturn current file handle
15LOOKUPStub (delegates to directory index)
24PUTROOTFHImplementedSet root file handle
25READImplementedVia stateid + offset + count
38WRITEImplementedVia stateid + offset + stable
42EXCHANGE_IDImplementedRandom client IDs (C-ADV-7)
43CREATE_SESSIONImplementedRandom session IDs (C-ADV-2)
44DESTROY_SESSIONImplementedSession teardown
53SEQUENCEImplementedPer-request sequencing
63IO_ADVISEImplementedAccepted (advisory integration pending)

S3 API — implemented operations

OperationHTTP MethodStatus
PutObjectPUT /:bucket/:keyImplemented
GetObjectGET /:bucket/:keyImplemented
HeadObjectHEAD /:bucket/:keyImplemented
DeleteObjectDELETE /:bucket/:keyStub (returns 204)
ListObjectsV2GET /:bucketNot yet

Compliance testing approach

  1. BDD feature files map to RFC sections:

    • specs/features/nfs3-rfc1813.feature (14 scenarios)
    • specs/features/nfs4-rfc7862.feature (20 scenarios)
    • specs/features/s3-api.feature (10 scenarios)
  2. Wire format validation via Python e2e tests:

    • NFS: raw TCP with struct.pack for ONC RPC framing
    • S3: requests library for HTTP
  3. Real client interop (future):

    • NFS: mount -t nfs -o nfsvers=3,tcp in Docker
    • S3: boto3 / aws-cli

Consequences

  • Clear documentation of what’s implemented vs what’s not
  • BDD scenarios serve as living compliance spec
  • Real client interop deferred until wire format proven via raw tests
  • Expanding the subset (e.g., adding REMOVE, RENAME) requires: new BDD scenario → new step definition → implementation → test green

References

  • RFC 1813: NFS Version 3 Protocol Specification
  • RFC 7862: NFS Version 4.2 Protocol
  • RFC 5531: ONC RPC Version 2
  • RFC 4506: XDR: External Data Representation Standard
  • AWS S3 API Reference
  • ADR-013: POSIX Semantics Scope
  • ADR-014: S3 API Scope