132 lines
3.7 KiB
Markdown
132 lines
3.7 KiB
Markdown
# 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
|
|
|
|
1. Todo `app` acessa somente sua `home` logica.
|
|
2. Nunca ha acesso direto ao filesystem global do host pela userland.
|
|
3. O runtime `fs` interno continua cobrindo tanto `game` quanto `app`.
|
|
|
|
## 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
|
|
|
|
1. Surface minima do perfil `app`.
|
|
Operacoes candidatas:
|
|
- `read`;
|
|
- `write`;
|
|
- `exists`;
|
|
- `stat`;
|
|
- `list_dir`;
|
|
- `delete`;
|
|
- `mkdir`;
|
|
- `rename`.
|
|
|
|
2. Modelo de caminho logico.
|
|
Definir:
|
|
- raiz virtual (`home`);
|
|
- normalizacao de path;
|
|
- bloqueio de path traversal;
|
|
- limites de profundidade/tamanho.
|
|
|
|
3. Mapeamento host.
|
|
Definir:
|
|
- como `home` vira caminho fisico no host;
|
|
- isolamento entre apps por `app_id`;
|
|
- regras de portabilidade entre hosts.
|
|
|
|
4. Semantica de leitura/escrita.
|
|
Definir:
|
|
- leitura total vs parcial;
|
|
- overwrite vs append;
|
|
- truncation;
|
|
- criacao implicita;
|
|
- escrita atomica por arquivo (quando aplicavel).
|
|
|
|
5. Quotas e capacidade.
|
|
Definir:
|
|
- se v1 tem quota por app;
|
|
- comportamento para `storage full`;
|
|
- exposicao de metrica de uso livre/ocupado.
|
|
|
|
6. Metadados e listagem.
|
|
Definir:
|
|
- campos minimos de `stat`;
|
|
- shape canonico de `list_dir`;
|
|
- timestamps (sim/nao e com qual garantia).
|
|
|
|
7. Fault/status do dominio.
|
|
Fechar fronteira de:
|
|
- `status` operacional;
|
|
- `Trap` estrutural;
|
|
- `Panic` interno.
|
|
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:
|
|
|
|
1. Catalogo de `status` de filesystem para app.
|
|
Minimo esperado:
|
|
- `OK`;
|
|
- `NOT_FOUND`;
|
|
- `PATH_INVALID`;
|
|
- `ACCESS_DENIED`;
|
|
- `NO_SPACE`;
|
|
- `ALREADY_EXISTS`;
|
|
- `UNAVAILABLE`.
|
|
|
|
2. Matriz por operacao (`read`, `write`, `exists`, `stat`, `list_dir`, `delete`, `mkdir`, `rename`).
|
|
Para cada caso, classificar explicitamente:
|
|
- `status`;
|
|
- `Trap`;
|
|
- `Panic`.
|
|
|
|
3. Shape de retorno por operacao.
|
|
Definir, no minimo:
|
|
- `status` como primeiro retorno;
|
|
- `bytes_transferred` em `read`/`write` quando aplicavel;
|
|
- payload de metadados/listagem com formato canonico.
|
|
|
|
4. Regra de escrita parcial.
|
|
`write` nao pode reportar sucesso parcial silencioso.
|
|
Quando a operacao nao puder ser concluida conforme contrato, deve retornar falha de dominio.
|
|
|
|
## Open Questions de Arquitetura
|
|
|
|
1. O v1 precisa de quota fixa por app ou apenas limites fisicos do host?
|
|
2. `rename` entra no MVP ou pode ficar para fase seguinte?
|
|
3. Qual conjunto minimo de metadados garante portabilidade real entre hosts?
|
|
4. Qual grau de atomicidade e obrigatorio para escrita de arquivo no v1?
|
|
|
|
## 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` (fica na agenda `013`);
|
|
- 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 `fs` para `app` em `home`;
|
|
- sandbox e isolamento por `app_id`;
|
|
- semantica final de path/read/write/listagem;
|
|
- matriz completa de fault/status para as operacoes do perfil `app`.
|