4.7 KiB
| id | ticket | title | status | created | resolved | decision | tags |
|---|---|---|---|---|---|---|---|
| AGD-0006 | app-home-filesystem-surface-and-semantics | Agenda - App Home Filesystem Surface and Semantics | open | 2026-03-27 |
Agenda - App Home Filesystem Surface and Semantics
Problema
Apps precisam de filesystem util para dados de usuario, cache e configuracao, mas sem acesso ao FS inteiro do host.
Sem um contrato claro de home por app, a API tende a crescer com semantica inconsistente entre plataformas.
Inputs Ja Fechados
- Todo
appacessa somente suahomelogica. - Nunca ha acesso direto ao filesystem global do host pela userland.
- O runtime
fsinterno continua cobrindo tantogamequantoapp. - Existe uma async IO lane compartilhavel por assets, memcard e FS. Esta
agenda deve decidir a API publica de FS considerando essa lane, mas a
existencia da lane ja esta fechada por
DEC-0034.
Fronteira com a Async IO Lane
DEC-0034 fecha a existencia de uma lane serial para trabalho async de IO. FS
pode consumir essa lane internamente para escrita, configuracao, leitura ou
listagem, conforme prioridade operacional definida pelo runtime.
Esta agenda continua dona da decisao sobre API publica de FS para app home.
Portanto, a existencia da lane nao implica criar agora request handles, polling
publico ou novas syscalls de FS. Esses shapes permanecem em aberto aqui.
Alvo da Discussao
Fechar a superficie e semantica funcional de fs para perfil app, com sandbox por app_id e transporte de bytes via decisao 003.
O Que Precisa Ser Definido
-
Surface minima do perfil
app. Operacoes candidatas:read;write;exists;stat;list_dir;delete;mkdir;rename.
-
Modelo de caminho logico. Definir:
- raiz virtual (
home); - normalizacao de path;
- bloqueio de path traversal;
- limites de profundidade/tamanho.
- raiz virtual (
-
Mapeamento host. Definir:
- como
homevira caminho fisico no host; - isolamento entre apps por
app_id; - regras de portabilidade entre hosts.
- como
-
Semantica de leitura/escrita. Definir:
- leitura total vs parcial;
- overwrite vs append;
- truncation;
- criacao implicita;
- escrita atomica por arquivo (quando aplicavel).
-
Quotas e capacidade. Definir:
- se v1 tem quota por app;
- comportamento para
storage full; - exposicao de metrica de uso livre/ocupado.
-
Metadados e listagem. Definir:
- campos minimos de
stat; - shape canonico de
list_dir; - timestamps (sim/nao e com qual garantia).
- campos minimos de
-
Fault/status do dominio. Fechar fronteira de:
statusoperacional;Trapestrutural;Panicinterno. E obrigatorio fechar, por operacao, a matriz final de retorno e fault class.
Responsabilidade Absorvida da Agenda 003
No perfil app (home sandbox), esta agenda passa a ser a fonte normativa para:
-
Catalogo de
statusde filesystem para app. Minimo esperado:OK;NOT_FOUND;PATH_INVALID;ACCESS_DENIED;NO_SPACE;ALREADY_EXISTS;UNAVAILABLE.
-
Matriz por operacao (
read,write,exists,stat,list_dir,delete,mkdir,rename). Para cada caso, classificar explicitamente:status;Trap;Panic.
-
Shape de retorno por operacao. Definir, no minimo:
statuscomo primeiro retorno;bytes_transferredemread/writequando aplicavel;- payload de metadados/listagem com formato canonico.
-
Regra de escrita parcial.
writenao pode reportar sucesso parcial silencioso. Quando a operacao nao puder ser concluida conforme contrato, deve retornar falha de dominio.
Open Questions de Arquitetura
- O v1 precisa de quota fixa por app ou apenas limites fisicos do host?
renameentra no MVP ou pode ficar para fase seguinte?- Qual conjunto minimo de metadados garante portabilidade real entre hosts?
- Qual grau de atomicidade e obrigatorio para escrita de arquivo no v1?
- Quais operacoes de FS devem consumir a async IO lane e quais permanecem sincrono-aparentes para a userland?
Dependencias
../decisions/003-vm-owned-byte-transfer-protocol.md../decisions/007-filesystem-fault-core-policy.md../specs/13-cartridge.md../specs/12-firmware-pos-and-prometeuhub.md../specs/16a-syscall-policies.md
Fora de Escopo
- slots de memcard para
game(fechado naspec 08); - acesso cross-app;
- sync remoto/cloud;
- DB embutido como contrato de plataforma.
Criterio de Saida Desta Agenda
Pode virar PR quando houver decisao escrita sobre:
- surface minima de
fsparaappemhome; - sandbox e isolamento por
app_id; - semantica final de path/read/write/listagem;
- matriz completa de fault/status para as operacoes do perfil
app.