Skip to content

Sem cliente de linha de comando para submeter (CD-MOJ tem moj-comp) #145

Closed

Description

@matbrgz

Comparando com o CD-MOJ, que documenta um CLI de submissão (moj-comp, "offline submission capability") além da interface web.

Situação aqui

Existe API de submissão: Route::apiResource('runs', RunController::class) com Sanctum. Então dá para submeter por HTTP — o que falta é o cliente.

Por que um CLI importa

Em treino, a equipe está no editor e não no navegador. moj-comp arquivo.cpp é um comando; a alternativa é trocar de janela, escolher problema num select, escolher linguagem, anexar arquivo. Numa sessão de treino com dezenas de submissões isso muda o quanto a ferramenta atrapalha.

Numa prova oficial normalmente se exige a interface web — então isto é sobretudo para treino, que é justamente o caso do Treino Livre (#43).

Escopo

Um script pequeno que leia servidor e token de um arquivo de config, descubra o problema pelo nome do arquivo ou por argumento, detecte a linguagem pela extensão e acompanhe o veredito até sair. Nada novo no servidor: a API já existe.

A parte que precisa de decisão é o token — hoje Sanctum emite token de usuário, e uma equipe teria que gerar o dela. Vale ver se isso encosta no #47 (contas gerenciadas) antes de inventar um fluxo separado.

Fora de escopo, deliberadamente

O CD-MOJ também despacha para outro juiz (SPOJ, beecrowd) em vez de executar localmente. Isso é a arquitetura dele, não uma funcionalidade faltando aqui: o microHelium é compatível com BOCA e julga com casos de teste próprios, e o #53 acabou de construir o julgamento distribuído próprio. Registro para não voltar como sugestão.

Activity

  1. matbrgz commented on Sep 15, 2026

    @matbrgz
    MemberAuthor

    Fechado pelo PR #177, mergeado em 1a452a5.

    bin/mh — Python 3 e biblioteca padrão, um arquivo, copiável para qualquer lugar do PATH. Roda na máquina do competidor, não no servidor, então nada que precise de pip install.

    mh login --server https://contest.exemplo.org
    mh problems
    mh submit A.sh          # problema pelo nome do arquivo, linguagem pela extensão
    mh runs
    mh logout

    submit espera o veredito e sai com ele (0 aceito, 1 recusado, 2 erro), então compõe com &&.

    A afirmação do issue — "nada novo no servidor" — foi conferida e é verdade, mas não pelo motivo óbvio: não existe rota de linguagens, e POST /api/runs exige language_id. O que salva é que GET /api/contests/{id} já devolve problemas e linguagens ativas.

    Quatro testes E2E sobre socket de verdade, contra um artisan serve. Dois defeitos achados pelo caminho e corrigidos: o throttle do #159 contava num cache compartilhado entre rodadas de teste (daí CACHE_FILE_PATH), e o nome do arquivo ia cru para o Content-Disposition — A"1.sh produzia cabeçalho malformado, achado em revisão.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions