# Clk Maybe List

fleeting

Those are stuff that I wish I can do in the future but won’t commit for now. Most of them are fleeting note that still need to be precise. And I won’t work on them till I have a need (pragmatisme).

## make eval: not accept any command

Or it might be a security flaw where people provide extensions with parameters that call arbitrary commands.

## resource based flow

In addition to the classical command flow, I wish I could have a more makefile-ish way of specifying the flow.

A command could indicate the resources it creates and the resources it needs. A resource could be an abstaction of the form.

class Resource:
def exists():
pass


And I could create more than simple file based resources.

Like a port resource.

class PortResource(Resource):
def __init__(self, port):
self.port = port
def exists(self):
return lib.is_port_available(self.port)


Then, I could have a command that is run only if the resource is not fulfilled.

@command(provides=[PortResource(5432)])
def start_postgres():
pass


I could provide a resource command line handler

clk resource set postgre PortResource 5432
clk resource flow postgre

@command(provides=[FileResource("CMakeLists.txt")], needs=[FileResource("somesourceoftruth.yml")])
def generate():
pass

@command(provides=[FileResource("Makefile")], needs=[FileResource("CMakeLists.txt")])
def configure():
pass

@command(needs=[FileResource("Makefile")])
def build():
pass


But then, changing from makefile to ninja would imply to change the resources as well?

## auto exclusive extensions

In case several extensions provides the same features