Goal-Oriented Application Specification Language (GO-ASL)
Title: Goal-Oriented Application Specification Language (GO-ASL) Status: Draft Author: Eric Andre (jonescomas@gmx.de) (concept proposal) Date: 2025-07-11
-
Abstract
-
Introduction
-
Motivation
-
Design Goals
-
Syntax Overview
-
Section Definitions
-
goal
-
constraints
-
preferences
-
principles
-
non_functional_requirements
-
observability
-
reasoning
-
dependencies
-
code_quality
-
internationalization
-
environments
-
data_privacy
-
documentation
-
-
Usage Flow with LLMs
-
Examples
-
Security Considerations
-
Future Work
-
References
-
JSON Schema
The Goal-Oriented Application Specification Language (GO-ASL) defines a structured, machine-readable DSL for instructing large language models (LLMs) to produce application code, configurations, and deployment artifacts. Unlike specification-heavy DSLs that require detailed architectural inputs, GO-ASL focuses on expressing high-level goals, constraints, and principles, allowing LLMs to act as intelligent software architects and generate complete applications end-to-end.
Large Language Models (LLMs) are increasingly capable of generating production-quality software systems. However, unstructured natural language prompts are often ambiguous, leading to misinterpretations, missing requirements, or architectures unsuitable for real-world deployment.
GO-ASL provides a standardized format to capture:
-
the purpose of the application
-
required and prohibited technologies
-
non-functional requirements (NFRs)
-
architectural and design principles
-
constraints on deployment, security, and compliance
The specification ensures consistent communication between developers and LLMs, enabling reproducibility and higher confidence in generated software artifacts.
Several challenges exist with LLM-based software generation:
-
Developers often omit critical NFRs like security, performance, or compliance.
-
LLMs generate divergent outputs due to prompt ambiguities.
-
Professional teams require control over coding standards, architecture patterns, and dependencies.
-
Industry-grade systems must comply with privacy and regulatory requirements.
-
Observability and error handling are frequently neglected in AI-generated code.
GO-ASL aims to bridge this gap by acting as a contract between the developer and the LLM, clarifying both what should be built and how it should adhere to software engineering best practices.
GO-ASL was designed to:
-
Be goal-centric, not architecture-centric.
-
Support minimal inputs for rapid prototyping.
-
Allow precise constraints for enterprise-grade systems.
-
Be human-readable (YAML syntax).
-
Provide sufficient information for LLMs to reason and plan before generating code.
-
Support iterative conversations and refinements between human developers and LLMs.
A GO-ASL document is written in YAML and consists of optional and required sections.
Top-level format:
goal:
...
constraints:
...
preferences:
...
principles:
...
non_functional_requirements:
...
observability:
...
reasoning:
...
dependencies:
...
code_quality:
...
internationalization:
...
environments:
...
data_privacy:
...
documentation:
...Except for goal, all sections are optional.
Required. Defines the purpose and high-level functionality of the desired application.
Fields:
-
name: Short name of the application.
-
description: Natural language explanation of core functionality.
Example:
goal:
name: TaskMaster API
description: >
A RESTful API for managing personal tasks. Users can register,
log in, and create, read, update, or delete tasks. Each task
has a title, description, due date, and completion status.
Specifies non-negotiable requirements.
-
must_use_technologies: List of required technologies.
-
must_not_use_technologies: List of forbidden technologies.
-
deployment_target: E.g. docker-compose, kubernetes, serverless.
-
scale: low | medium | high.
-
budget: low | medium | high.
-
licensing: open-source | proprietary.
Example:
constraints:
must_use_technologies:
- Java
must_not_use_technologies:
- JavaScript
deployment_target: docker-compose
scale: low
budget: low
licensing: open-source
Soft preferences, not hard constraints.
-
preferred_languages
-
preferred_ui_frameworks
-
preferred_database
-
style_tone: concise | verbose | well-commented
Example:
preferences:
preferred_languages:
- Java
preferred_database:
- PostgreSQL
style_tone: well-commented
Controls architectural and coding philosophy.
-
architecture_patterns: e.g. Clean Architecture, Layered Architecture.
-
design_principles: SOLID, DRY, KISS.
-
coding_standards: Style guides or conventions.
-
documentation.style: brief | detailed | none.
-
testing_strategy: TDD, BDD, etc.
Example:
principles:
architecture_patterns:
- Clean Architecture
design_principles:
- SOLID
coding_standards:
- Google Java Style
documentation:
style: detailed
testing_strategy:
- TDD
Specifies NFRs such as:
-
performance:
-
latency_ms
-
throughput_rps
-
-
scalability:
- horizontal_scaling
-
security:
-
auth_mechanisms
-
data_encryption
-
-
compliance:
- GDPR, HIPAA, PCI DSS
-
maintainability:
-
max complexity
-
max file length
-
Example:
non_functional_requirements:
performance:
latency_ms: 200
throughput_rps: 100
security:
auth_mechanisms:
- JWT
data_encryption: at-rest
Specifies monitoring and error handling practices.
-
logging:
-
level
-
format
-
-
metrics:
- monitoring tools
-
tracing:
-
enabled
-
tool
-
Example:
observability:
logging:
level: info
format: json
tracing:
enabled: true
tool: OpenTelemetry
Controls whether the LLM should:
-
produce an architectural plan first
-
explain decisions
-
pause for human validation
Example:
reasoning:
planning_mode: true
explain_design_choices: true
require_user_approval_before_coding: true
Lists allowed or forbidden libraries.
-
approved_libraries
-
forbidden_libraries
-
min_version_requirements
Example:
dependencies:
approved_libraries:
- spring-boot
forbidden_libraries:
- log4j
min_version_requirements:
spring-boot: "3.1.0"
Specifies quality targets.
-
test_coverage_minimum
-
static_analysis:
-
enabled
-
tools
-
-
enforce_linting
Example:
code_quality:
test_coverage_minimum: 80
static_analysis:
enabled: true
tools:
- SonarQube
enforce_linting: true
Indicates multi-language support.
-
supported_languages
-
default_language
Example:
internationalization:
supported_languages:
- en
- de
default_language: en
Defines environment-specific differences.
Example:
environments:
dev:
logging_level: debug
prod:
logging_level: info
secrets_management: vault
Describes privacy and compliance practices.
-
pii_handling:
-
anonymize_data
-
logging_of_pii
-
-
audit_trails
Example:
data_privacy:
pii_handling:
anonymize_data: true
logging_of_pii: false
audit_trails: true
Specifies formats and level of detail.
-
formats: markdown, OpenAPI, etc.
-
include_architecture_diagrams: true | false
Example:
documentation:
formats:
- markdown
- OpenAPI 3.0
include_architecture_diagrams: true
A typical workflow:
-
Developer writes a GO-ASL spec.
-
LLM reads the spec.
-
LLM:
-
Proposes architecture.
-
Explains decisions (if reasoning enabled).
-
-
Developer approves or modifies the plan.
-
LLM generates:
-
source code
-
configurations
-
deployment artifacts
-
-
Developer iteratively refines outputs.
goal:
name: Blogify
description: >
A simple blog platform where users can post articles and comment.
goal:
name: TaskExecutorPro
description: >
A scalable Java Spring Boot 3.4 application for executing background tasks.
The system should support task scheduling, monitoring, retries for failed
tasks, and allow users to cancel running tasks. All task states should be
persisted in a database with regular backups. The system should expose
metrics and logs for monitoring purposes.
constraints:
must_use_technologies:
- Java
- Spring Boot 3.4
deployment_target: kubernetes
scale: high
budget: medium
licensing: open-source
preferences:
preferred_database:
- PostgreSQL
style_tone: well-commented
principles:
architecture_patterns:
- Clean Architecture
design_principles:
- SOLID
- DRY
coding_standards:
- Google Java Style
documentation:
style: detailed
testing_strategy:
- TDD
non_functional_requirements:
performance:
latency_ms: 100
throughput_rps: 1000
scalability:
horizontal_scaling: true
security:
auth_mechanisms:
- OAuth2
data_encryption: at-rest
maintainability:
max_cyclomatic_complexity: 10
observability:
logging:
level: info
format: json
metrics:
tool: Prometheus
tracing:
enabled: true
tool: OpenTelemetry
reasoning:
planning_mode: true
explain_design_choices: true
require_user_approval_before_coding: true
dependencies:
approved_libraries:
- spring-boot
- spring-data-jpa
- spring-security
- spring-actuator
- spring-retry
forbidden_libraries:
- log4j
min_version_requirements:
spring-boot: "3.4.0"
code_quality:
test_coverage_minimum: 85
static_analysis:
enabled: true
tools:
- SonarQube
enforce_linting: true
internationalization:
supported_languages:
- en
environments:
dev:
logging_level: debug
prod:
logging_level: info
secrets_management: vault
data_privacy:
pii_handling:
anonymize_data: true
logging_of_pii: false
audit_trails: true
documentation:
formats:
- markdown
- OpenAPI 3.0
include_architecture_diagrams: true
GO-ASL itself defines no executable behavior and thus poses no direct security risks. However:
-
LLMs interpreting GO-ASL must sanitize outputs to avoid injection vulnerabilities.
-
Sensitive data in specs (e.g. database URLs) should not be committed to public repositories.
Potential future improvements:
-
Formal schemas for validating GO-ASL documents.
-
Standard vocabularies for common app goals.
-
Integration with IDE plugins for GO-ASL editing.
-
Tooling for converting GO-ASL to model-specific prompts automatically.
-
Multi-model compatibility guidelines.
11. JSON Schema